mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-22 22:13:35 +02:00
Fix crash on mod update. Do not reset selection on screenshot download
This commit is contained in:
parent
8b9bbadad8
commit
7cc9aeaa41
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -195,7 +195,7 @@ QVariant ModStateItemModel::headerData(int section, Qt::Orientation orientation,
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void ModStateItemModel::reloadRepositories()
|
||||
void ModStateItemModel::reloadViewModel()
|
||||
{
|
||||
beginResetModel();
|
||||
endResetModel();
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user