From b85a2f99c1308911b164b6a8f042f89de8ebede7 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 5 Sep 2023 13:33:26 +0300 Subject: [PATCH] Quick fix to avoid freeze on Launcher startup / mod repo checkout --- launcher/modManager/cmodlistmodel_moc.cpp | 7 ------- launcher/modManager/cmodlistmodel_moc.h | 1 - launcher/modManager/cmodlistview_moc.cpp | 18 +++++++++++------- launcher/modManager/cmodmanager.cpp | 6 ++++-- launcher/modManager/cmodmanager.h | 2 +- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/launcher/modManager/cmodlistmodel_moc.cpp b/launcher/modManager/cmodlistmodel_moc.cpp index 2a0a8ebc3..9bde9860e 100644 --- a/launcher/modManager/cmodlistmodel_moc.cpp +++ b/launcher/modManager/cmodlistmodel_moc.cpp @@ -192,13 +192,6 @@ void CModListModel::resetRepositories() endResetModel(); } -void CModListModel::addRepository(QVariantMap data) -{ - beginResetModel(); - CModList::addRepository(data); - endResetModel(); -} - void CModListModel::modChanged(QString modID) { int index = modNameToID.indexOf(modID); diff --git a/launcher/modManager/cmodlistmodel_moc.h b/launcher/modManager/cmodlistmodel_moc.h index 2c43485c9..65a905409 100644 --- a/launcher/modManager/cmodlistmodel_moc.h +++ b/launcher/modManager/cmodlistmodel_moc.h @@ -61,7 +61,6 @@ public: /// CModListContainer overrides void resetRepositories() override; void reloadRepositories() override; - void addRepository(QVariantMap data) override; void modChanged(QString modID) override; QVariant data(const QModelIndex & index, int role) const override; diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp index 7ecf53ab3..64481f72a 100644 --- a/launcher/modManager/cmodlistview_moc.cpp +++ b/launcher/modManager/cmodlistview_moc.cpp @@ -657,6 +657,7 @@ void CModListView::installFiles(QStringList files) { QStringList mods; QStringList images; + QVector repositories; // TODO: some better way to separate zip's with mods and downloaded repository files for(QString filename : files) @@ -666,12 +667,12 @@ void CModListView::installFiles(QStringList files) if(filename.endsWith(".json")) { //download and merge additional files - auto repodata = JsonUtils::JsonFromFile(filename).toMap(); - if(repodata.value("name").isNull()) + auto repoData = JsonUtils::JsonFromFile(filename).toMap(); + if(repoData.value("name").isNull()) { - for(const auto & key : repodata.keys()) + for(const auto & key : repoData.keys()) { - auto modjson = repodata[key].toMap().value("mod"); + auto modjson = repoData[key].toMap().value("mod"); if(!modjson.isNull()) { downloadFile(key + ".json", modjson.toString(), "repository index"); @@ -682,14 +683,17 @@ void CModListView::installFiles(QStringList files) { auto modn = QFileInfo(filename).baseName(); QVariantMap temp; - temp[modn] = repodata; - repodata = temp; + temp[modn] = repoData; + repoData = temp; } - manager->loadRepository(repodata); + repositories.push_back(repoData); } if(filename.endsWith(".png")) images.push_back(filename); } + + manager->loadRepositories(repositories); + if(!mods.empty()) installMods(mods); diff --git a/launcher/modManager/cmodmanager.cpp b/launcher/modManager/cmodmanager.cpp index d76452ada..350007a33 100644 --- a/launcher/modManager/cmodmanager.cpp +++ b/launcher/modManager/cmodmanager.cpp @@ -68,9 +68,11 @@ void CModManager::resetRepositories() modList->resetRepositories(); } -void CModManager::loadRepository(QVariantMap repomap) +void CModManager::loadRepositories(QVector repomap) { - modList->addRepository(repomap); + for (auto const & entry : repomap) + modList->addRepository(entry); + modList->reloadRepositories(); } void CModManager::loadMods() diff --git a/launcher/modManager/cmodmanager.h b/launcher/modManager/cmodmanager.h index 9a7aa1403..d2bc6271d 100644 --- a/launcher/modManager/cmodmanager.h +++ b/launcher/modManager/cmodmanager.h @@ -35,7 +35,7 @@ public: CModManager(CModList * modList); void resetRepositories(); - void loadRepository(QVariantMap repomap); + void loadRepositories(QVector repomap); void loadModSettings(); void loadMods();