From 74ec078976fbd64433142e6974f30cc113047c00 Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Tue, 10 Nov 2020 21:38:58 +0100 Subject: Replace usage of IPlugin::isActive(). --- src/organizercore.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/organizercore.cpp') diff --git a/src/organizercore.cpp b/src/organizercore.cpp index f57903e2..86afe59a 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -287,6 +287,7 @@ void OrganizerCore::connectPlugins(PluginContainer *container) m_InstallationManager.getSupportedExtensions()); m_PluginContainer = container; m_Updater.setPluginContainer(m_PluginContainer); + m_InstallationManager.setPluginContainer(m_PluginContainer); m_DownloadManager.setPluginContainer(m_PluginContainer); m_ModList.setPluginContainer(m_PluginContainer); @@ -2040,7 +2041,7 @@ std::vector OrganizerCore::fileMapping(const QString &profileName, for (MOBase::IPluginFileMapper *mapper : m_PluginContainer->plugins()) { IPlugin *plugin = dynamic_cast(mapper); - if (plugin->isActive()) { + if (m_PluginContainer->isEnabled(plugin)) { MappingType pluginMap = mapper->mappings(); result.reserve(result.size() + pluginMap.size()); result.insert(result.end(), pluginMap.begin(), pluginMap.end()); -- cgit v1.3.1 From a4acfc1f992eb5135c9ae6542ae5ffa8b09a2c2d Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Thu, 12 Nov 2020 21:49:57 +0100 Subject: Add callbacks for plugin enabled/disabled. --- src/organizercore.cpp | 15 +++++++++++++++ src/organizercore.h | 5 +++++ src/organizerproxy.cpp | 30 +++++++++++++++++++++++++++++- src/organizerproxy.h | 4 ++++ src/plugincontainer.cpp | 7 +++++++ src/plugincontainer.h | 6 ++++++ 6 files changed, 66 insertions(+), 1 deletion(-) (limited to 'src/organizercore.cpp') diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 86afe59a..e004ba78 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -295,6 +295,11 @@ void OrganizerCore::connectPlugins(PluginContainer *container) m_GamePlugin = m_PluginContainer->managedGame(m_GameName); emit managedGameChanged(m_GamePlugin); } + + connect(m_PluginContainer, &PluginContainer::pluginEnabled, + [&](IPlugin* plugin) { m_PluginEnabled(plugin); }); + connect(m_PluginContainer, &PluginContainer::pluginDisabled, + [&](IPlugin* plugin) { m_PluginDisabled(plugin); }); } void OrganizerCore::disconnectPlugins() @@ -1225,6 +1230,16 @@ bool OrganizerCore::onPluginSettingChanged(std::function const& func) +{ + return m_PluginEnabled.connect(func).connected(); +} + +bool OrganizerCore::onPluginDisabled(std::function const& func) +{ + return m_PluginDisabled.connect(func).connected(); +} + void OrganizerCore::refresh(bool saveChanges) { // don't lose changes! diff --git a/src/organizercore.h b/src/organizercore.h index b566e626..23b624e8 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -87,6 +87,7 @@ private: using SignalProfileRemoved = boost::signals2::signal; using SignalProfileChanged = boost::signals2::signal; using SignalPluginSettingChanged = boost::signals2::signal; + using SignalPluginEnabled = boost::signals2::signal; public: @@ -335,6 +336,8 @@ public: bool onProfileRemoved(std::function const& func); bool onProfileChanged(std::function const& func); bool onPluginSettingChanged(std::function const& func); + bool onPluginEnabled(std::function const& func); + bool onPluginDisabled(std::function const& func); bool getArchiveParsing() const { @@ -457,6 +460,8 @@ private: SignalProfileRemoved m_ProfileRemoved; SignalProfileChanged m_ProfileChanged; SignalPluginSettingChanged m_PluginSettingChanged; + SignalPluginEnabled m_PluginEnabled; + SignalPluginEnabled m_PluginDisabled; ModList m_ModList; PluginList m_PluginList; diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp index 77b7c2d6..c2283acc 100644 --- a/src/organizerproxy.cpp +++ b/src/organizerproxy.cpp @@ -293,8 +293,36 @@ bool OrganizerProxy::onProfileChanged(std::functiononProfileChanged(MOShared::callIfPluginActive(this, func)); } +// Always call these one, otherwise plugin cannot detect they are being enabled / disabled: bool OrganizerProxy::onPluginSettingChanged(std::function const& func) { - // Always call this one, otherwise plugin cannot detect they are being enabled / disabled: return m_Proxied->onPluginSettingChanged(func); } + +bool OrganizerProxy::onPluginEnabled(std::function const& func) +{ + return m_Proxied->onPluginEnabled(func); +} + +bool OrganizerProxy::onPluginEnabled(const QString& pluginName, std::function const& func) +{ + return m_Proxied->onPluginEnabled([=](const IPlugin* plugin) { + if (plugin->name().compare(pluginName, Qt::CaseInsensitive) == 0) { + func(); + } + }); +} + +bool OrganizerProxy::onPluginDisabled(std::function const& func) +{ + return m_Proxied->onPluginDisabled(func); +} + +bool OrganizerProxy::onPluginDisabled(const QString& pluginName, std::function const& func) +{ + return m_Proxied->onPluginDisabled([=](const IPlugin* plugin) { + if (plugin->name().compare(pluginName, Qt::CaseInsensitive) == 0) { + func(); + } + }); +} diff --git a/src/organizerproxy.h b/src/organizerproxy.h index 4329bdda..8664c64f 100644 --- a/src/organizerproxy.h +++ b/src/organizerproxy.h @@ -69,6 +69,10 @@ public: virtual QVariant pluginSetting(const QString& pluginName, const QString& key) const override; virtual void setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override; virtual bool onPluginSettingChanged(std::function const& func) override; + virtual bool onPluginEnabled(std::function const& func) override; + virtual bool onPluginEnabled(const QString& pluginName, std::function const& func) override; + virtual bool onPluginDisabled(std::function const& func) override; + virtual bool onPluginDisabled(const QString& pluginName, std::function const& func) override; virtual MOBase::IPluginGame const *managedGame() const; diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index d2f42fb4..1c2a1a1a 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -624,6 +624,13 @@ void PluginContainer::setEnabled(MOBase::IPlugin* plugin, bool enable, bool depe } m_Organizer->setPersistent(plugin->name(), "enabled", enable, true); + + if (enable) { + emit pluginEnabled(plugin); + } + else { + emit pluginDisabled(plugin); + } } MOBase::IPlugin* PluginContainer::plugin(QString const& pluginName) const diff --git a/src/plugincontainer.h b/src/plugincontainer.h index ac40e413..54da37d0 100644 --- a/src/plugincontainer.h +++ b/src/plugincontainer.h @@ -325,6 +325,12 @@ public: // IPluginDiagnose interface signals: + /** + * @brief Emitted plugins are enabled or disabled. + */ + void pluginEnabled(MOBase::IPlugin*); + void pluginDisabled(MOBase::IPlugin*); + void diagnosisUpdate(); private: -- cgit v1.3.1 From 34e9fb001567a244eec296f5ab7e747a9f23db2a Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Fri, 13 Nov 2020 18:26:49 +0100 Subject: Check for disabled mod page plugins. --- src/organizercore.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/organizercore.cpp') diff --git a/src/organizercore.cpp b/src/organizercore.cpp index e004ba78..ae031fe9 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -1465,10 +1465,13 @@ void OrganizerCore::loggedInAction(QWidget* parent, std::function f) void OrganizerCore::requestDownload(const QUrl &url, QNetworkReply *reply) { - if (m_PluginContainer != nullptr) { - for (IPluginModPage *modPage : - m_PluginContainer->plugins()) { - ModRepositoryFileInfo *fileInfo = new ModRepositoryFileInfo(); + if (!m_PluginContainer) { + return; + } + for (IPluginModPage *modPage : + m_PluginContainer->plugins()) { + if (m_PluginContainer->isEnabled(modPage)) { + ModRepositoryFileInfo* fileInfo = new ModRepositoryFileInfo(); if (modPage->handlesDownload(url, reply->url(), *fileInfo)) { fileInfo->repository = modPage->name(); m_DownloadManager.addDownload(reply, fileInfo); -- cgit v1.3.1 From 4c822e6563dc16d8e045ba48e8ca9b4e3fb4021a Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Sun, 15 Nov 2020 20:41:26 +0100 Subject: Allow '.' in findFiles and filter on file name, not full paths. --- src/organizercore.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/organizercore.cpp') diff --git a/src/organizercore.cpp b/src/organizercore.cpp index f57903e2..ef9c190f 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -959,13 +959,13 @@ QStringList OrganizerCore::findFiles( { QStringList result; DirectoryEntry *dir = m_DirectoryStructure; - if (!path.isEmpty()) + if (!path.isEmpty() && path != ".") dir = dir->findSubDirectoryRecursive(ToWString(path)); if (dir != nullptr) { std::vector files = dir->getFiles(); for (FileEntryPtr &file: files) { QString fullPath = ToQString(file->getFullPath()); - if (filter(fullPath)) { + if (filter(ToQString(file->getName()))) { result.append(fullPath); } } -- cgit v1.3.1