Pārlūkot izejas kodu

Quick fix to avoid freeze on Launcher startup / mod repo checkout

Ivan Savenko 2 gadi atpakaļ
vecāks
revīzija
b85a2f99c1

+ 0 - 7
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);

+ 0 - 1
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;

+ 11 - 7
launcher/modManager/cmodlistview_moc.cpp

@@ -657,6 +657,7 @@ void CModListView::installFiles(QStringList files)
 {
 	QStringList mods;
 	QStringList images;
+	QVector<QVariantMap> 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);
 

+ 4 - 2
launcher/modManager/cmodmanager.cpp

@@ -68,9 +68,11 @@ void CModManager::resetRepositories()
 	modList->resetRepositories();
 }
 
-void CModManager::loadRepository(QVariantMap repomap)
+void CModManager::loadRepositories(QVector<QVariantMap> repomap)
 {
-	modList->addRepository(repomap);
+	for (auto const & entry : repomap)
+		modList->addRepository(entry);
+	modList->reloadRepositories();
 }
 
 void CModManager::loadMods()

+ 1 - 1
launcher/modManager/cmodmanager.h

@@ -35,7 +35,7 @@ public:
 	CModManager(CModList * modList);
 
 	void resetRepositories();
-	void loadRepository(QVariantMap repomap);
+	void loadRepositories(QVector<QVariantMap> repomap);
 	void loadModSettings();
 	void loadMods();