Browse Source

Fix crash on mod update. Do not reset selection on screenshot download

Ivan Savenko 10 months ago
parent
commit
7cc9aeaa41

+ 0 - 2
launcher/firstLaunch/firstlaunch_moc.h

@@ -55,8 +55,6 @@ class FirstLaunchView : public QWidget
 	bool checkCanInstallExtras();
 	bool checkCanInstallMod(const QString & modID);
 
-	void installMod(const QString & modID);
-
 public:
 	explicit FirstLaunchView(QWidget * parent = nullptr);
 

+ 14 - 12
launcher/modManager/cmodlistview_moc.cpp

@@ -55,7 +55,7 @@ void CModListView::changeEvent(QEvent *event)
 	if(event->type() == QEvent::LanguageChange)
 	{
 		ui->retranslateUi(this);
-		modModel->reloadRepositories();
+		modModel->reloadViewModel();
 	}
 	QWidget::changeEvent(event);
 }
@@ -127,7 +127,7 @@ CModListView::CModListView(QWidget * parent)
 	ui->progressWidget->setVisible(false);
 	dlManager = nullptr;
 
-	modModel->reloadRepositories();
+	modModel->reloadViewModel();
 	if(settings["launcher"]["autoCheckRepositories"].Bool())
 		loadRepositories();
 
@@ -147,7 +147,7 @@ CModListView::CModListView(QWidget * parent)
 void CModListView::reload()
 {
 	modStateModel->reloadLocalState();
-	modModel->reloadRepositories();
+	modModel->reloadViewModel();
 }
 
 void CModListView::loadRepositories()
@@ -611,7 +611,7 @@ void CModListView::on_uninstallButton_clicked()
 		if(modStateModel->isModEnabled(modName))
 			manager->disableMod(modName);
 		manager->uninstallMod(modName);
-		modModel->reloadRepositories();
+		reload();
 	}
 	
 	checkManagerErrors();
@@ -781,7 +781,8 @@ void CModListView::installFiles(QStringList files)
 	{
 		logGlobal->info("Installing repository: started");
 		manager->setRepositoryData(accumulatedRepositoryData);
-		modModel->reloadRepositories();
+		modModel->reloadViewModel();
+		accumulatedRepositoryData.clear();
 
 		static const QString repositoryCachePath = CLauncherDirs::downloadsPath() + "/repositoryCache.json";
 		JsonUtils::jsonToFile(repositoryCachePath, modStateModel->getRepositoryData());
@@ -792,8 +793,7 @@ void CModListView::installFiles(QStringList files)
 	{
 		logGlobal->info("Installing mods: started");
 		installMods(mods);
-		modStateModel->reloadLocalState();
-		modModel->reloadRepositories();
+		reload();
 		logGlobal->info("Installing mods: ended");
 	}
 
@@ -817,8 +817,7 @@ void CModListView::installFiles(QStringList files)
 		{
 			ChroniclesExtractor ce(this, [&prog](float progress) { prog = progress; });
 			ce.installChronicles(exe);
-			modStateModel->reloadLocalState();
-			modModel->reloadRepositories();
+			reload();
 			enableModByName("chronicles");
 			return true;
 		});
@@ -835,8 +834,7 @@ void CModListView::installFiles(QStringList files)
 			ui->pushButton->setEnabled(true);
 			ui->progressWidget->setVisible(false);
 			//update
-			modStateModel->reloadLocalState();
-			modModel->reloadRepositories();
+			reload();
 		}
 		logGlobal->info("Installing chronicles: ended");
 	}
@@ -877,6 +875,8 @@ void CModListView::installMods(QStringList archives)
 		}
 	}
 
+	reload(); // FIXME: better way that won't reset selection
+
 	for(int i = 0; i < modNames.size(); i++)
 	{
 		logGlobal->info("Installing mod '%s'", modNames[i].toStdString());
@@ -884,6 +884,8 @@ void CModListView::installMods(QStringList archives)
 		manager->installMod(modNames[i], archives[i]);
 	}
 
+	reload();
+
 	if (!modsToEnable.empty())
 	{
 		manager->enableMods(modsToEnable);
@@ -1128,7 +1130,7 @@ void CModListView::deletePreset(const QString & presetName)
 void CModListView::activatePreset(const QString & presetName)
 {
 	modStateModel->activatePreset(presetName);
-	modStateModel->reloadLocalState();
+	reload();
 }
 
 void CModListView::renamePreset(const QString & oldPresetName, const QString & newPresetName)

+ 0 - 7
launcher/modManager/modstatecontroller.cpp

@@ -192,9 +192,6 @@ bool ModStateController::doInstallMod(QString modname, QString archivePath)
 	if(!QFile(archivePath).exists())
 		return addError(modname, tr("Mod archive is missing"));
 
-	if(localMods.contains(modname))
-		return addError(modname, tr("Mod with such name is already installed"));
-
 	std::vector<std::string> filesToExtract;
 	QString modDirName = ::detectModArchive(archivePath, modname, filesToExtract);
 	if(!modDirName.size())
@@ -237,8 +234,6 @@ bool ModStateController::doInstallMod(QString modname, QString archivePath)
 	QString upperLevel = modDirName.section('/', 0, 0);
 	if(upperLevel != modDirName)
 		removeModDir(destDir + upperLevel);
-	
-	modList->reloadLocalState();
 
 	return true;
 }
@@ -256,8 +251,6 @@ bool ModStateController::doUninstallMod(QString modname)
 	if(!removeModDir(modDir))
 		return addError(modname, tr("Mod is located in a protected directory, please remove it manually:\n") + modFullDir.absolutePath());
 
-	modList->reloadLocalState();
-
 	return true;
 }
 

+ 0 - 2
launcher/modManager/modstatecontroller.h

@@ -27,8 +27,6 @@ class ModStateController : public QObject, public boost::noncopyable
 	bool doInstallMod(QString mod, QString archivePath);
 	bool doUninstallMod(QString mod);
 
-	QVariantMap localMods;
-
 	QStringList recentErrors;
 	bool addError(QString modname, QString message);
 	bool removeModDir(QString mod);

+ 1 - 1
launcher/modManager/modstateitemmodel_moc.cpp

@@ -195,7 +195,7 @@ QVariant ModStateItemModel::headerData(int section, Qt::Orientation orientation,
 	return QVariant();
 }
 
-void ModStateItemModel::reloadRepositories()
+void ModStateItemModel::reloadViewModel()
 {
 	beginResetModel();
 	endResetModel();

+ 1 - 1
launcher/modManager/modstateitemmodel_moc.h

@@ -72,7 +72,7 @@ public:
 	explicit ModStateItemModel(std::shared_ptr<ModStateModel> model, QObject * parent);
 
 	/// CModListContainer overrides
-	void reloadRepositories();
+	void reloadViewModel();
 	void modChanged(QString modID);
 
 	QVariant data(const QModelIndex & index, int role) const override;