diff options
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(); |
