mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Correctly handle scenario of unavailable mod repository
This commit is contained in:
		| @@ -310,6 +310,10 @@ void FirstLaunchView::modPresetUpdate() | |||||||
| 	ui->checkBoxPresetExtras->setEnabled(checkCanInstallExtras()); | 	ui->checkBoxPresetExtras->setEnabled(checkCanInstallExtras()); | ||||||
| 	ui->checkBoxPresetHota->setEnabled(checkCanInstallHota()); | 	ui->checkBoxPresetHota->setEnabled(checkCanInstallHota()); | ||||||
| 	ui->checkBoxPresetWog->setEnabled(checkCanInstallWog()); | 	ui->checkBoxPresetWog->setEnabled(checkCanInstallWog()); | ||||||
|  |  | ||||||
|  | 	// we can't install anything - either repository checkout is off or all recommended mods are already installed | ||||||
|  | 	if (!checkCanInstallTranslation() && !checkCanInstallExtras() && !checkCanInstallHota() && !checkCanInstallWog()) | ||||||
|  | 		exitSetup(); | ||||||
| } | } | ||||||
|  |  | ||||||
| QString FirstLaunchView::findTranslationModName() | QString FirstLaunchView::findTranslationModName() | ||||||
| @@ -364,7 +368,7 @@ CModListView * FirstLaunchView::getModView() | |||||||
|  |  | ||||||
| bool FirstLaunchView::checkCanInstallMod(const QString & modID) | bool FirstLaunchView::checkCanInstallMod(const QString & modID) | ||||||
| { | { | ||||||
| 	return getModView() && !getModView()->isModInstalled(modID); | 	return getModView() && getModView()->isModAvailable(modID); | ||||||
| } | } | ||||||
|  |  | ||||||
| void FirstLaunchView::on_pushButtonPresetBack_clicked() | void FirstLaunchView::on_pushButtonPresetBack_clicked() | ||||||
| @@ -376,16 +380,16 @@ void FirstLaunchView::on_pushButtonPresetNext_clicked() | |||||||
| { | { | ||||||
| 	QStringList modsToInstall; | 	QStringList modsToInstall; | ||||||
|  |  | ||||||
| 	if (ui->checkBoxPresetLanguage && checkCanInstallTranslation()) | 	if (ui->checkBoxPresetLanguage->isChecked() && checkCanInstallTranslation()) | ||||||
| 		modsToInstall.push_back(findTranslationModName()); | 		modsToInstall.push_back(findTranslationModName()); | ||||||
|  |  | ||||||
| 	if (ui->checkBoxPresetExtras && checkCanInstallExtras()) | 	if (ui->checkBoxPresetExtras->isChecked() && checkCanInstallExtras()) | ||||||
| 		modsToInstall.push_back("vcmi-extras"); | 		modsToInstall.push_back("vcmi-extras"); | ||||||
|  |  | ||||||
| 	if (ui->checkBoxPresetWog && checkCanInstallWog()) | 	if (ui->checkBoxPresetWog->isChecked() && checkCanInstallWog()) | ||||||
| 		modsToInstall.push_back("wake-of-gods"); | 		modsToInstall.push_back("wake-of-gods"); | ||||||
|  |  | ||||||
| 	if (ui->checkBoxPresetHota && checkCanInstallHota()) | 	if (ui->checkBoxPresetHota->isChecked() && checkCanInstallHota()) | ||||||
| 		modsToInstall.push_back("hota"); | 		modsToInstall.push_back("hota"); | ||||||
|  |  | ||||||
| 	exitSetup(); | 	exitSetup(); | ||||||
|   | |||||||
| @@ -829,10 +829,10 @@ void CModListView::doInstallMod(const QString & modName) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| bool CModListView::isModInstalled(const QString & modName) | bool CModListView::isModAvailable(const QString & modName) | ||||||
| { | { | ||||||
| 	auto mod = modModel->getMod(modName); | 	auto mod = modModel->getMod(modName); | ||||||
| 	return mod.isInstalled(); | 	return mod.isAvailable(); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool CModListView::isModEnabled(const QString & modName) | bool CModListView::isModEnabled(const QString & modName) | ||||||
|   | |||||||
| @@ -86,8 +86,8 @@ public: | |||||||
| 	/// install mod by name | 	/// install mod by name | ||||||
| 	void doInstallMod(const QString & modName); | 	void doInstallMod(const QString & modName); | ||||||
|  |  | ||||||
| 	/// returns true if mod is currently installed | 	/// returns true if mod is available in repository and can be installed | ||||||
| 	bool isModInstalled(const QString & modName); | 	bool isModAvailable(const QString & modName); | ||||||
|  |  | ||||||
| 	/// finds translation mod for specified languages. Returns empty string on error | 	/// finds translation mod for specified languages. Returns empty string on error | ||||||
| 	QString getTranslationModName(const QString & language); | 	QString getTranslationModName(const QString & language); | ||||||
|   | |||||||
| @@ -375,7 +375,7 @@ void CSettingsView::loadTranslation() | |||||||
| 	if (!translationExists) | 	if (!translationExists) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	bool translationInstalled = mainWindow->getModView()->isModInstalled(modName); | 	bool translationAvailable = mainWindow->getModView()->isModAvailable(modName); | ||||||
| 	bool translationEnabled = mainWindow->getModView()->isModEnabled(modName); | 	bool translationEnabled = mainWindow->getModView()->isModEnabled(modName); | ||||||
|  |  | ||||||
| 	ui->pushButtonTranslation->setVisible(!translationEnabled); | 	ui->pushButtonTranslation->setVisible(!translationEnabled); | ||||||
| @@ -385,13 +385,13 @@ void CSettingsView::loadTranslation() | |||||||
| 		ui->labelTranslationStatus->setText(tr("Active")); | 		ui->labelTranslationStatus->setText(tr("Active")); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (translationInstalled && !translationEnabled) | 	if (!translationEnabled && !translationAvailable) | ||||||
| 	{ | 	{ | ||||||
| 		ui->labelTranslationStatus->setText(tr("Disabled")); | 		ui->labelTranslationStatus->setText(tr("Disabled")); | ||||||
| 		ui->pushButtonTranslation->setText(tr("Enable")); | 		ui->pushButtonTranslation->setText(tr("Enable")); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (!translationInstalled) | 	if (translationAvailable) | ||||||
| 	{ | 	{ | ||||||
| 		ui->labelTranslationStatus->setText(tr("Not Installed")); | 		ui->labelTranslationStatus->setText(tr("Not Installed")); | ||||||
| 		ui->pushButtonTranslation->setText(tr("Install")); | 		ui->pushButtonTranslation->setText(tr("Install")); | ||||||
| @@ -413,15 +413,15 @@ void CSettingsView::on_pushButtonTranslation_clicked() | |||||||
| 	if (modName.isEmpty()) | 	if (modName.isEmpty()) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	if (mainWindow->getModView()->isModInstalled(modName)) | 	if (mainWindow->getModView()->isModAvailable(modName)) | ||||||
| 	{ |  | ||||||
| 		mainWindow->getModView()->enableModByName(modName); |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ | 	{ | ||||||
| 		mainWindow->switchToModsTab(); | 		mainWindow->switchToModsTab(); | ||||||
| 		mainWindow->getModView()->doInstallMod(modName); | 		mainWindow->getModView()->doInstallMod(modName); | ||||||
| 	} | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		mainWindow->getModView()->enableModByName(modName); | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| void CSettingsView::on_comboBoxLanguageBase_currentIndexChanged(int index) | void CSettingsView::on_comboBoxLanguageBase_currentIndexChanged(int index) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user