diff options
| author | LostDragonist <lost.dragonist@gmail.com> | 2019-09-28 08:13:42 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-28 08:13:42 -0500 |
| commit | a7afc1664cfa59ca827c186a47101ab5d7eda9ca (patch) | |
| tree | c39fa3df24cce9baf271ad640ef2aee7285aa513 /src | |
| parent | d0099f577e9eabc7575321e68754fd41663827fe (diff) | |
| parent | 4fe267b6b46bdd97cd0b221ff9d91d1618e537e9 (diff) | |
Merge pull request #844 from LostDragonist/Develop
Fix md5 hashing for large download files
Diffstat (limited to 'src')
| -rw-r--r-- | src/downloadmanager.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index 56238ef3..35f60d7a 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -985,16 +985,39 @@ void DownloadManager::queryInfoMd5(int index) downloadFile.setFileName(m_OrganizerCore->downloadsPath() + "\\" + info->m_FileName); } if (!downloadFile.exists()) { - log::debug("Can't find download file {}", info->m_FileName); + log::error("Can't find download file '{}'", info->m_FileName); return; } if (!downloadFile.open(QIODevice::ReadOnly)) { - log::debug("Can't open download file {}", info->m_FileName); + log::error("Can't open download file '{}'", info->m_FileName); return; } - info->m_Hash = QCryptographicHash::hash(downloadFile.readAll(), QCryptographicHash::Md5); + + QCryptographicHash hash(QCryptographicHash::Md5); + const qint64 progressStep = 10 * 1024 * 1024; + QProgressDialog progress(tr("Hashing download file '%1'").arg(info->m_FileName), + tr("Cancel"), + 0, + downloadFile.size() / progressStep); + progress.setWindowModality(Qt::WindowModal); + progress.setMinimumDuration(1000); + + for (qint64 i = 0; i < downloadFile.size(); i += progressStep) { + progress.setValue(progress.value()+1); + if (progress.wasCanceled()) { + break; + } + hash.addData(downloadFile.read(progressStep)); + } + if (progress.wasCanceled()) { + downloadFile.close(); + return; + } + + progress.close(); downloadFile.close(); + info->m_Hash = hash.result(); info->m_ReQueried = true; setState(info, STATE_FETCHINGMODINFO_MD5); } |
