diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-12-01 21:05:24 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-12-01 21:07:54 +0100 |
| commit | ad17210d7a6527d50786fbe60758e74e3c62abcb (patch) | |
| tree | 90dd5d382def005e41699ccbb652df0db393727a | |
| parent | 1ec3ab2b8a845f75495b4cacbeb17c86ea137a01 (diff) | |
Compute supported extensions dynamically in installation and download manager.
| -rw-r--r-- | src/downloadmanager.cpp | 18 | ||||
| -rw-r--r-- | src/downloadmanager.h | 7 | ||||
| -rw-r--r-- | src/installationmanager.cpp | 19 | ||||
| -rw-r--r-- | src/installationmanager.h | 1 | ||||
| -rw-r--r-- | src/organizercore.cpp | 2 |
5 files changed, 14 insertions, 33 deletions
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index 2927a972..648cfaa2 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -294,14 +294,6 @@ void DownloadManager::setOutputDirectory(const QString &outputDirectory, const b m_DirWatcher.addPath(m_OutputDirectory); } - -void DownloadManager::setSupportedExtensions(const QStringList &extensions) -{ - m_SupportedExtensions = extensions; - // this happens only during initialization so don't refresh yet as that will - // happen later during initDownloadView -} - void DownloadManager::setShowHidden(bool showHidden) { m_ShowHidden = showHidden; @@ -313,11 +305,6 @@ void DownloadManager::setPluginContainer(PluginContainer *pluginContainer) m_NexusInterface->setPluginContainer(pluginContainer); } - - - - - void DownloadManager::refreshList() { TimeThis tt("DownloadManager::refreshList()"); @@ -338,8 +325,9 @@ void DownloadManager::refreshList() } } - QStringList nameFilters(m_SupportedExtensions); - foreach (const QString &extension, m_SupportedExtensions) { + QStringList supportedExtensions = m_OrganizerCore->installationManager()->getSupportedExtensions(); + QStringList nameFilters(supportedExtensions); + for (const auto& extension : supportedExtensions) { nameFilters.append("*." + extension); } diff --git a/src/downloadmanager.h b/src/downloadmanager.h index 8a0d8eed..bd8e9799 100644 --- a/src/downloadmanager.h +++ b/src/downloadmanager.h @@ -181,12 +181,6 @@ public: QString getOutputDirectory() const { return m_OutputDirectory; } /** - * @brief set the list of supported extensions - * @param extensions list of supported extensions - */ - void setSupportedExtensions(const QStringList &extensions); - - /** * @brief sets whether hidden files are to be shown after all */ void setShowHidden(bool showHidden); @@ -558,7 +552,6 @@ private: QVector<DownloadInfo*> m_ActiveDownloads; QString m_OutputDirectory; - QStringList m_SupportedExtensions; std::set<int> m_RequestIDs; QVector<int> m_AlphabeticalTranslation; diff --git a/src/installationmanager.cpp b/src/installationmanager.cpp index 06909994..078f7088 100644 --- a/src/installationmanager.cpp +++ b/src/installationmanager.cpp @@ -80,7 +80,6 @@ static T resolveFunction(QLibrary &lib, const char *name) InstallationManager::InstallationManager() : m_ParentWidget(nullptr), - m_SupportedExtensions({"zip", "rar", "7z", "fomod", "001"}), m_IsRunning(false) { m_ArchiveHandler = CreateArchive(); if (!m_ArchiveHandler->isValid()) { @@ -606,7 +605,7 @@ IPluginInstaller::EInstallResult InstallationManager::install(const QString &fil ON_BLOCK_EXIT([this]() { m_IsRunning = false; }); QFileInfo fileInfo(fileName); - if (m_SupportedExtensions.find(fileInfo.suffix()) == m_SupportedExtensions.end()) { + if (!getSupportedExtensions().contains(fileInfo.suffix(), Qt::CaseInsensitive)) { reportError(tr("File format \"%1\" not supported").arg(fileInfo.suffix())); return IPluginInstaller::RESULT_FAILED; } @@ -851,16 +850,20 @@ void InstallationManager::registerInstaller(IPluginInstaller *installer) { m_Installers.push_back(installer); installer->setInstallationManager(this); - IPluginInstallerCustom *installerCustom = dynamic_cast<IPluginInstallerCustom*>(installer); - if (installerCustom != nullptr) { - std::set<QString> extensions = installerCustom->supportedExtensions(); - m_SupportedExtensions.insert(extensions.begin(), extensions.end()); - } } QStringList InstallationManager::getSupportedExtensions() const { - return QStringList(std::begin(m_SupportedExtensions), std::end(m_SupportedExtensions)); + std::set<QString, CaseInsensitive> supportedExtensions({ "zip", "rar", "7z", "fomod", "001" }); + for (auto* installer : m_PluginContainer->plugins<IPluginInstaller>()) { + if (m_PluginContainer->isEnabled(installer)) { + if (auto* installerCustom = dynamic_cast<IPluginInstallerCustom*>(installer)) { + std::set<QString> extensions = installerCustom->supportedExtensions(); + supportedExtensions.insert(extensions.begin(), extensions.end()); + } + } + } + return QStringList(supportedExtensions.begin(), supportedExtensions.end()); } void InstallationManager::notifyInstallationStart(QString const& archive, bool reinstallation, ModInfo::Ptr currentMod) diff --git a/src/installationmanager.h b/src/installationmanager.h index 145abdb6..2378178a 100644 --- a/src/installationmanager.h +++ b/src/installationmanager.h @@ -296,7 +296,6 @@ private: QString m_DownloadsDirectory; std::vector<MOBase::IPluginInstaller*> m_Installers; - std::set<QString, CaseInsensitive> m_SupportedExtensions; // Archive management. std::unique_ptr<Archive> m_ArchiveHandler; diff --git a/src/organizercore.cpp b/src/organizercore.cpp index a9e62e77..f14d3234 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -283,8 +283,6 @@ void OrganizerCore::checkForUpdates() void OrganizerCore::connectPlugins(PluginContainer *container) { - m_DownloadManager.setSupportedExtensions( - m_InstallationManager.getSupportedExtensions()); m_PluginContainer = container; m_Updater.setPluginContainer(m_PluginContainer); m_InstallationManager.setPluginContainer(m_PluginContainer); |
