summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/instancemanager.cpp8
-rw-r--r--src/instancemanagerdialog.cpp6
-rw-r--r--src/main.cpp37
-rw-r--r--src/modlist.cpp71
-rw-r--r--src/modlist.h20
-rw-r--r--src/organizerproxy.cpp206
-rw-r--r--src/organizerproxy.h56
-rw-r--r--src/plugincontainer.cpp35
-rw-r--r--src/plugincontainer.h2
-rw-r--r--src/pluginlist.cpp65
-rw-r--r--src/pluginlist.h19
11 files changed, 54 insertions, 471 deletions
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<Instance> 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<int> handleCommandLine(
return {};
}
-void openInstanceManager(PluginContainer& pc, QWidget* parent);
-
std::optional<Instance> 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<Instance> 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<unsigned int>(), 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<void(IModInterface *)>&)
-{
- return true;
-}
-
-bool DummyModList::onModRemoved(const std::function<void(QString const&)>&)
-{
- return true;
-}
-
-bool DummyModList::onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)>&)
-{
- return true;
-}
-
-bool DummyModList::onModMoved(const std::function<void (const QString &, int, int)>&)
-{
- 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<void(MOBase::IModInterface *)>& func) override;
- bool onModRemoved(const std::function<void(QString const&)>& func) override;
- bool onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)> &func) override;
- bool onModMoved(const std::function<void (const QString &, int, int)> &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::function<void(QString const&, c
// Always call this one, otherwise plugin cannot detect they are being enabled / disabled:
return m_Proxied->onPluginSettingChanged(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<QString> &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<bool (const QString &)> &func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onFinishedRun(const std::function<void (const QString &, unsigned int)> &func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileCreated(std::function<void(MOBase::IProfile*)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileRenamed(std::function<void(MOBase::IProfile*, QString const&, QString const&)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileRemoved(std::function<void(QString const&)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileChanged(std::function<void(MOBase::IProfile*, MOBase::IProfile*)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> 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<bool(const QString&)> &filter) const
-{
- return {};
-}
-
-QStringList DummyOrganizerProxy::findFiles(const QString& path, const QStringList& globFilters) const
-{
- return {};
-}
-
-QStringList DummyOrganizerProxy::getFileOrigins(const QString &fileName) const
-{
- return {};
-}
-
-QList<MOBase::IOrganizer::FileInfo> DummyOrganizerProxy::findFileInfos(const QString &path, const std::function<bool (const MOBase::IOrganizer::FileInfo &)> &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<QString> &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<bool(const QString &)> &filter) const override;
- QStringList findFiles(const QString &path, const QStringList &globFilters) const override;
- QStringList getFileOrigins(const QString &fileName) const override;
- QList<FileInfo> findFileInfos(const QString &path, const std::function<bool(const FileInfo&)> &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<bool(const QString&)> &func) override;
- bool onFinishedRun(const std::function<void (const QString&, unsigned int)> &func) override;
- bool onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func) override;
- bool onProfileCreated(std::function<void(MOBase::IProfile*)> const& func) override;
- bool onProfileRenamed(std::function<void(MOBase::IProfile*, QString const&, QString const&)> const& func) override;
- bool onProfileRemoved(std::function<void(QString const&)> const& func) override;
- bool onProfileChanged(std::function<void(MOBase::IProfile*, MOBase::IProfile*)> const& func) override;
- bool onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func) override;
-
- MOBase::IPluginGame const *managedGame() const override;
-
-private:
- std::unique_ptr<MOBase::IPluginList> m_plugins;
- std::unique_ptr<MOBase::IModList> 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<IPluginModPage*>(plugin);
- if (verifyPlugin(modPage)) {
+ if (initPlugin(modPage)) {
bf::at_key<IPluginModPage>(m_Plugins).push_back(modPage);
return true;
}
}
{ // game plugin
IPluginGame *game = qobject_cast<IPluginGame*>(plugin);
- if (verifyPlugin(game)) {
+ if (initPlugin(game)) {
bf::at_key<IPluginGame>(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<IPluginTool*>(plugin);
- if (verifyPlugin(tool)) {
+ if (initPlugin(tool)) {
bf::at_key<IPluginTool>(m_Plugins).push_back(tool);
return true;
}
}
{ // installer plugins
IPluginInstaller *installer = qobject_cast<IPluginInstaller*>(plugin);
- if (verifyPlugin(installer)) {
+ if (initPlugin(installer)) {
bf::at_key<IPluginInstaller>(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<IPluginPreview*>(plugin);
- if (verifyPlugin(preview)) {
+ if (initPlugin(preview)) {
bf::at_key<IPluginPreview>(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<IPluginProxy*>(plugin);
- if (verifyPlugin(proxy)) {
+ if (initPlugin(proxy)) {
bf::at_key<IPluginProxy>(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<IPlugin*>(plugin);
- if (verifyPlugin(dummy)) {
+ if (initPlugin(dummy)) {
bf::at_key<IPlugin>(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<void()> &callback)
-{
- return true;
-}
-
-bool DummyPluginList::onPluginMoved(const std::function<void (const QString &, int, int)> &func)
-{
- return true;
-}
-
-bool DummyPluginList::onPluginStateChanged(const std::function<void (const std::map<QString, PluginStates>&)> &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<void()> &callback) override;
- bool onPluginMoved(const std::function<void (const QString &, int, int)> &func) override;
- bool onPluginStateChanged(const std::function<void (const std::map<QString, PluginStates>&)> &func) override;
-};
-
#pragma warning(pop)
#endif // PLUGINLIST_H