diff options
| author | Petr Mrázek <peterix@gmail.com> | 2018-03-19 02:36:12 +0100 |
|---|---|---|
| committer | Petr Mrázek <peterix@gmail.com> | 2018-03-27 09:25:36 +0200 |
| commit | 8e44ab2338f4ca63d58de4b3329c384df9d6c053 (patch) | |
| tree | 60b915ec620221656d1c3a42f40124b15e9e69f0 | |
| parent | 4c7ea0f99a23f73fd3cae87f7dfaab89922a2311 (diff) | |
| download | PrismLauncher-8e44ab2338f4ca63d58de4b3329c384df9d6c053.tar.gz PrismLauncher-8e44ab2338f4ca63d58de4b3329c384df9d6c053.tar.bz2 PrismLauncher-8e44ab2338f4ca63d58de4b3329c384df9d6c053.zip | |
NOISSUE redo new instance dialog
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("%1 (Migrated)").arg(oldInstance->name()); - auto task = new LegacyUpgradeTask(m_globalSettings, stagingPath, oldInstance, newName); - return new FolderInstanceStaging(this, task, stagingPath, newName, oldInstance->group()); + task->setStagingPath(stagingPath); + task->setParentSettings(m_globalSettings); + return new FolderInstanceStaging(this, task, stagingPath, task->name(), task->group()); } QString FolderInstanceProvider::getStagedInstancePath() diff --git a/api/logic/FolderInstanceProvider.h b/api/logic/FolderInstanceProvider.h index 2641a46b..e13dcfe9 100644 --- a/api/logic/FolderInstanceProvider.h +++ b/api/logic/FolderInstanceProvider.h @@ -2,9 +2,9 @@ #include "BaseInstanceProvider.h" #include <QMap> -#include <modplatform/ftb/FtbPackDownloader.h> class QFileSystemWatcher; +class InstanceTask; class MULTIMC_LOGIC_EXPORT FolderInstanceProvider : public BaseInstanceProvider { @@ -20,6 +20,7 @@ public: InstancePtr loadInstance(const InstanceId& id) override; + /* // create instance in this provider Task * creationTask(BaseVersionPtr version, const QString &instName, const QString &instGroup, const QString &instIcon); @@ -34,6 +35,10 @@ public: // migrate an instance to the current format Task * legacyUpgradeTask(const InstancePtr& oldInstance); +*/ + + // Wrap an instance creation task in some more task machinery and make it ready to be used + Task * wrapInstanceTask(InstanceTask * task); /** * Create a new empty staging area for instance creation and @return a path/key top commit it later. diff --git a/api/logic/InstanceCopyTask.cpp b/api/logic/InstanceCopyTask.cpp index 9ede65f5..62c22362 100644 --- a/api/logic/InstanceCopyTask.cpp +++ b/api/logic/InstanceCopyTask.cpp @@ -6,14 +6,9 @@ #include "pathmatcher/RegexpMatcher.h" #include <QtConcurrentRun> |
