diff --git a/launcher/firstLaunch/firstlaunch_moc.h b/launcher/firstLaunch/firstlaunch_moc.h index a35aa4820..a5fb752f3 100644 --- a/launcher/firstLaunch/firstlaunch_moc.h +++ b/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); diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp index d59238eb7..3bc5b7e98 100644 --- a/launcher/modManager/cmodlistview_moc.cpp +++ b/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) diff --git a/launcher/modManager/modstatecontroller.cpp b/launcher/modManager/modstatecontroller.cpp index 77bd3fc03..df799a8e1 100644 --- a/launcher/modManager/modstatecontroller.cpp +++ b/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 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; } diff --git a/launcher/modManager/modstatecontroller.h b/launcher/modManager/modstatecontroller.h index 9ee087feb..fa28982ab 100644 --- a/launcher/modManager/modstatecontroller.h +++ b/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); diff --git a/launcher/modManager/modstateitemmodel_moc.cpp b/launcher/modManager/modstateitemmodel_moc.cpp index fa82c8d39..9d9bfe8c1 100644 --- a/launcher/modManager/modstateitemmodel_moc.cpp +++ b/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(); diff --git a/launcher/modManager/modstateitemmodel_moc.h b/launcher/modManager/modstateitemmodel_moc.h index 22f1da0f4..6b0a64656 100644 --- a/launcher/modManager/modstateitemmodel_moc.h +++ b/launcher/modManager/modstateitemmodel_moc.h @@ -72,7 +72,7 @@ public: explicit ModStateItemModel(std::shared_ptr model, QObject * parent); /// CModListContainer overrides - void reloadRepositories(); + void reloadViewModel(); void modChanged(QString modID); QVariant data(const QModelIndex & index, int role) const override;