summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-12-01 21:05:24 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2020-12-01 21:07:54 +0100
commitad17210d7a6527d50786fbe60758e74e3c62abcb (patch)
tree90dd5d382def005e41699ccbb652df0db393727a
parent1ec3ab2b8a845f75495b4cacbeb17c86ea137a01 (diff)
Compute supported extensions dynamically in installation and download manager.
-rw-r--r--src/downloadmanager.cpp18
-rw-r--r--src/downloadmanager.h7
-rw-r--r--src/installationmanager.cpp19
-rw-r--r--src/installationmanager.h1
-rw-r--r--src/organizercore.cpp2
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);