diff options
| author | Tannin <devnull@localhost> | 2013-05-19 11:37:03 +0200 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2013-05-19 11:37:03 +0200 |
| commit | cdea0c9da56b20bce0213310ba29fbf6df045443 (patch) | |
| tree | 6275e3cf77a569493324df9cdfc63aa4e6631c43 /src/downloadmanager.cpp | |
| parent | 45f6cd21a2c730b9dea322b0dba30120cdc40521 (diff) | |
| parent | 0beb88760b4c258b89daf5791069dc885c0c27aa (diff) | |
Merge
Diffstat (limited to 'src/downloadmanager.cpp')
| -rw-r--r-- | src/downloadmanager.cpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index aa6ba12b..48019fd2 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -42,11 +42,13 @@ using namespace MOBase; static const char UNFINISHED[] = ".unfinished"; +unsigned int DownloadManager::DownloadInfo::s_NextDownloadID = 1U; + DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createNew(const NexusInfo &nexusInfo, int modID, int fileID, const QStringList &URLs) { DownloadInfo *info = new DownloadInfo; - + info->m_DownloadID = s_NextDownloadID++; info->m_StartTime.start(); info->m_Progress = 0; info->m_ResumePos = 0; @@ -88,6 +90,7 @@ DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createFromMeta(con } } + info->m_DownloadID = s_NextDownloadID++; info->m_Output.setFileName(filePath); info->m_ModID = metaFile.value("modID", 0).toInt(); info->m_FileID = metaFile.value("fileID", 0).toInt(); @@ -466,6 +469,18 @@ void DownloadManager::resumeDownload(int index) } +DownloadManager::DownloadInfo *DownloadManager::downloadInfoByID(unsigned int id) +{ + auto iter = std::find_if(m_ActiveDownloads.begin(), m_ActiveDownloads.end(), + [id](DownloadInfo *info) { return info->m_DownloadID == id; }); + if (iter != m_ActiveDownloads.end()) { + return *iter; + } else { + return NULL; + } +} + + void DownloadManager::queryInfo(int index) { if ((index < 0) || (index >= m_ActiveDownloads.size())) { @@ -637,10 +652,10 @@ void DownloadManager::setState(DownloadManager::DownloadInfo *info, DownloadMana info->m_Reply->abort(); } break; case STATE_FETCHINGMODINFO: { - m_RequestIDs.insert(m_NexusInterface->requestDescription(info->m_ModID, this, qVariantFromValue(static_cast<void*>(info)))); + m_RequestIDs.insert(m_NexusInterface->requestDescription(info->m_ModID, this, info->m_DownloadID)); } break; case STATE_FETCHINGFILEINFO: { - m_RequestIDs.insert(m_NexusInterface->requestFiles(info->m_ModID, this, qVariantFromValue(static_cast<void*>(info)))); + m_RequestIDs.insert(m_NexusInterface->requestFiles(info->m_ModID, this, info->m_DownloadID)); } break; case STATE_READY: { createMetaFile(info); @@ -739,7 +754,10 @@ void DownloadManager::nxmDescriptionAvailable(int, QVariant userData, QVariant r QVariantMap result = resultData.toMap(); - DownloadInfo *info = static_cast<DownloadInfo*>(userData.value<void*>()); +// DownloadInfo *info = static_cast<DownloadInfo*>(userData.value<void*>()); + DownloadInfo *info = downloadInfoByID(userData.toInt()); + if (info == NULL) return; + info->m_NexusInfo.m_Category = result["category_id"].toInt(); info->m_NexusInfo.m_ModName = result["name"].toString().trimmed(); info->m_NexusInfo.m_NewestVersion = result["version"].toString(); @@ -761,7 +779,8 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD m_RequestIDs.erase(idIter); } - DownloadInfo *info = static_cast<DownloadInfo*>(userData.value<void*>()); + DownloadInfo *info = downloadInfoByID(userData.toInt()); + if (info == NULL) return; QVariantList result = resultData.toList(); |
