summaryrefslogtreecommitdiff
path: root/src/organizercore.cpp
diff options
context:
space:
mode:
authorMikaƫl Capelle <capelle.mikael@gmail.com>2020-12-07 08:40:23 +0100
committerGitHub <noreply@github.com>2020-12-07 08:40:23 +0100
commit904264e231a9aef485025cb45f1eb006b017aa1a (patch)
treec3ff682de4ac4761b8d36f0e96a96dce6a034706 /src/organizercore.cpp
parent0a6a5eb7868dde908e07ea12c7eb674b2063b950 (diff)
parent3264d7899e2560bce4591ab2142ee9d51bc7890c (diff)
Merge pull request #1313 from Holt59/load-plugin-without-restart
Implement loading/unloading of plugins without restarting
Diffstat (limited to 'src/organizercore.cpp')
-rw-r--r--src/organizercore.cpp71
1 files changed, 28 insertions, 43 deletions
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index f14d3234..631e49be 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -72,6 +72,7 @@
#include <tuple>
#include <utility>
+#include "organizerproxy.h"
using namespace MOShared;
using namespace MOBase;
@@ -96,7 +97,7 @@ OrganizerCore::OrganizerCore(Settings &settings)
, m_Settings(settings)
, m_Updater(&NexusInterface::instance())
, m_ModList(m_PluginContainer, this)
- , m_PluginList(this)
+ , m_PluginList(*this)
, m_DirectoryRefresher(new DirectoryRefresher(settings.refreshThreadCount()))
, m_DirectoryStructure(new DirectoryEntry(L"data", nullptr, 0))
, m_DownloadManager(&NexusInterface::instance(), this)
@@ -290,7 +291,7 @@ void OrganizerCore::connectPlugins(PluginContainer *container)
m_ModList.setPluginContainer(m_PluginContainer);
if (!m_GameName.isEmpty()) {
- m_GamePlugin = m_PluginContainer->managedGame(m_GameName);
+ m_GamePlugin = m_PluginContainer->game(m_GameName);
emit managedGameChanged(m_GamePlugin);
}
@@ -300,25 +301,6 @@ void OrganizerCore::connectPlugins(PluginContainer *container)
[&](IPlugin* plugin) { m_PluginDisabled(plugin); });
}
-void OrganizerCore::disconnectPlugins()
-{
- m_AboutToRun.disconnect_all_slots();
- m_FinishedRun.disconnect_all_slots();
- m_UserInterfaceInitialized.disconnect_all_slots();
- m_ProfileChanged.disconnect_all_slots();
- m_PluginSettingChanged.disconnect_all_slots();
-
- m_ModList.disconnectSlots();
- m_PluginList.disconnectSlots();
- m_Updater.setPluginContainer(nullptr);
- m_DownloadManager.setPluginContainer(nullptr);
- m_ModList.setPluginContainer(nullptr);
-
- m_Settings.plugins().clearPlugins();
- m_GamePlugin = nullptr;
- m_PluginContainer = nullptr;
-}
-
void OrganizerCore::setManagedGame(MOBase::IPluginGame *game)
{
m_GameName = game->gameName();
@@ -1184,58 +1166,56 @@ bool OrganizerCore::previewFile(
return true;
}
-bool OrganizerCore::onAboutToRun(
+boost::signals2::connection OrganizerCore::onAboutToRun(
const std::function<bool(const QString &)> &func)
{
- auto conn = m_AboutToRun.connect(func);
- return conn.connected();
+ return m_AboutToRun.connect(func);
}
-bool OrganizerCore::onFinishedRun(
+boost::signals2::connection OrganizerCore::onFinishedRun(
const std::function<void(const QString &, unsigned int)> &func)
{
- auto conn = m_FinishedRun.connect(func);
- return conn.connected();
+ return m_FinishedRun.connect(func);
}
-bool OrganizerCore::onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func)
+boost::signals2::connection OrganizerCore::onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func)
{
- return m_UserInterfaceInitialized.connect(func).connected();
+ return m_UserInterfaceInitialized.connect(func);
}
-bool OrganizerCore::onProfileCreated(std::function<void(MOBase::IProfile*)> const& func)
+boost::signals2::connection OrganizerCore::onProfileCreated(std::function<void(MOBase::IProfile*)> const& func)
{
- return m_ProfileCreated.connect(func).connected();
+ return m_ProfileCreated.connect(func);
}
-bool OrganizerCore::onProfileRenamed(std::function<void(MOBase::IProfile*, QString const&, QString const&)> const& func)
+boost::signals2::connection OrganizerCore::onProfileRenamed(std::function<void(MOBase::IProfile*, QString const&, QString const&)> const& func)
{
- return m_ProfileRenamed.connect(func).connected();
+ return m_ProfileRenamed.connect(func);
}
-bool OrganizerCore::onProfileRemoved(std::function<void(QString const&)> const& func)
+boost::signals2::connection OrganizerCore::onProfileRemoved(std::function<void(QString const&)> const& func)
{
- return m_ProfileRemoved.connect(func).connected();
+ return m_ProfileRemoved.connect(func);
}
-bool OrganizerCore::onProfileChanged(std::function<void(IProfile*, IProfile*)> const& func)
+boost::signals2::connection OrganizerCore::onProfileChanged(std::function<void(IProfile*, IProfile*)> const& func)
{
- return m_ProfileChanged.connect(func).connected();
+ return m_ProfileChanged.connect(func);
}
-bool OrganizerCore::onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func)
+boost::signals2::connection OrganizerCore::onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func)
{
- return m_PluginSettingChanged.connect(func).connected();
+ return m_PluginSettingChanged.connect(func);
}
-bool OrganizerCore::onPluginEnabled(std::function<void(const IPlugin*)> const& func)
+boost::signals2::connection OrganizerCore::onPluginEnabled(std::function<void(const IPlugin*)> const& func)
{
- return m_PluginEnabled.connect(func).connected();
+ return m_PluginEnabled.connect(func);
}
-bool OrganizerCore::onPluginDisabled(std::function<void(const IPlugin*)> const& func)
+boost::signals2::connection OrganizerCore::onPluginDisabled(std::function<void(const IPlugin*)> const& func)
{
- return m_PluginDisabled.connect(func).connected();
+ return m_PluginDisabled.connect(func);
}
void OrganizerCore::refresh(bool saveChanges)
@@ -1531,6 +1511,11 @@ IPluginGame const *OrganizerCore::managedGame() const
return m_GamePlugin;
}
+IOrganizer const* OrganizerCore::managedGameOrganizer() const
+{
+ return m_PluginContainer->requirements(m_GamePlugin).m_Organizer;
+}
+
std::vector<QString> OrganizerCore::enabledArchives()
{
std::vector<QString> result;