diff --git a/src/DownloadManager.cpp b/src/DownloadManager.cpp index 617277a3fe..6215698c76 100644 --- a/src/DownloadManager.cpp +++ b/src/DownloadManager.cpp @@ -1071,27 +1071,35 @@ void DownloadManager::RequestChartLeaderBoard(string chartkey) SendRequest("/charts/"+chartkey+"/leaderboards", vector>(), done, true); } -vector DownloadManager::GetCoreBundle(string whichoneyo) { - vector bundle; - auto done = [this, &bundle](HTTPRequest& req, CURLMsg *) { +void DownloadManager::RefreshCoreBundles() { + auto done = [](HTTPRequest& req, CURLMsg *) { try { - json j= json::parse(req.result); - auto packs = j.find("data"); - if (packs == j.end()) + json j = json::parse(req.result); + auto bundles = j.find("data"); + if (bundles == j.end()) return; auto& dlPacks = DLMAN->downloadablePacks; - for (auto pack : (*packs)) { - auto name = pack["attributes"].value("packName", ""); - auto dlPack = find_if(dlPacks.begin(), dlPacks.end(), - [&name](DownloadablePack x) { return x.name == name; }); - if(dlPack != dlPacks.end()) + for (auto bundle : (*bundles)) { + auto bundleName = bundle.value("id", ""); + auto packs = bundle["attributes"]["packs"]; + (DLMAN->bundles)[bundleName] = {}; + auto& bundle = (DLMAN->bundles)[bundleName]; + for (auto pack : packs) { + auto name = pack.value("packname", ""); + auto dlPack = find_if(dlPacks.begin(), dlPacks.end(), + [&name](DownloadablePack x) { return x.name == name; }); + if (dlPack != dlPacks.end()) bundle.emplace_back(&(*dlPack)); + } } } - catch (exception e) { } + catch (exception e) {} }; - SendRequest("packs/collection/" + whichoneyo, vector>(), done, false, false, false); - return bundle; + SendRequest("packs/collections/", {}, done, false); +} + +vector DownloadManager::GetCoreBundle(string whichoneyo) { + return bundles.count(whichoneyo) ? bundles[whichoneyo] : vector(); } void DownloadManager::DownloadCoreBundle(string whichoneyo) { @@ -1370,6 +1378,7 @@ void DownloadManager::RefreshPackList(string url) } catch (exception e) {} } } catch (exception e) { } + DLMAN->RefreshCoreBundles(); }; SendRequestToURL(url, {}, done, false, false, true); return; diff --git a/src/DownloadManager.h b/src/DownloadManager.h index 1b6479d3fe..67e4fe65ad 100644 --- a/src/DownloadManager.h +++ b/src/DownloadManager.h @@ -209,6 +209,10 @@ class DownloadManager void RefreshUserData(); void RefreshUserRank(); void RefreshTop25(Skillset ss); + void DownloadCoreBundle(string whichoneyo); + map> bundles; + void RefreshCoreBundles(); + vector GetCoreBundle(string whichoneyo); OnlineTopScore GetTopSkillsetScore(unsigned int rank, Skillset ss, bool &result); float GetSkillsetRating(Skillset ss); int GetSkillsetRank(Skillset ss); @@ -219,8 +223,6 @@ class DownloadManager const int maxPacksToDownloadAtOnce = 1; const float DownloadCooldownTime = 5.f; float timeSinceLastDownload = 0.f; - void DownloadCoreBundle(string whichoneyo); - vector GetCoreBundle(string whichoneyo); Packlist pl; // Lua