summaryrefslogtreecommitdiff
path: root/src/downloadmanager.cpp
diff options
context:
space:
mode:
authorTannin <devnull@localhost>2013-05-22 20:48:23 +0200
committerTannin <devnull@localhost>2013-05-22 20:48:23 +0200
commit2c4ba2c62cc7acce44d89948e7fb669d5a59b968 (patch)
treed757169f8b587842b16377d77d1544b4062edcc0 /src/downloadmanager.cpp
parentf0ba6ce95c1f30524453ce996fa536a888f018da (diff)
parent0ae7d4753cf607d5de11f0f2b53be478d021cfcd (diff)
Merge
Diffstat (limited to 'src/downloadmanager.cpp')
-rw-r--r--src/downloadmanager.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index 3aeb9429..854942d0 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();