aboutsummaryrefslogtreecommitdiff
path: root/launcher/InstanceCopyTask.cpp
diff options
context:
space:
mode:
authorMarcelo Hernandez <marcelohdez.inq@gmail.com>2022-10-22 14:50:32 -0400
committerMarcelo Hernandez <marcelohdez.inq@gmail.com>2022-10-23 19:30:28 -0400
commite7e56eb1e397a528df91f9ce99f738c49bde363c (patch)
treef4308127a25ba76f1ef930e48f7e83ce43df6750 /launcher/InstanceCopyTask.cpp
parent8b28ed67ae25ed95c73e5c486b2a5e81b3a72268 (diff)
downloadPrismLauncher-e7e56eb1e397a528df91f9ce99f738c49bde363c.tar.gz
PrismLauncher-e7e56eb1e397a528df91f9ce99f738c49bde363c.tar.bz2
PrismLauncher-e7e56eb1e397a528df91f9ce99f738c49bde363c.zip
add more options to copy instance dialog
- Copy game options, copy resource packs, copy shaders, copy servers, and copy mods - Also made a new InstanceCopyPrefs struct to store those options rather than passing 7 different booleans into InstanceCopyTask's constructor Signed-off-by: Marcelo Hernandez <marcelohdez.inq@gmail.com>
Diffstat (limited to 'launcher/InstanceCopyTask.cpp')
-rw-r--r--launcher/InstanceCopyTask.cpp62
1 files changed, 55 insertions, 7 deletions
diff --git a/launcher/InstanceCopyTask.cpp b/launcher/InstanceCopyTask.cpp
index b1e33884..360f6cfa 100644
--- a/launcher/InstanceCopyTask.cpp
+++ b/launcher/InstanceCopyTask.cpp
@@ -5,18 +5,66 @@
#include "pathmatcher/RegexpMatcher.h"
#include <QtConcurrentRun>
-InstanceCopyTask::InstanceCopyTask(InstancePtr origInstance, bool copySaves, bool keepPlaytime)
+InstanceCopyTask::InstanceCopyTask(InstancePtr origInstance, InstanceCopyPrefs prefs)
{
m_origInstance = origInstance;
- m_keepPlaytime = keepPlaytime;
+ m_keepPlaytime = prefs.keepPlaytime;
+ QString filter;
- if(!copySaves)
+ if(!prefs.copySaves)
{
- // FIXME: get this from the original instance type...
- auto matcherReal = new RegexpMatcher("[.]?minecraft/saves");
- matcherReal->caseSensitive(false);
- m_matcher.reset(matcherReal);
+ appendToFilter(filter, "saves");
}
+
+ if(!prefs.copyGameOptions) {
+ appendToFilter(filter, "options.txt");
+ }
+
+ if(!prefs.copyResourcePacks)
+ {
+ appendToFilter(filter, "resourcepacks");
+ appendToFilter(filter, "texturepacks");
+ }
+
+ if(!prefs.copyShaderPacks)
+ {
+ appendToFilter(filter, "shaderpacks");
+ }
+
+ if(!prefs.copyServers)
+ {
+ appendToFilter(filter, "servers.dat");
+ appendToFilter(filter, "servers.dat_old");
+ appendToFilter(filter, "server-resource-packs");
+ }
+
+ if(!prefs.copyMods)
+ {
+ appendToFilter(filter, "coremods");
+ appendToFilter(filter, "mods");
+ appendToFilter(filter, "config");
+ }
+
+ if (!filter.isEmpty())
+ {
+ resetFromMatcher(filter);
+ }
+}
+
+void InstanceCopyTask::appendToFilter(QString& filter, const QString &append)
+{
+ if (!filter.isEmpty())
+ filter.append('|'); // OR regex
+
+ filter.append("[.]?minecraft/" + append);
+}
+
+void InstanceCopyTask::resetFromMatcher(const QString& regexp)
+{
+ // FIXME: get this from the original instance type...
+ auto matcherReal = new RegexpMatcher(regexp);
+ matcherReal->caseSensitive(false);
+ m_matcher.reset(matcherReal);
}
void InstanceCopyTask::executeTask()