From 6c5cb1628727cc48db68c2f1b743eb5bd77f4149 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Wed, 18 Jul 2018 19:14:07 -0300 Subject: [PATCH] Fix pack bundle dls (Hopefully) --- src/DownloadManager.cpp | 41 +++++++++++++++-------------------------- src/DownloadManager.h | 5 +++++ 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/DownloadManager.cpp b/src/DownloadManager.cpp index d1003d6e1a..8f4d549310 100644 --- a/src/DownloadManager.cpp +++ b/src/DownloadManager.cpp @@ -191,7 +191,7 @@ inline CURL* initCURLHandle() { struct curl_slist *list = NULL; list = curl_slist_append(list, ("Authorization: Bearer " + DLMAN->authToken).c_str()); curl_easy_setopt(curlHandle, CURLOPT_HTTPHEADER, list); - curl_easy_setopt(curlHandle, CURLOPT_TIMEOUT, 60);//Seconds + curl_easy_setopt(curlHandle, CURLOPT_TIMEOUT, 120);//Seconds return curlHandle; } inline bool addFileToForm(curl_httppost *&form, curl_httppost *&lastPtr, string field, string fileName, string filePath, RString &contents) @@ -366,6 +366,10 @@ Download* DownloadManager::DownloadAndInstallPack(DownloadablePack* pack) return nullptr; } } + if (downloadingPacks >= maxPacksToDownloadAtOnce) { + DLMAN->DownloadQueue.emplace_back(pack); + return nullptr; + } Download* dl = DownloadAndInstallPack(pack->url); dl->p_Pack = pack; return dl; @@ -453,6 +457,7 @@ void DownloadManager::UpdateHTTP(float fDeltaSeconds) } void DownloadManager::UpdatePacks(float fDeltaSeconds) { + timeSinceLastDownload += fDeltaSeconds; if (pendingInstallDownloads.size() > 0 && !gameplay) { //Install all pending packs for (auto i = pendingInstallDownloads.begin(); i != pendingInstallDownloads.end(); i++) { @@ -470,6 +475,12 @@ void DownloadManager::UpdatePacks(float fDeltaSeconds) else SONGMAN->DifferentialReload(); } + if (downloadingPacks < maxPacksToDownloadAtOnce && !DownloadQueue.empty() && timeSinceLastDownload > DownloadCooldownTime) { + auto it = DownloadQueue.begin(); + DownloadQueue.pop_front(); + auto pack = *it; + auto dl = DLMAN->DownloadAndInstallPack(pack); + } if (!downloadingPacks) return; timeval timeout; @@ -521,6 +532,7 @@ void DownloadManager::UpdatePacks(float fDeltaSeconds) if (i->second->p_RFWrapper.file.IsOpen()) i->second->p_RFWrapper.file.Close(); if (msg->msg == CURLMSG_DONE) { + timeSinceLastDownload = 0; i->second->Done(i->second); if (!gameplay) { installedPacks = true; @@ -1034,31 +1046,8 @@ vector DownloadManager::GetCoreBundle(string whichoneyo) { void DownloadManager::DownloadCoreBundle(string whichoneyo) { auto bundle = GetCoreBundle(whichoneyo); sort(bundle.begin(), bundle.end(), [](DownloadablePack* x1, DownloadablePack* x2) {return x1->size < x2->size; }); - std::deque* list = new std::deque(); - std::move( - begin(bundle), - end(bundle), - back_inserter(*list) - ); - auto it = list->begin(); - if (it == list->end()) - return; - auto pack = *it; - list->pop_front(); - function down = [list](Download* dl) { - auto it = list->begin(); - if (it != list->end()) { - auto pack = *it; - list->pop_front(); - auto newDl = DLMAN->DownloadAndInstallPack(pack->url); - newDl->Done = dl->Done; - } - else { - delete list; - } - }; - auto dl = DLMAN->DownloadAndInstallPack(pack->url); - dl->Done = down; + for (auto pack : bundle) + DLMAN->DownloadQueue.emplace_back(pack); } void DownloadManager::RefreshLastVersion() diff --git a/src/DownloadManager.h b/src/DownloadManager.h index b6264f6b90..f23ec1bb86 100644 --- a/src/DownloadManager.h +++ b/src/DownloadManager.h @@ -16,6 +16,7 @@ #include "RageFileManager.h" #include "curl/curl.h" #include "Difficulty.h" +#include class DownloadablePack; @@ -199,6 +200,10 @@ class DownloadManager // most recent single score upload result -mina RString mostrecentresult = ""; + std::deque DownloadQueue; + const int maxPacksToDownloadAtOnce = 1; + const long DownloadCooldownTime = 5; + long timeSinceLastDownload = 0; void DownloadCoreBundle(string whichoneyo); vector GetCoreBundle(string whichoneyo);