summaryrefslogtreecommitdiffstats
path: root/logic
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-09-10 00:29:25 +0200
committerPetr Mrázek <peterix@gmail.com>2013-09-10 00:29:25 +0200
commit91a3e650e98c289ec183e8c4091da0dae0968f88 (patch)
tree9e40a21805b2fcca7d5b2ed348cd8ac87343ff1a /logic
parent2ae60038aaa36e91426b32667a2668aba8497dfc (diff)
downloadMultiMC-91a3e650e98c289ec183e8c4091da0dae0968f88.tar
MultiMC-91a3e650e98c289ec183e8c4091da0dae0968f88.tar.gz
MultiMC-91a3e650e98c289ec183e8c4091da0dae0968f88.tar.lz
MultiMC-91a3e650e98c289ec183e8c4091da0dae0968f88.tar.xz
MultiMC-91a3e650e98c289ec183e8c4091da0dae0968f88.zip
Fix download progress (bars)
Diffstat (limited to 'logic')
-rw-r--r--logic/net/DownloadJob.cpp19
-rw-r--r--logic/net/DownloadJob.h3
2 files changed, 21 insertions, 1 deletions
diff --git a/logic/net/DownloadJob.cpp b/logic/net/DownloadJob.cpp
index cbc2c5fe..090df260 100644
--- a/logic/net/DownloadJob.cpp
+++ b/logic/net/DownloadJob.cpp
@@ -10,6 +10,8 @@ ByteArrayDownloadPtr DownloadJob::add ( QUrl url )
ByteArrayDownloadPtr ptr (new ByteArrayDownload(url));
ptr->index_within_job = downloads.size();
downloads.append(ptr);
+ parts_progress.append(QPair<qint64, qint64>(0,1));
+ total_progress++;
return ptr;
}
@@ -18,6 +20,8 @@ FileDownloadPtr DownloadJob::add ( QUrl url, QString rel_target_path)
FileDownloadPtr ptr (new FileDownload(url, rel_target_path));
ptr->index_within_job = downloads.size();
downloads.append(ptr);
+ parts_progress.append(QPair<qint64, qint64>(0,1));
+ total_progress++;
return ptr;
}
@@ -26,6 +30,8 @@ CacheDownloadPtr DownloadJob::add ( QUrl url, MetaEntryPtr entry)
CacheDownloadPtr ptr (new CacheDownload(url, entry));
ptr->index_within_job = downloads.size();
downloads.append(ptr);
+ parts_progress.append(QPair<qint64, qint64>(0,1));
+ total_progress++;
return ptr;
}
@@ -60,7 +66,16 @@ void DownloadJob::partFailed ( int index )
void DownloadJob::partProgress ( int index, qint64 bytesReceived, qint64 bytesTotal )
{
- // PROGRESS? DENIED!
+ auto & slot = parts_progress[index];
+
+ current_progress -= slot.first;
+ slot.first = bytesReceived;
+ current_progress += slot.first;
+
+ total_progress -= slot.second;
+ slot.second = bytesTotal;
+ total_progress += slot.second;
+ emit progress(current_progress, total_progress);
}
@@ -70,6 +85,8 @@ void DownloadJob::start()
for(auto iter: downloads)
{
connect(iter.data(), SIGNAL(succeeded(int)), SLOT(partSucceeded(int)));
+ connect(iter.data(), SIGNAL(failed(int)), SLOT(partFailed(int)));
+ connect(iter.data(), SIGNAL(progress(int,qint64,qint64)), SLOT(partProgress(int,qint64,qint64)));
iter->start();
}
}
diff --git a/logic/net/DownloadJob.h b/logic/net/DownloadJob.h
index 71466282..69a49e59 100644
--- a/logic/net/DownloadJob.h
+++ b/logic/net/DownloadJob.h
@@ -51,6 +51,9 @@ private slots:
private:
QString m_job_name;
QList<DownloadPtr> downloads;
+ QList<QPair<qint64, qint64>> parts_progress;
+ qint64 current_progress = 0;
+ qint64 total_progress = 0;
int num_succeeded = 0;
int num_failed = 0;
};