diff options
98 files changed, 1903 insertions, 1241 deletions
diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index e40f188e..c6daef6f 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -8,14 +8,10 @@ set(CORE_SOURCES BaseInstaller.cpp BaseVersionList.h BaseVersionList.cpp - InstanceCreationTask.h - InstanceCreationTask.cpp - InstanceCopyTask.h - InstanceCopyTask.cpp - InstanceImportTask.h - InstanceImportTask.cpp InstanceList.h InstanceList.cpp + InstanceTask.h + InstanceTask.cpp LoggedProcess.h LoggedProcess.cpp MessageLevel.cpp @@ -32,6 +28,14 @@ set(CORE_SOURCES MMCStrings.h MMCStrings.cpp + # Basic instance manipulation tasks (derived from InstanceTask) + InstanceCreationTask.h + InstanceCreationTask.cpp + InstanceCopyTask.h + InstanceCopyTask.cpp + InstanceImportTask.h + InstanceImportTask.cpp + # Use tracking separate from memory management Usable.h @@ -42,6 +46,10 @@ set(CORE_SOURCES Env.h Env.cpp + # String filters + Filter.h + Filter.cpp + # JSON parsing helpers Json.h Json.cpp diff --git a/api/logic/Filter.cpp b/api/logic/Filter.cpp new file mode 100644 index 00000000..7f6667ae --- /dev/null +++ b/api/logic/Filter.cpp @@ -0,0 +1,31 @@ +#include "Filter.h" + +Filter::~Filter(){} + +ContainsFilter::ContainsFilter(const QString& pattern) : pattern(pattern){} +ContainsFilter::~ContainsFilter(){} +bool ContainsFilter::accepts(const QString& value) +{ + return value.contains(pattern); +} + +ExactFilter::ExactFilter(const QString& pattern) : pattern(pattern){} +ExactFilter::~ExactFilter(){} +bool ExactFilter::accepts(const QString& value) +{ + return value.contains(pattern); +} + +RegexpFilter::RegexpFilter(const QString& regexp, bool invert) + :invert(invert) +{ + pattern.setPattern(regexp); + pattern.optimize(); +} +RegexpFilter::~RegexpFilter(){} +bool RegexpFilter::accepts(const QString& value) +{ + auto match = pattern.match(value); + bool matched = match.hasMatch(); + return invert ? (!matched) : (matched); +} diff --git a/api/logic/Filter.h b/api/logic/Filter.h new file mode 100644 index 00000000..8de7d8f9 --- /dev/null +++ b/api/logic/Filter.h @@ -0,0 +1,44 @@ +#pragma once + +#include <QString> +#include <QRegularExpression> + +#include "multimc_logic_export.h" + +class MULTIMC_LOGIC_EXPORT Filter +{ +public: + virtual ~Filter(); + virtual bool accepts(const QString & value) = 0; +}; + +class MULTIMC_LOGIC_EXPORT ContainsFilter: public Filter +{ +public: + ContainsFilter(const QString &pattern); + virtual ~ContainsFilter(); + bool accepts(const QString & value) override; +private: + QString pattern; +}; + +class MULTIMC_LOGIC_EXPORT ExactFilter: public Filter +{ +public: + ExactFilter(const QString &pattern); + virtual ~ExactFilter(); + bool accepts(const QString & value) override; +private: + QString pattern; +}; + +class MULTIMC_LOGIC_EXPORT RegexpFilter: public Filter +{ +public: + RegexpFilter(const QString ®exp, bool invert); + virtual ~RegexpFilter(); + bool accepts(const QString & value) override; +private: + QRegularExpression pattern; + bool invert = false; +}; diff --git a/api/logic/FolderInstanceProvider.cpp b/api/logic/FolderInstanceProvider.cpp index 52e23254..69ba6c82 100644 --- a/api/logic/FolderInstanceProvider.cpp +++ b/api/logic/FolderInstanceProvider.cpp @@ -412,46 +412,13 @@ private: QTimer m_backoffTimer; }; -#include "InstanceImportTask.h" -Task * FolderInstanceProvider::zipImportTask(const QUrl sourceUrl, const QString& instName, const QString& instGroup, const QString& instIcon) +#include "InstanceTask.h" +Task * FolderInstanceProvider::wrapInstanceTask(InstanceTask * task) { auto stagingPath = getStagedInstancePath(); - auto task = new InstanceImportTask(m_globalSettings, sourceUrl, stagingPath, instName, instIcon, instGroup); - return new FolderInstanceStaging(this, task, stagingPath, instName, instGroup); -} - -#include "InstanceCreationTask.h" -Task * FolderInstanceProvider::creationTask(BaseVersionPtr version, const QString& instName, const QString& instGroup, const QString& instIcon) -{ - auto stagingPath = getStagedInstancePath(); - auto task = new InstanceCreationTask(m_globalSettings, stagingPath, version, instName, instIcon, instGroup); - return new FolderInstanceStaging(this, task, stagingPath, instName, instGroup); -} - -#include <modplatform/ftb/FtbPackInstallTask.h> -Task * FolderInstanceProvider::ftbCreationTask(FtbPackDownloader *downloader, const QString& instName, const QString& instGroup, const QString& instIcon) -{ - auto stagingPath = getStagedInstancePath(); - auto task = new FtbPackInstallTask(downloader, m_globalSettings, stagingPath, instName, instIcon, instGroup); - return new FolderInstanceStaging(this, task, stagingPath, instName, instGroup); -} - -#include "InstanceCopyTask.h" -Task * FolderInstanceProvider::copyTask(const InstancePtr& oldInstance, const QString& instName, const QString& instGroup, const QString& instIcon, bool copySaves) -{ - auto stagingPath = getStagedInstancePath(); - auto task = new InstanceCopyTask(m_globalSettings, stagingPath, oldInstance, instName, instIcon, instGroup, copySaves); - return new FolderInstanceStaging(this, task, stagingPath, instName, instGroup); -} - -// FIXME: find a better place for this -#include "minecraft/legacy/LegacyUpgradeTask.h" -Task * FolderInstanceProvider::legacyUpgradeTask(const InstancePtr& oldInstance) -{ - auto stagingPath = getStagedInstancePath(); - QString newName = tr |
