From 4c5e3da2334a1d0c474148be8881b46d6ca6d3fa Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Mon, 17 Aug 2020 05:06:26 -0400 Subject: moved nexus api stuff to GlobalSettings pass a pointer to Settings around for things that can be called without settings, when creating the first instance added dummy plugin list, mod list and iorganizer to initialize plugins without an instance moved PluginContainer into the core filter, had nothing to do with the plugins list NexusInterface is now created manually instead of being a static singleton because it needs to know if the settings are available --- src/modlist.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/modlist.cpp') diff --git a/src/modlist.cpp b/src/modlist.cpp index 1f845999..bf9aef83 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -1528,3 +1528,44 @@ void ModList::disableSelected(const QItemSelectionModel *selectionModel) m_Profile->setModsEnabled(QList(), modsToDisable); } } + + +QString DummyModList::displayName(const QString &internalName) const +{ + return {}; +} + +QStringList DummyModList::allMods() const +{ + return {}; +} + +IModList::ModStates DummyModList::state(const QString &name) const +{ + return 0; +} + +bool DummyModList::setActive(const QString &name, bool active) +{ + return true; +} + +int DummyModList::priority(const QString &name) const +{ + return -1; +} + +bool DummyModList::setPriority(const QString &name, int newPriority) +{ + return true; +} + +bool DummyModList::onModStateChanged(const std::function &func) +{ + return true; +} + +bool DummyModList::onModMoved(const std::function &func) +{ + return true; +} -- cgit v1.3.1 From 356d17b2ea70d9bfdc36d8199e12eb21cd3d4669 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sat, 31 Oct 2020 16:08:05 -0400 Subject: fixes after rebasing --- src/mainwindow.cpp | 2 +- src/modinfo.cpp | 2 +- src/modinfo.h | 2 +- src/modinfodialogconflicts.cpp | 14 +++---- src/modlist.cpp | 48 +++++++++++++++++----- src/modlist.h | 8 +++- src/organizerproxy.cpp | 36 +++++++---------- src/organizerproxy.h | 91 ++++++++++++++++++++---------------------- src/pluginlist.cpp | 9 ++++- src/pluginlist.h | 3 +- src/thread_utils.h | 5 +-- 11 files changed, 126 insertions(+), 94 deletions(-) (limited to 'src/modlist.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9ad51510..6a648512 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -4221,7 +4221,7 @@ void MainWindow::checkModsForUpdates() { bool checkingModsForUpdate = false; if (NexusInterface::instance().getAccessManager()->validated()) { - checkingModsForUpdate = ModInfo::checkAllForUpdate(this); + checkingModsForUpdate = ModInfo::checkAllForUpdate(&m_PluginContainer, this); NexusInterface::instance().requestEndorsementInfo(this, QVariant(), QString()); NexusInterface::instance().requestTrackingInfo(this, QVariant(), QString()); } else { diff --git a/src/modinfo.cpp b/src/modinfo.cpp index 04cb18ce..a0382fe8 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -295,7 +295,7 @@ ModInfo::ModInfo(PluginContainer *pluginContainer) } -bool ModInfo::checkAllForUpdate(QObject *receiver) +bool ModInfo::checkAllForUpdate(PluginContainer *pluginContainer, QObject *receiver) { bool updatesAvailable = true; diff --git a/src/modinfo.h b/src/modinfo.h index 480fe013..e5e46741 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -197,7 +197,7 @@ public: // Static functions: * * @return true if any mods are checked for update. */ - static bool checkAllForUpdate(QObject *receiver); + static bool checkAllForUpdate(PluginContainer *pluginContainer, QObject *receiver); /** * diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp index 0103b58a..cf7f6340 100644 --- a/src/modinfodialogconflicts.cpp +++ b/src/modinfodialogconflicts.cpp @@ -1001,7 +1001,7 @@ std::optional AdvancedConflictsTab::createItem( if (currOrigin->getID() == fileOrigin) { // current origin is the active winner, all alternatives go in 'before' - + if (showAllAlts) { for (const auto& alt : alternatives) { @@ -1023,7 +1023,7 @@ std::optional AdvancedConflictsTab::createItem( } else { // current mod is one of the alternatives, find its position - + auto currOrgId = currOrigin->getID(); auto currModIter = std::find_if(alternatives.begin(), alternatives.end(), @@ -1037,14 +1037,14 @@ std::optional AdvancedConflictsTab::createItem( } isCurrOrigArchive = currModIter->isFromArchive(); - + if (showAllAlts) { // fills 'before' and 'after' with all the alternatives that come - // before and after the current mod, trusting the alternatives vector to be + // before and after the current mod, trusting the alternatives vector to be // already sorted correctly - + for (auto iter = alternatives.begin(); iter != alternatives.end(); iter++) { - + const auto& altOrigin = ds.getOriginByID(iter->originID()); if (iter < currModIter) { @@ -1094,7 +1094,7 @@ std::optional AdvancedConflictsTab::createItem( after += ds.getOriginByID(fileOrigin).getName(); } - + } } } diff --git a/src/modlist.cpp b/src/modlist.cpp index bf9aef83..c98464a9 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -977,7 +977,7 @@ int ModList::setActive(const QStringList& names, bool active) { indices.append(modIndex); } else { - log::debug("Trying to {} mod {} which does not exist.", + log::debug("Trying to {} mod {} which does not exist.", active ? "enable" : "disable", name); } } @@ -1043,7 +1043,7 @@ void ModList::notifyModRemoved(QString const& modName) const m_ModRemoved(modName); } -void ModList::notifyModStateChanged(QList modIndices) const +void ModList::notifyModStateChanged(QList modIndices) const { std::map mods; for (auto modIndex : modIndices) { @@ -1530,7 +1530,7 @@ void ModList::disableSelected(const QItemSelectionModel *selectionModel) } -QString DummyModList::displayName(const QString &internalName) const +QString DummyModList::displayName(const QString&) const { return {}; } @@ -1540,32 +1540,62 @@ QStringList DummyModList::allMods() const return {}; } -IModList::ModStates DummyModList::state(const QString &name) const +QStringList DummyModList::allModsByProfilePriority(MOBase::IProfile*) const +{ + return {}; +} + +IModInterface* DummyModList::getMod(const QString&) const +{ + return nullptr; +} + +bool DummyModList::removeMod(MOBase::IModInterface*) +{ + return true; +} + +IModList::ModStates DummyModList::state(const QString&) const { return 0; } -bool DummyModList::setActive(const QString &name, bool active) +bool DummyModList::setActive(const QString&, bool) { return true; } -int DummyModList::priority(const QString &name) const +int DummyModList::setActive(const QStringList&, bool) +{ + return 0; +} + +int DummyModList::priority(const QString&) const { return -1; } -bool DummyModList::setPriority(const QString &name, int newPriority) +bool DummyModList::setPriority(const QString&, int) +{ + return true; +} + +bool DummyModList::onModInstalled(const std::function&) +{ + return true; +} + +bool DummyModList::onModRemoved(const std::function&) { return true; } -bool DummyModList::onModStateChanged(const std::function &func) +bool DummyModList::onModStateChanged(const std::function&)>&) { return true; } -bool DummyModList::onModMoved(const std::function &func) +bool DummyModList::onModMoved(const std::function&) { return true; } diff --git a/src/modlist.h b/src/modlist.h index 3ab486c9..1a469ee7 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -403,11 +403,17 @@ class DummyModList : public MOBase::IModList public: QString displayName(const QString &internalName) const override; QStringList allMods() const override; + QStringList allModsByProfilePriority(MOBase::IProfile *profile = nullptr) const override; + MOBase::IModInterface* getMod(const QString& name) const override; + bool removeMod(MOBase::IModInterface *mod) override; ModStates state(const QString &name) const override; bool setActive(const QString &name, bool active) override; + int setActive(const QStringList& names, bool active) override; int priority(const QString &name) const override; bool setPriority(const QString &name, int newPriority) override; - bool onModStateChanged(const std::function &func) override; + bool onModInstalled(const std::function& func) override; + bool onModRemoved(const std::function& func) override; + bool onModStateChanged(const std::function&)> &func) override; bool onModMoved(const std::function &func) override; }; diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp index 8cc95a8b..b2a4f791 100644 --- a/src/organizerproxy.cpp +++ b/src/organizerproxy.cpp @@ -290,9 +290,8 @@ bool OrganizerProxy::onPluginSettingChanged(std::function &nam return nullptr; } -bool DummyOrganizerProxy::removeMod(IModInterface *mod) -{ - return true; -} - void DummyOrganizerProxy::modDataChanged(IModInterface *mod) { } @@ -411,12 +400,22 @@ bool DummyOrganizerProxy::onFinishedRun(const std::function &func) +bool DummyOrganizerProxy::onUserInterfaceInitialized(std::function const& func) { return true; } -bool DummyOrganizerProxy::onUserInterfaceInitialized(std::function const& func) +bool DummyOrganizerProxy::onProfileCreated(std::function const& func) +{ + return true; +} + +bool DummyOrganizerProxy::onProfileRenamed(std::function const& func) +{ + return true; +} + +bool DummyOrganizerProxy::onProfileRemoved(std::function const& func) { return true; } @@ -431,7 +430,7 @@ bool DummyOrganizerProxy::onPluginSettingChanged(std::function &name); - virtual bool removeMod(MOBase::IModInterface *mod); - virtual void modDataChanged(MOBase::IModInterface *mod); - virtual QVariant pluginSetting(const QString &pluginName, const QString &key) const; - virtual void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value); - virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const; - virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true); - virtual QString pluginDataPath() const; - virtual MOBase::IModInterface *installMod(const QString &fileName, const QString &nameSuggestion = QString()); - virtual QString resolvePath(const QString &fileName) const; - virtual QStringList listDirectories(const QString &directoryName) const; - virtual QStringList findFiles(const QString &path, const std::function &filter) const override; - virtual QStringList findFiles(const QString &path, const QStringList &globFilters) const override; - virtual QStringList getFileOrigins(const QString &fileName) const; - virtual QList findFileInfos(const QString &path, const std::function &filter) const; - - virtual MOBase::IDownloadManager *downloadManager() const; - virtual MOBase::IPluginList *pluginList() const; - virtual MOBase::IModList *modList() const; - virtual MOBase::IProfile *profile() const override; - virtual HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", - const QString &profile = "", const QString &forcedCustomOverwrite = "", bool ignoreCustomOverwrite = false); - virtual bool waitForApplication(HANDLE handle, LPDWORD exitCode = nullptr) const; - virtual void refreshModList(bool saveChanges); - - virtual bool onAboutToRun(const std::function &func); - virtual bool onFinishedRun(const std::function &func); - virtual bool onModInstalled(const std::function &func); - virtual bool onUserInterfaceInitialized(std::function const& func); - virtual bool onProfileChanged(std::function const& func); - virtual bool onPluginSettingChanged(std::function const& func); - - virtual MOBase::IPluginGame const *managedGame() const; - - virtual QStringList modsSortedByProfilePriority() const; + MOBase::IModRepositoryBridge *createNexusBridge() const override; + QString profileName() const override; + QString profilePath() const override; + QString downloadsPath() const override; + QString overwritePath() const override; + QString basePath() const override; + QString modsPath() const override; + MOBase::VersionInfo appVersion() const override; + MOBase::IPluginGame *getGame(const QString &gameName) const override; + MOBase::IModInterface *createMod(MOBase::GuessedValue &name) override; + void modDataChanged(MOBase::IModInterface *mod) override; + QVariant pluginSetting(const QString &pluginName, const QString &key) const override; + void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) override; + QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const override; + void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true) override; + QString pluginDataPath() const override; + MOBase::IModInterface *installMod(const QString &fileName, const QString &nameSuggestion = QString()) override; + QString resolvePath(const QString &fileName) const override; + QStringList listDirectories(const QString &directoryName) const override; + QStringList findFiles(const QString &path, const std::function &filter) const override; + QStringList findFiles(const QString &path, const QStringList &globFilters) const override; + QStringList getFileOrigins(const QString &fileName) const override; + QList findFileInfos(const QString &path, const std::function &filter) const override; + + MOBase::IDownloadManager *downloadManager() const override; + MOBase::IPluginList *pluginList() const override; + MOBase::IModList *modList() const override; + MOBase::IProfile *profile() const override; + HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", + const QString &profile = "", const QString &forcedCustomOverwrite = "", bool ignoreCustomOverwrite = false) override; + bool waitForApplication(HANDLE handle, LPDWORD exitCode = nullptr) const override; + void refresh(bool saveChanges = true) override; + + bool onAboutToRun(const std::function &func) override; + bool onFinishedRun(const std::function &func) override; + bool onUserInterfaceInitialized(std::function const& func) override; + bool onProfileCreated(std::function const& func) override; + bool onProfileRenamed(std::function const& func) override; + bool onProfileRemoved(std::function const& func) override; + bool onProfileChanged(std::function const& func) override; + bool onPluginSettingChanged(std::function const& func) override; + + MOBase::IPluginGame const *managedGame() const override; private: - const QString &m_PluginName; std::unique_ptr m_plugins; std::unique_ptr m_mods; }; diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index 7134d246..bda360ba 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -801,7 +801,7 @@ bool PluginList::setPriority(const QString& name, int newPriority) { int rowIndex = findPluginByPriority(oldPriority); - // We need to increment newPriority if its above the old one, otherwise the + // We need to increment newPriority if its above the old one, otherwise the // plugin is place right below the new priority. if (oldPriority < newPriority) { newPriority += 1; @@ -1702,6 +1702,11 @@ void DummyPluginList::setLoadOrder(const QStringList &pluginList) { } +bool DummyPluginList::setPriority(const QString&, int) +{ + return true; +} + bool DummyPluginList::isMaster(const QString &name) const { return false; @@ -1727,7 +1732,7 @@ bool DummyPluginList::onPluginMoved(const std::function &func) +bool DummyPluginList::onPluginStateChanged(const std::function&)> &func) { return true; } diff --git a/src/pluginlist.h b/src/pluginlist.h index bfadaf4f..27c15056 100644 --- a/src/pluginlist.h +++ b/src/pluginlist.h @@ -420,12 +420,13 @@ public: int priority(const QString &name) const override; int loadOrder(const QString &name) const override; void setLoadOrder(const QStringList &pluginList) override; + bool setPriority(const QString& name, int newPriority) override; bool isMaster(const QString &name) const override; QStringList masters(const QString &name) const override; QString origin(const QString &name) const override; bool onRefreshed(const std::function &callback) override; bool onPluginMoved(const std::function &func) override; - bool onPluginStateChanged(const std::function &func) override; + bool onPluginStateChanged(const std::function&)> &func) override; }; #pragma warning(pop) diff --git a/src/thread_utils.h b/src/thread_utils.h index 607d73a9..f64dd601 100644 --- a/src/thread_utils.h +++ b/src/thread_utils.h @@ -7,8 +7,7 @@ #include // in main.cpp -void setUnhandledExceptionHandler(); -LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *exceptionPtrs); +void setExceptionHandlers(); namespace MOShared { @@ -20,7 +19,7 @@ template std::thread startSafeThread(F&& f) { return std::thread([f=std::forward(f)] { - setUnhandledExceptionHandler(); + setExceptionHandlers(); f(); }); } -- cgit v1.3.1 From e6a87a17987de5d8e462634777df31e2cae5c1a6 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Wed, 4 Nov 2020 20:57:50 -0500 Subject: added IPlugin::registered() removed useless dummy interfaces because init() isn't called anymore python plugins currently broken because init() isn't called on them fixed create instance dialog being shown on startup even if portable instance existed display a message when the last instance can't be found fixed instance manager dialog failing to open the portable instance --- src/instancemanager.cpp | 8 +- src/instancemanagerdialog.cpp | 6 +- src/main.cpp | 37 ++++++-- src/modlist.cpp | 71 --------------- src/modlist.h | 20 ---- src/organizerproxy.cpp | 206 ------------------------------------------ src/organizerproxy.h | 56 ------------ src/plugincontainer.cpp | 35 ++++--- src/plugincontainer.h | 2 +- src/pluginlist.cpp | 65 ------------- src/pluginlist.h | 19 ---- 11 files changed, 54 insertions(+), 471 deletions(-) (limited to 'src/modlist.cpp') diff --git a/src/instancemanager.cpp b/src/instancemanager.cpp index c79c5254..61c442be 100644 --- a/src/instancemanager.cpp +++ b/src/instancemanager.cpp @@ -334,13 +334,7 @@ std::optional InstanceManager::currentInstance() const } } - QString path = instancePath(name); - if (!QFileInfo::exists(path)) { - // the previously used instance doesn't exist anymore - return {}; - } - - return Instance(QDir(path), false, profile); + return Instance(QDir(instancePath(name)), false, profile); } void InstanceManager::clearCurrentInstance() diff --git a/src/instancemanagerdialog.cpp b/src/instancemanagerdialog.cpp index 231835ba..282329a5 100644 --- a/src/instancemanagerdialog.cpp +++ b/src/instancemanagerdialog.cpp @@ -462,7 +462,11 @@ void InstanceManagerDialog::openSelectedInstance() return; } - InstanceManager::instance().setCurrentInstance(m_instances[i]->name()); + if (m_instances[i]->isPortable()) { + InstanceManager::instance().setCurrentInstance(""); + } else { + InstanceManager::instance().setCurrentInstance(m_instances[i]->name()); + } if (m_restartOnSelect) { ExitModOrganizer(Exit::Restart); diff --git a/src/main.cpp b/src/main.cpp index 8f7af77d..7b489aee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -272,22 +272,22 @@ std::optional handleCommandLine( return {}; } -void openInstanceManager(PluginContainer& pc, QWidget* parent); - std::optional selectInstance() { + auto& m = InstanceManager::instance(); + NexusInterface ni(nullptr); PluginContainer pc(nullptr); pc.loadPlugins(); - if (InstanceManager::instance().instancePaths().empty()) { + if (m.instancePaths().empty() && !m.portableInstanceExists()) { // no instances configured CreateInstanceDialog dlg(pc, nullptr); if (dlg.exec() != QDialog::Accepted) { return {}; } - return InstanceManager::instance().currentInstance(); + return m.currentInstance(); } @@ -302,7 +302,7 @@ std::optional selectInstance() return {}; } - return InstanceManager::instance().currentInstance(); + return m.currentInstance(); } enum class SetupInstanceResults @@ -650,13 +650,36 @@ int doOneRun( // resets things when MO is "restarted" resetForRestart(cl); - auto currentInstance = InstanceManager::instance().currentInstance(); + auto& m = InstanceManager::instance(); + auto currentInstance = m.currentInstance(); if (!currentInstance) { currentInstance = selectInstance(); - if (!currentInstance) + if (!currentInstance) { return 1; + } + } + else + { + if (!currentInstance->directory().exists()) { + // the previously used instance doesn't exist anymore + + if (m.instanceNames().empty() && !m.portableInstanceExists()) { + criticalOnTop(QObject::tr( + "Instance at '%1' not found. You must create a new instance") + .arg(currentInstance->directory().absolutePath())); + } else { + criticalOnTop(QObject::tr( + "Instance at '%1' not found. Select another instance.") + .arg(currentInstance->directory().absolutePath())); + } + + currentInstance = selectInstance(); + if (!currentInstance) { + return 1; + } + } } const QString dataPath = currentInstance->directory().path(); diff --git a/src/modlist.cpp b/src/modlist.cpp index c98464a9..04abfb01 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -1528,74 +1528,3 @@ void ModList::disableSelected(const QItemSelectionModel *selectionModel) m_Profile->setModsEnabled(QList(), modsToDisable); } } - - -QString DummyModList::displayName(const QString&) const -{ - return {}; -} - -QStringList DummyModList::allMods() const -{ - return {}; -} - -QStringList DummyModList::allModsByProfilePriority(MOBase::IProfile*) const -{ - return {}; -} - -IModInterface* DummyModList::getMod(const QString&) const -{ - return nullptr; -} - -bool DummyModList::removeMod(MOBase::IModInterface*) -{ - return true; -} - -IModList::ModStates DummyModList::state(const QString&) const -{ - return 0; -} - -bool DummyModList::setActive(const QString&, bool) -{ - return true; -} - -int DummyModList::setActive(const QStringList&, bool) -{ - return 0; -} - -int DummyModList::priority(const QString&) const -{ - return -1; -} - -bool DummyModList::setPriority(const QString&, int) -{ - return true; -} - -bool DummyModList::onModInstalled(const std::function&) -{ - return true; -} - -bool DummyModList::onModRemoved(const std::function&) -{ - return true; -} - -bool DummyModList::onModStateChanged(const std::function&)>&) -{ - return true; -} - -bool DummyModList::onModMoved(const std::function&) -{ - return true; -} diff --git a/src/modlist.h b/src/modlist.h index 1a469ee7..385ca04c 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -397,25 +397,5 @@ private: }; - -class DummyModList : public MOBase::IModList -{ -public: - QString displayName(const QString &internalName) const override; - QStringList allMods() const override; - QStringList allModsByProfilePriority(MOBase::IProfile *profile = nullptr) const override; - MOBase::IModInterface* getMod(const QString& name) const override; - bool removeMod(MOBase::IModInterface *mod) override; - ModStates state(const QString &name) const override; - bool setActive(const QString &name, bool active) override; - int setActive(const QStringList& names, bool active) override; - int priority(const QString &name) const override; - bool setPriority(const QString &name, int newPriority) override; - bool onModInstalled(const std::function& func) override; - bool onModRemoved(const std::function& func) override; - bool onModStateChanged(const std::function&)> &func) override; - bool onModMoved(const std::function &func) override; -}; - #endif // MODLIST_H diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp index b2a4f791..45efc00c 100644 --- a/src/organizerproxy.cpp +++ b/src/organizerproxy.cpp @@ -287,209 +287,3 @@ bool OrganizerProxy::onPluginSettingChanged(std::functiononPluginSettingChanged(func); } - - - -DummyOrganizerProxy::DummyOrganizerProxy(MOBase::IPlugin* plugin) - : m_mods(new DummyModList), m_plugins(new DummyPluginList) -{ -} - -DummyOrganizerProxy::~DummyOrganizerProxy() = default; - -IModRepositoryBridge *DummyOrganizerProxy::createNexusBridge() const -{ - return nullptr; -} - -QString DummyOrganizerProxy::profileName() const -{ - return {}; -} - -QString DummyOrganizerProxy::profilePath() const -{ - return {}; -} - -QString DummyOrganizerProxy::downloadsPath() const -{ - return {}; -} - -QString DummyOrganizerProxy::overwritePath() const -{ - return {}; -} - -QString DummyOrganizerProxy::basePath() const -{ - return {}; -} - -QString DummyOrganizerProxy::modsPath() const -{ - return {}; -} - -VersionInfo DummyOrganizerProxy::appVersion() const -{ - return {}; -} - -IPluginGame *DummyOrganizerProxy::getGame(const QString &gameName) const -{ - return nullptr; -} - -IModInterface *DummyOrganizerProxy::createMod(MOBase::GuessedValue &name) -{ - return nullptr; -} - -void DummyOrganizerProxy::modDataChanged(IModInterface *mod) -{ -} - -QVariant DummyOrganizerProxy::pluginSetting(const QString &pluginName, const QString &key) const -{ - if (key == "enabled") { - return true; - } - - return {}; -} - -void DummyOrganizerProxy::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) -{ -} - -QVariant DummyOrganizerProxy::persistent(const QString &pluginName, const QString &key, const QVariant &def) const -{ - return {}; -} - -void DummyOrganizerProxy::setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync) -{ -} - -QString DummyOrganizerProxy::pluginDataPath() const -{ - return qApp->applicationDirPath() + "/" + ToQString(AppConfig::pluginPath()) + "/data"; -} - -HANDLE DummyOrganizerProxy::startApplication( - const QString& exe, const QStringList& args, const QString &cwd, - const QString& profile, const QString &overwrite, bool ignoreOverwrite) -{ - return INVALID_HANDLE_VALUE; -} - -bool DummyOrganizerProxy::waitForApplication(HANDLE handle, LPDWORD exitCode) const -{ - return true; -} - -bool DummyOrganizerProxy::onAboutToRun(const std::function &func) -{ - return true; -} - -bool DummyOrganizerProxy::onFinishedRun(const std::function &func) -{ - return true; -} - -bool DummyOrganizerProxy::onUserInterfaceInitialized(std::function const& func) -{ - return true; -} - -bool DummyOrganizerProxy::onProfileCreated(std::function const& func) -{ - return true; -} - -bool DummyOrganizerProxy::onProfileRenamed(std::function const& func) -{ - return true; -} - -bool DummyOrganizerProxy::onProfileRemoved(std::function const& func) -{ - return true; -} - -bool DummyOrganizerProxy::onProfileChanged(std::function const& func) -{ - return true; -} - -bool DummyOrganizerProxy::onPluginSettingChanged(std::function const& func) -{ - return true; -} - -void DummyOrganizerProxy::refresh(bool saveChanges) -{ -} - -IModInterface *DummyOrganizerProxy::installMod(const QString &fileName, const QString &nameSuggestion) -{ - return nullptr; -} - -QString DummyOrganizerProxy::resolvePath(const QString &fileName) const -{ - return {}; -} - -QStringList DummyOrganizerProxy::listDirectories(const QString &directoryName) const -{ - return {}; -} - -QStringList DummyOrganizerProxy::findFiles(const QString &path, const std::function &filter) const -{ - return {}; -} - -QStringList DummyOrganizerProxy::findFiles(const QString& path, const QStringList& globFilters) const -{ - return {}; -} - -QStringList DummyOrganizerProxy::getFileOrigins(const QString &fileName) const -{ - return {}; -} - -QList DummyOrganizerProxy::findFileInfos(const QString &path, const std::function &filter) const -{ - return {}; -} - -MOBase::IDownloadManager *DummyOrganizerProxy::downloadManager() const -{ - return nullptr; -} - -MOBase::IPluginList *DummyOrganizerProxy::pluginList() const -{ - return m_plugins.get(); -} - -MOBase::IModList *DummyOrganizerProxy::modList() const -{ - return m_mods.get(); -} - -MOBase::IProfile *DummyOrganizerProxy::profile() const -{ - return nullptr; -} - -MOBase::IPluginGame const *DummyOrganizerProxy::managedGame() const -{ - return nullptr; -} diff --git a/src/organizerproxy.h b/src/organizerproxy.h index 144a7732..6690d612 100644 --- a/src/organizerproxy.h +++ b/src/organizerproxy.h @@ -81,60 +81,4 @@ private: }; - -class DummyOrganizerProxy : public MOBase::IOrganizer -{ -public: - DummyOrganizerProxy(MOBase::IPlugin* plugin); - ~DummyOrganizerProxy(); - - MOBase::IModRepositoryBridge *createNexusBridge() const override; - QString profileName() const override; - QString profilePath() const override; - QString downloadsPath() const override; - QString overwritePath() const override; - QString basePath() const override; - QString modsPath() const override; - MOBase::VersionInfo appVersion() const override; - MOBase::IPluginGame *getGame(const QString &gameName) const override; - MOBase::IModInterface *createMod(MOBase::GuessedValue &name) override; - void modDataChanged(MOBase::IModInterface *mod) override; - QVariant pluginSetting(const QString &pluginName, const QString &key) const override; - void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) override; - QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const override; - void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true) override; - QString pluginDataPath() const override; - MOBase::IModInterface *installMod(const QString &fileName, const QString &nameSuggestion = QString()) override; - QString resolvePath(const QString &fileName) const override; - QStringList listDirectories(const QString &directoryName) const override; - QStringList findFiles(const QString &path, const std::function &filter) const override; - QStringList findFiles(const QString &path, const QStringList &globFilters) const override; - QStringList getFileOrigins(const QString &fileName) const override; - QList findFileInfos(const QString &path, const std::function &filter) const override; - - MOBase::IDownloadManager *downloadManager() const override; - MOBase::IPluginList *pluginList() const override; - MOBase::IModList *modList() const override; - MOBase::IProfile *profile() const override; - HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", - const QString &profile = "", const QString &forcedCustomOverwrite = "", bool ignoreCustomOverwrite = false) override; - bool waitForApplication(HANDLE handle, LPDWORD exitCode = nullptr) const override; - void refresh(bool saveChanges = true) override; - - bool onAboutToRun(const std::function &func) override; - bool onFinishedRun(const std::function &func) override; - bool onUserInterfaceInitialized(std::function const& func) override; - bool onProfileCreated(std::function const& func) override; - bool onProfileRenamed(std::function const& func) override; - bool onProfileRemoved(std::function const& func) override; - bool onProfileChanged(std::function const& func) override; - bool onPluginSettingChanged(std::function const& func) override; - - MOBase::IPluginGame const *managedGame() const override; - -private: - std::unique_ptr m_plugins; - std::unique_ptr m_mods; -}; - #endif // ORGANIZERPROXY_H diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 6f2670dd..0c71e491 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -169,23 +169,19 @@ QObject* PluginContainer::as_qobject(MOBase::IPlugin* plugin) const return *it; } -bool PluginContainer::verifyPlugin(IPlugin *plugin) +bool PluginContainer::initPlugin(IPlugin *plugin) { if (plugin == nullptr) { return false; } - IOrganizer* proxy = nullptr; - if (m_Organizer) { - proxy = new OrganizerProxy(m_Organizer, this, plugin); - } else { - proxy = new DummyOrganizerProxy(plugin); - } + auto* proxy = new OrganizerProxy(m_Organizer, this, plugin); - if (!plugin->init(proxy)) { - log::warn("plugin failed to initialize"); - return false; + if (!plugin->init(proxy)) { + log::warn("plugin failed to initialize"); + return false; + } } return true; @@ -197,7 +193,6 @@ void PluginContainer::registerGame(IPluginGame *game) m_SupportedGames.insert({ game->gameName(), game }); } - bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) { // Storing the original QObject* is a bit of a hack as I couldn't figure out any @@ -210,10 +205,14 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) log::debug("not an IPlugin"); return false; } + plugin->setProperty("filename", fileName); + if (m_Organizer) { m_Organizer->settings().plugins().registerPlugin(pluginObj); } + + pluginObj->registered(); } { // diagnosis plugin @@ -233,14 +232,14 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) } { // mod page plugin IPluginModPage *modPage = qobject_cast(plugin); - if (verifyPlugin(modPage)) { + if (initPlugin(modPage)) { bf::at_key(m_Plugins).push_back(modPage); return true; } } { // game plugin IPluginGame *game = qobject_cast(plugin); - if (verifyPlugin(game)) { + if (initPlugin(game)) { bf::at_key(m_Plugins).push_back(game); registerGame(game); return true; @@ -248,14 +247,14 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) } { // tool plugins IPluginTool *tool = qobject_cast(plugin); - if (verifyPlugin(tool)) { + if (initPlugin(tool)) { bf::at_key(m_Plugins).push_back(tool); return true; } } { // installer plugins IPluginInstaller *installer = qobject_cast(plugin); - if (verifyPlugin(installer)) { + if (initPlugin(installer)) { bf::at_key(m_Plugins).push_back(installer); if (m_Organizer) { m_Organizer->installationManager()->registerInstaller(installer); @@ -265,7 +264,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) } { // preview plugins IPluginPreview *preview = qobject_cast(plugin); - if (verifyPlugin(preview)) { + if (initPlugin(preview)) { bf::at_key(m_Plugins).push_back(preview); m_PreviewGenerator.registerPlugin(preview); return true; @@ -273,7 +272,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) } { // proxy plugins IPluginProxy *proxy = qobject_cast(plugin); - if (verifyPlugin(proxy)) { + if (initPlugin(proxy)) { bf::at_key(m_Plugins).push_back(proxy); QStringList pluginNames = proxy->pluginList( QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::pluginPath())); @@ -305,7 +304,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) { // dummy plugins // only initialize these, no processing otherwise IPlugin *dummy = qobject_cast(plugin); - if (verifyPlugin(dummy)) { + if (initPlugin(dummy)) { bf::at_key(m_Plugins).push_back(dummy); return true; } diff --git a/src/plugincontainer.h b/src/plugincontainer.h index 07363ee7..bfbf1fa8 100644 --- a/src/plugincontainer.h +++ b/src/plugincontainer.h @@ -168,7 +168,7 @@ private: QObject* as_qobject(MOBase::IPlugin* plugin) const; - bool verifyPlugin(MOBase::IPlugin *plugin); + bool initPlugin(MOBase::IPlugin *plugin); void registerGame(MOBase::IPluginGame *game); bool registerPlugin(QObject *pluginObj, const QString &fileName); bool unregisterPlugin(QObject *pluginObj, const QString &fileName); diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index bda360ba..8d04b592 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -1671,68 +1671,3 @@ void PluginList::managedGameChanged(const IPluginGame *gamePlugin) { m_GamePlugin = gamePlugin; } - - - -QStringList DummyPluginList::pluginNames() const -{ - return {}; -} - -IPluginList::PluginStates DummyPluginList::state(const QString &name) const -{ - return 0; -} - -void DummyPluginList::setState(const QString &name, PluginStates state) -{ -} - -int DummyPluginList::priority(const QString &name) const -{ - return -1; -} - -int DummyPluginList::loadOrder(const QString &name) const -{ - return -1; -} - -void DummyPluginList::setLoadOrder(const QStringList &pluginList) -{ -} - -bool DummyPluginList::setPriority(const QString&, int) -{ - return true; -} - -bool DummyPluginList::isMaster(const QString &name) const -{ - return false; -} - -QStringList DummyPluginList::masters(const QString &name) const -{ - return {}; -} - -QString DummyPluginList::origin(const QString &name) const -{ - return {}; -} - -bool DummyPluginList::onRefreshed(const std::function &callback) -{ - return true; -} - -bool DummyPluginList::onPluginMoved(const std::function &func) -{ - return true; -} - -bool DummyPluginList::onPluginStateChanged(const std::function&)> &func) -{ - return true; -} diff --git a/src/pluginlist.h b/src/pluginlist.h index 27c15056..0b49b86f 100644 --- a/src/pluginlist.h +++ b/src/pluginlist.h @@ -410,25 +410,6 @@ private: bool hasInfo(const ESPInfo& esp, const AdditionalInfo* info) const; }; - -class DummyPluginList : public MOBase::IPluginList -{ -public: - QStringList pluginNames() const override; - PluginStates state(const QString &name) const override; - void setState(const QString &name, PluginStates state) override; - int priority(const QString &name) const override; - int loadOrder(const QString &name) const override; - void setLoadOrder(const QStringList &pluginList) override; - bool setPriority(const QString& name, int newPriority) override; - bool isMaster(const QString &name) const override; - QStringList masters(const QString &name) const override; - QString origin(const QString &name) const override; - bool onRefreshed(const std::function &callback) override; - bool onPluginMoved(const std::function &func) override; - bool onPluginStateChanged(const std::function&)> &func) override; -}; - #pragma warning(pop) #endif // PLUGINLIST_H -- cgit v1.3.1