1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-13 01:20:34 +02:00

Correctly handle scenario of unavailable mod repository

This commit is contained in:
Ivan Savenko
2023-03-26 20:11:59 +03:00
parent a4fe11d413
commit 5357709b17
4 changed files with 21 additions and 17 deletions

View File

@ -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();

View File

@ -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)

View File

@ -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);

View File

@ -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)