diff options
| author | Mikaƫl Capelle <capelle.mikael@gmail.com> | 2020-12-07 08:40:23 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-07 08:40:23 +0100 |
| commit | 904264e231a9aef485025cb45f1eb006b017aa1a (patch) | |
| tree | c3ff682de4ac4761b8d36f0e96a96dce6a034706 /src/organizercore.cpp | |
| parent | 0a6a5eb7868dde908e07ea12c7eb674b2063b950 (diff) | |
| parent | 3264d7899e2560bce4591ab2142ee9d51bc7890c (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.cpp | 71 |
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; |
