From d87f743a2bd2fac761b94de77ed7255d7a983f03 Mon Sep 17 00:00:00 2001
From: he3als <65787561+he3als@users.noreply.github.com>
Date: Tue, 18 Oct 2022 17:49:35 +0100
Subject: [PATCH 01/72] Add flat white icons
This is mainly for dark mode users, as I think that the regular colour of the flat icons do not look good with dark mode.
---
launcher/resources/flat_white/flat_white.qrc | 46 ++++++++
launcher/resources/flat_white/index.theme | 11 ++
.../resources/flat_white/scalable/about.svg | 3 +
.../flat_white/scalable/accounts.svg | 3 +
.../resources/flat_white/scalable/bug.svg | 3 +
.../resources/flat_white/scalable/cat.svg | 3 +
.../flat_white/scalable/centralmods.svg | 3 +
.../flat_white/scalable/checkupdate.svg | 3 +
.../resources/flat_white/scalable/copy.svg | 3 +
.../flat_white/scalable/coremods.svg | 3 +
.../flat_white/scalable/custom-commands.svg | 86 +++++++++++++++
.../resources/flat_white/scalable/discord.svg | 4 +
.../flat_white/scalable/externaltools.svg | 3 +
.../resources/flat_white/scalable/help.svg | 17 +++
.../flat_white/scalable/instance-settings.svg | 3 +
.../resources/flat_white/scalable/jarmods.svg | 3 +
.../resources/flat_white/scalable/java.svg | 3 +
.../flat_white/scalable/language.svg | 103 ++++++++++++++++++
.../flat_white/scalable/launcher.svg | 2 +
.../flat_white/scalable/loadermods.svg | 3 +
.../resources/flat_white/scalable/log.svg | 3 +
.../flat_white/scalable/minecraft.svg | 3 +
.../resources/flat_white/scalable/multimc.svg | 3 +
.../resources/flat_white/scalable/new.svg | 3 +
.../resources/flat_white/scalable/news.svg | 3 +
.../resources/flat_white/scalable/notes.svg | 3 +
.../flat_white/scalable/packages.svg | 3 +
.../resources/flat_white/scalable/patreon.svg | 3 +
.../resources/flat_white/scalable/proxy.svg | 3 +
.../flat_white/scalable/quickmods.svg | 3 +
.../flat_white/scalable/reddit-alien.svg | 3 +
.../resources/flat_white/scalable/refresh.svg | 3 +
.../flat_white/scalable/resourcepacks.svg | 3 +
.../scalable/screenshot-placeholder.svg | 3 +
.../flat_white/scalable/screenshots.svg | 3 +
.../flat_white/scalable/settings.svg | 3 +
.../flat_white/scalable/shaderpacks.svg | 56 ++++++++++
.../resources/flat_white/scalable/star.svg | 3 +
.../flat_white/scalable/status-bad.svg | 3 +
.../flat_white/scalable/status-good.svg | 3 +
.../flat_white/scalable/status-running.svg | 3 +
.../flat_white/scalable/status-yellow.svg | 3 +
.../flat_white/scalable/viewfolder.svg | 3 +
.../resources/flat_white/scalable/worlds.svg | 3 +
44 files changed, 433 insertions(+)
create mode 100644 launcher/resources/flat_white/flat_white.qrc
create mode 100644 launcher/resources/flat_white/index.theme
create mode 100644 launcher/resources/flat_white/scalable/about.svg
create mode 100644 launcher/resources/flat_white/scalable/accounts.svg
create mode 100644 launcher/resources/flat_white/scalable/bug.svg
create mode 100644 launcher/resources/flat_white/scalable/cat.svg
create mode 100644 launcher/resources/flat_white/scalable/centralmods.svg
create mode 100644 launcher/resources/flat_white/scalable/checkupdate.svg
create mode 100644 launcher/resources/flat_white/scalable/copy.svg
create mode 100644 launcher/resources/flat_white/scalable/coremods.svg
create mode 100644 launcher/resources/flat_white/scalable/custom-commands.svg
create mode 100644 launcher/resources/flat_white/scalable/discord.svg
create mode 100644 launcher/resources/flat_white/scalable/externaltools.svg
create mode 100644 launcher/resources/flat_white/scalable/help.svg
create mode 100644 launcher/resources/flat_white/scalable/instance-settings.svg
create mode 100644 launcher/resources/flat_white/scalable/jarmods.svg
create mode 100644 launcher/resources/flat_white/scalable/java.svg
create mode 100644 launcher/resources/flat_white/scalable/language.svg
create mode 100644 launcher/resources/flat_white/scalable/launcher.svg
create mode 100644 launcher/resources/flat_white/scalable/loadermods.svg
create mode 100644 launcher/resources/flat_white/scalable/log.svg
create mode 100644 launcher/resources/flat_white/scalable/minecraft.svg
create mode 100644 launcher/resources/flat_white/scalable/multimc.svg
create mode 100644 launcher/resources/flat_white/scalable/new.svg
create mode 100644 launcher/resources/flat_white/scalable/news.svg
create mode 100644 launcher/resources/flat_white/scalable/notes.svg
create mode 100644 launcher/resources/flat_white/scalable/packages.svg
create mode 100644 launcher/resources/flat_white/scalable/patreon.svg
create mode 100644 launcher/resources/flat_white/scalable/proxy.svg
create mode 100644 launcher/resources/flat_white/scalable/quickmods.svg
create mode 100644 launcher/resources/flat_white/scalable/reddit-alien.svg
create mode 100644 launcher/resources/flat_white/scalable/refresh.svg
create mode 100644 launcher/resources/flat_white/scalable/resourcepacks.svg
create mode 100644 launcher/resources/flat_white/scalable/screenshot-placeholder.svg
create mode 100644 launcher/resources/flat_white/scalable/screenshots.svg
create mode 100644 launcher/resources/flat_white/scalable/settings.svg
create mode 100644 launcher/resources/flat_white/scalable/shaderpacks.svg
create mode 100644 launcher/resources/flat_white/scalable/star.svg
create mode 100644 launcher/resources/flat_white/scalable/status-bad.svg
create mode 100644 launcher/resources/flat_white/scalable/status-good.svg
create mode 100644 launcher/resources/flat_white/scalable/status-running.svg
create mode 100644 launcher/resources/flat_white/scalable/status-yellow.svg
create mode 100644 launcher/resources/flat_white/scalable/viewfolder.svg
create mode 100644 launcher/resources/flat_white/scalable/worlds.svg
diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc
new file mode 100644
index 000000000..d2b752b1a
--- /dev/null
+++ b/launcher/resources/flat_white/flat_white.qrc
@@ -0,0 +1,46 @@
+
+
+
+ index.theme
+ scalable/about.svg
+ scalable/accounts.svg
+ scalable/bug.svg
+ scalable/cat.svg
+ scalable/centralmods.svg
+ scalable/checkupdate.svg
+ scalable/copy.svg
+ scalable/coremods.svg
+ scalable/custom-commands.svg
+ scalable/discord.svg
+ scalable/externaltools.svg
+ scalable/help.svg
+ scalable/instance-settings.svg
+ scalable/jarmods.svg
+ scalable/java.svg
+ scalable/language.svg
+ scalable/launcher.svg
+ scalable/loadermods.svg
+ scalable/log.svg
+ scalable/minecraft.svg
+ scalable/new.svg
+ scalable/news.svg
+ scalable/notes.svg
+ scalable/packages.svg
+ scalable/proxy.svg
+ scalable/quickmods.svg
+ scalable/reddit-alien.svg
+ scalable/refresh.svg
+ scalable/resourcepacks.svg
+ scalable/shaderpacks.svg
+ scalable/screenshot-placeholder.svg
+ scalable/screenshots.svg
+ scalable/settings.svg
+ scalable/star.svg
+ scalable/status-bad.svg
+ scalable/status-good.svg
+ scalable/status-running.svg
+ scalable/status-yellow.svg
+ scalable/viewfolder.svg
+ scalable/worlds.svg
+
+
diff --git a/launcher/resources/flat_white/index.theme b/launcher/resources/flat_white/index.theme
new file mode 100644
index 000000000..a0b3ba6f4
--- /dev/null
+++ b/launcher/resources/flat_white/index.theme
@@ -0,0 +1,11 @@
+[Icon Theme]
+Name=White Flat
+Comment=White version of the flat icons (for dark mode)
+Inherits=multimc
+Directories=scalable
+
+[scalable]
+Size=48
+Type=Scalable
+MinSize=16
+MaxSize=256
diff --git a/launcher/resources/flat_white/scalable/about.svg b/launcher/resources/flat_white/scalable/about.svg
new file mode 100644
index 000000000..e42ca9481
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/about.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/accounts.svg b/launcher/resources/flat_white/scalable/accounts.svg
new file mode 100644
index 000000000..e714bde13
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/accounts.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/bug.svg b/launcher/resources/flat_white/scalable/bug.svg
new file mode 100644
index 000000000..3122702e3
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/bug.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/cat.svg b/launcher/resources/flat_white/scalable/cat.svg
new file mode 100644
index 000000000..18da097a7
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/cat.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/centralmods.svg b/launcher/resources/flat_white/scalable/centralmods.svg
new file mode 100644
index 000000000..d8d10f2f5
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/centralmods.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/checkupdate.svg b/launcher/resources/flat_white/scalable/checkupdate.svg
new file mode 100644
index 000000000..0fa66fc2f
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/checkupdate.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/copy.svg b/launcher/resources/flat_white/scalable/copy.svg
new file mode 100644
index 000000000..1aaed97b1
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/copy.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/coremods.svg b/launcher/resources/flat_white/scalable/coremods.svg
new file mode 100644
index 000000000..32c343839
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/coremods.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/custom-commands.svg b/launcher/resources/flat_white/scalable/custom-commands.svg
new file mode 100644
index 000000000..3d67d8f10
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/custom-commands.svg
@@ -0,0 +1,86 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/flat_white/scalable/discord.svg b/launcher/resources/flat_white/scalable/discord.svg
new file mode 100644
index 000000000..ee07ed25e
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/discord.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/externaltools.svg b/launcher/resources/flat_white/scalable/externaltools.svg
new file mode 100644
index 000000000..e7c0930c9
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/externaltools.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/help.svg b/launcher/resources/flat_white/scalable/help.svg
new file mode 100644
index 000000000..82b413fe5
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/help.svg
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/launcher/resources/flat_white/scalable/instance-settings.svg b/launcher/resources/flat_white/scalable/instance-settings.svg
new file mode 100644
index 000000000..7dac7b141
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/instance-settings.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/jarmods.svg b/launcher/resources/flat_white/scalable/jarmods.svg
new file mode 100644
index 000000000..f0f298f32
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/jarmods.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/java.svg b/launcher/resources/flat_white/scalable/java.svg
new file mode 100644
index 000000000..56bb481f2
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/java.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/language.svg b/launcher/resources/flat_white/scalable/language.svg
new file mode 100644
index 000000000..18c22efb5
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/language.svg
@@ -0,0 +1,103 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/flat_white/scalable/launcher.svg b/launcher/resources/flat_white/scalable/launcher.svg
new file mode 100644
index 000000000..d7ad0dd3f
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/launcher.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/launcher/resources/flat_white/scalable/loadermods.svg b/launcher/resources/flat_white/scalable/loadermods.svg
new file mode 100644
index 000000000..100f7a93e
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/loadermods.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/log.svg b/launcher/resources/flat_white/scalable/log.svg
new file mode 100644
index 000000000..69b7c1dcc
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/log.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/minecraft.svg b/launcher/resources/flat_white/scalable/minecraft.svg
new file mode 100644
index 000000000..a0348e797
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/minecraft.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/multimc.svg b/launcher/resources/flat_white/scalable/multimc.svg
new file mode 100644
index 000000000..3dce2699b
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/multimc.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/new.svg b/launcher/resources/flat_white/scalable/new.svg
new file mode 100644
index 000000000..46dc3361a
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/new.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/news.svg b/launcher/resources/flat_white/scalable/news.svg
new file mode 100644
index 000000000..414e54540
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/news.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/notes.svg b/launcher/resources/flat_white/scalable/notes.svg
new file mode 100644
index 000000000..4ce5f6f19
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/notes.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/packages.svg b/launcher/resources/flat_white/scalable/packages.svg
new file mode 100644
index 000000000..909ad0b27
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/packages.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/patreon.svg b/launcher/resources/flat_white/scalable/patreon.svg
new file mode 100644
index 000000000..b745765b4
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/patreon.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/proxy.svg b/launcher/resources/flat_white/scalable/proxy.svg
new file mode 100644
index 000000000..a86703f45
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/proxy.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/quickmods.svg b/launcher/resources/flat_white/scalable/quickmods.svg
new file mode 100644
index 000000000..9e0045b20
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/quickmods.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/reddit-alien.svg b/launcher/resources/flat_white/scalable/reddit-alien.svg
new file mode 100644
index 000000000..be22148ca
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/reddit-alien.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/refresh.svg b/launcher/resources/flat_white/scalable/refresh.svg
new file mode 100644
index 000000000..08c63bdf7
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/refresh.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/resourcepacks.svg b/launcher/resources/flat_white/scalable/resourcepacks.svg
new file mode 100644
index 000000000..9dd73c3af
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/resourcepacks.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/screenshot-placeholder.svg b/launcher/resources/flat_white/scalable/screenshot-placeholder.svg
new file mode 100644
index 000000000..41eb6fcfc
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/screenshot-placeholder.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/screenshots.svg b/launcher/resources/flat_white/scalable/screenshots.svg
new file mode 100644
index 000000000..68cf89696
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/screenshots.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/settings.svg b/launcher/resources/flat_white/scalable/settings.svg
new file mode 100644
index 000000000..7dac7b141
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/settings.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/shaderpacks.svg b/launcher/resources/flat_white/scalable/shaderpacks.svg
new file mode 100644
index 000000000..ccae221c1
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/shaderpacks.svg
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/flat_white/scalable/star.svg b/launcher/resources/flat_white/scalable/star.svg
new file mode 100644
index 000000000..116f952eb
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/star.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/status-bad.svg b/launcher/resources/flat_white/scalable/status-bad.svg
new file mode 100644
index 000000000..5a121c09c
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/status-bad.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/status-good.svg b/launcher/resources/flat_white/scalable/status-good.svg
new file mode 100644
index 000000000..ccb732ab8
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/status-good.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/status-running.svg b/launcher/resources/flat_white/scalable/status-running.svg
new file mode 100644
index 000000000..aa2d5fbff
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/status-running.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/status-yellow.svg b/launcher/resources/flat_white/scalable/status-yellow.svg
new file mode 100644
index 000000000..772699d32
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/status-yellow.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/viewfolder.svg b/launcher/resources/flat_white/scalable/viewfolder.svg
new file mode 100644
index 000000000..145f86248
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/viewfolder.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/worlds.svg b/launcher/resources/flat_white/scalable/worlds.svg
new file mode 100644
index 000000000..cea30cf81
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/worlds.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
From 92dfd659f1a3e11accdbf0ebbdc7cb91f74d9a21 Mon Sep 17 00:00:00 2001
From: he3als <65787561+he3als@users.noreply.github.com>
Date: Tue, 18 Oct 2022 17:54:26 +0100
Subject: [PATCH 02/72] Fix .QRC file for flat white icons
---
launcher/resources/flat_white/flat_white.qrc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc
index d2b752b1a..feda4762e 100644
--- a/launcher/resources/flat_white/flat_white.qrc
+++ b/launcher/resources/flat_white/flat_white.qrc
@@ -1,6 +1,6 @@
-
+
index.theme
scalable/about.svg
scalable/accounts.svg
From 0a7383a4e1c36b0dbbdc615433a30665d1777f64 Mon Sep 17 00:00:00 2001
From: flow
Date: Thu, 20 Oct 2022 16:54:39 -0300
Subject: [PATCH 03/72] fix: hide ProgressDialog when failing/succeeding tasks
WHY IS QT LIKE THAT AAAAAAAA
Signed-off-by: flow
---
launcher/ui/dialogs/ProgressDialog.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/launcher/ui/dialogs/ProgressDialog.cpp b/launcher/ui/dialogs/ProgressDialog.cpp
index 68dd4d17e..05269f623 100644
--- a/launcher/ui/dialogs/ProgressDialog.cpp
+++ b/launcher/ui/dialogs/ProgressDialog.cpp
@@ -136,11 +136,13 @@ void ProgressDialog::onTaskStarted() {}
void ProgressDialog::onTaskFailed(QString failure)
{
reject();
+ hide();
}
void ProgressDialog::onTaskSucceeded()
{
accept();
+ hide();
}
void ProgressDialog::changeStatus(const QString& status)
From 01b90809e8be2bef02644ba91feceb21b6f7cb8f Mon Sep 17 00:00:00 2001
From: flow
Date: Thu, 20 Oct 2022 16:55:22 -0300
Subject: [PATCH 04/72] fix: memory leak when finishing blocked mods job
Signed-off-by: flow
---
launcher/modplatform/flame/FileResolvingTask.cpp | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp
index 1e7f55590..0b2431f7e 100644
--- a/launcher/modplatform/flame/FileResolvingTask.cpp
+++ b/launcher/modplatform/flame/FileResolvingTask.cpp
@@ -66,7 +66,11 @@ void Flame::FileResolvingTask::netJobFinished()
}
index++;
}
- connect(job, &NetJob::finished, this, &Flame::FileResolvingTask::modrinthCheckFinished);
+ connect(job, &NetJob::finished, this,
+ [this, &job] {
+ modrinthCheckFinished();
+ job->deleteLater();
+ });
job->start();
}
From 919f8c54d74f81e7144d8a18a1ef068e3538f458 Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Fri, 21 Oct 2022 17:42:18 +0200
Subject: [PATCH 05/72] fix: don't build renovate branches
They will be built using the pull_requests event anyway.
Signed-off-by: Sefa Eyeoglu
---
.github/workflows/trigger_builds.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/trigger_builds.yml b/.github/workflows/trigger_builds.yml
index 55b4fdd4f..8adaa5e52 100644
--- a/.github/workflows/trigger_builds.yml
+++ b/.github/workflows/trigger_builds.yml
@@ -3,7 +3,7 @@ name: Build Application
on:
push:
branches-ignore:
- - 'stable'
+ - 'renovate/**'
paths-ignore:
- '**.md'
- '**/LICENSE'
From 7eecf454e83314cd6f8029f54678dea568d41843 Mon Sep 17 00:00:00 2001
From: flow
Date: Fri, 21 Oct 2022 14:07:43 -0300
Subject: [PATCH 06/72] fix: remove max height logic for mod update changelogs
It's not worth it to keep this, it's just a heuristic that fails from
time to time.
Signed-off-by: flow
---
launcher/ui/dialogs/ModUpdateDialog.cpp | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/launcher/ui/dialogs/ModUpdateDialog.cpp b/launcher/ui/dialogs/ModUpdateDialog.cpp
index 4171586e9..cedd4a96e 100644
--- a/launcher/ui/dialogs/ModUpdateDialog.cpp
+++ b/launcher/ui/dialogs/ModUpdateDialog.cpp
@@ -366,33 +366,28 @@ void ModUpdateDialog::appendMod(CheckUpdateTask::UpdatableMod const& info)
auto changelog = new QTreeWidgetItem(changelog_item);
auto changelog_area = new QTextBrowser();
+ QString text = info.changelog;
switch (info.provider) {
case ModPlatform::Provider::MODRINTH: {
HoeDown h;
// HoeDown bug?: \n aren't converted to
- auto text = h.process(info.changelog.toUtf8());
+ text = h.process(info.changelog.toUtf8());
// Don't convert if there's an HTML tag right after (Qt rendering weirdness)
text.remove(QRegularExpression("(\n+)(?=<)"));
text.replace('\n', " ");
- changelog_area->setHtml(text);
break;
}
- case ModPlatform::Provider::FLAME: {
- changelog_area->setHtml(info.changelog);
+ default:
break;
- }
}
+ changelog_area->setHtml(text);
changelog_area->setOpenExternalLinks(true);
- changelog_area->setLineWrapMode(QTextBrowser::LineWrapMode::NoWrap);
+ changelog_area->setLineWrapMode(QTextBrowser::LineWrapMode::WidgetWidth);
changelog_area->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
- // HACK: Is there a better way of achieving this?
- auto font_height = QFontMetrics(changelog_area->font()).height();
- changelog_area->setMaximumHeight((changelog_area->toPlainText().count(QRegularExpression("\n| ")) + 2) * font_height);
-
ui->modTreeWidget->setItemWidget(changelog, 0, changelog_area);
ui->modTreeWidget->addTopLevelItem(item_top);
From 1288b926153c86b7966727e60de4af8e7dcb4031 Mon Sep 17 00:00:00 2001
From: Hibi <69405847+Hibiii@users.noreply.github.com>
Date: Fri, 21 Oct 2022 15:40:28 -0300
Subject: [PATCH 07/72] Add argument to show instance window
---
launcher/Application.cpp | 14 +++++++++++++-
launcher/Application.h | 1 +
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index 6ffec1ae4..ace06c2c3 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -245,7 +245,8 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
{{"s", "server"}, "Join the specified server on launch (only valid in combination with --launch)", "address"},
{{"a", "profile"}, "Use the account specified by its profile name (only valid in combination with --launch)", "profile"},
{"alive", "Write a small '" + liveCheckFile + "' file after the launcher starts"},
- {{"I", "import"}, "Import instance from specified zip (local path or URL)", "file"}
+ {{"I", "import"}, "Import instance from specified zip (local path or URL)", "file"},
+ {"show", "Opens the window for the specified instance (by instance ID)", "show"}
});
parser.addHelpOption();
parser.addVersionOption();
@@ -257,6 +258,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_profileToUse = parser.value("profile");
m_liveCheck = parser.isSet("alive");
m_zipToImport = parser.value("import");
+ m_instanceIdToShowWindowOf = parser.value("show");
// error if --launch is missing with --server or --profile
if((!m_serverToJoin.isEmpty() || !m_profileToUse.isEmpty()) && m_instanceIdToLaunch.isEmpty())
@@ -986,6 +988,16 @@ void Application::performMainStartupAction()
return;
}
}
+ if(!m_instanceIdToShowWindowOf.isEmpty())
+ {
+ auto inst = instances()->getInstanceById(m_instanceIdToShowWindowOf);
+ if(inst)
+ {
+ qDebug() << "<> Showing window of instance " << m_instanceIdToShowWindowOf;
+ showInstanceWindow(inst);
+ return;
+ }
+ }
if(!m_mainWindow)
{
// normal main window
diff --git a/launcher/Application.h b/launcher/Application.h
index 34ad8c152..c453cc28b 100644
--- a/launcher/Application.h
+++ b/launcher/Application.h
@@ -301,6 +301,7 @@ public:
QString m_profileToUse;
bool m_liveCheck = false;
QUrl m_zipToImport;
+ QString m_instanceIdToShowWindowOf;
std::unique_ptr logFile;
};
From 5b75869c0ba60e00147d723d5633c9f6a5d6304e Mon Sep 17 00:00:00 2001
From: Hibi <69405847+Hibiii@users.noreply.github.com>
Date: Fri, 21 Oct 2022 16:10:03 -0300
Subject: [PATCH 08/72] Add --show to manual page
---
program_info/prismlauncher.6.scd | 3 +++
1 file changed, 3 insertions(+)
diff --git a/program_info/prismlauncher.6.scd b/program_info/prismlauncher.6.scd
index e3c7de860..f979e4571 100644
--- a/program_info/prismlauncher.6.scd
+++ b/program_info/prismlauncher.6.scd
@@ -26,6 +26,9 @@ Here are the current features of Prism Launcher.
*-l, --launch*=INSTANCE_ID
Launch the instance specified by INSTANCE_ID.
+*--show*=INSTANCE_ID
+ Show the configuration window of the instance specified by INSTANCE_ID.
+
*--alive*
Write a small 'live.check' file after Prism Launcher starts.
From 82d1dbf1736bb234938db7fdb8aecbc954023989 Mon Sep 17 00:00:00 2001
From: Hibi <69405847+Hibiii@users.noreply.github.com>
Date: Fri, 21 Oct 2022 17:59:35 -0300
Subject: [PATCH 09/72] DCO Remediation Commit for Hibi
<69405847+Hibiii@users.noreply.github.com>
I, Hibi <69405847+Hibiii@users.noreply.github.com>, hereby add my Signed-off-by to this commit: 1288b926153c86b7966727e60de4af8e7dcb4031
I, Hibi <69405847+Hibiii@users.noreply.github.com>, hereby add my Signed-off-by to this commit: 5b75869c0ba60e00147d723d5633c9f6a5d6304e
Signed-off-by: Hibi <69405847+Hibiii@users.noreply.github.com>
From 9b17cde01929e58819c353868734f81faf811958 Mon Sep 17 00:00:00 2001
From: forkiesassds
Date: Sat, 22 Oct 2022 01:19:51 +0300
Subject: [PATCH 10/72] CurseForge modpack page improvements
Signed-off-by: forkiesassds
---
.../ui/pages/modplatform/flame/FlameModel.cpp | 52 +++++++++++--------
.../ui/pages/modplatform/flame/FlamePage.cpp | 10 ++++
.../ui/pages/modplatform/flame/FlamePage.ui | 9 +++-
3 files changed, 49 insertions(+), 22 deletions(-)
diff --git a/launcher/ui/pages/modplatform/flame/FlameModel.cpp b/launcher/ui/pages/modplatform/flame/FlameModel.cpp
index b98046813..9f8605eb3 100644
--- a/launcher/ui/pages/modplatform/flame/FlameModel.cpp
+++ b/launcher/ui/pages/modplatform/flame/FlameModel.cpp
@@ -1,6 +1,7 @@
#include "FlameModel.h"
#include
#include "Application.h"
+#include "ui/widgets/ProjectItem.h"
#include
#include
@@ -31,29 +32,38 @@ QVariant ListModel::data(const QModelIndex& index, int role) const
}
IndexedPack pack = modpacks.at(pos);
- if (role == Qt::DisplayRole) {
- return pack.name;
- } else if (role == Qt::ToolTipRole) {
- if (pack.description.length() > 100) {
- // some magic to prevent to long tooltips and replace html linebreaks
- QString edit = pack.description.left(97);
- edit = edit.left(edit.lastIndexOf(" ")).left(edit.lastIndexOf(" ")).append("...");
- return edit;
+ switch (role) {
+ case Qt::ToolTipRole: {
+ if (pack.description.length() > 100) {
+ // some magic to prevent to long tooltips and replace html linebreaks
+ QString edit = pack.description.left(97);
+ edit = edit.left(edit.lastIndexOf(" ")).left(edit.lastIndexOf(" ")).append("...");
+ return edit;
+ }
+ return pack.description;
+ } case Qt::DecorationRole: {
+ if (m_logoMap.contains(pack.logoName)) {
+ return (m_logoMap.value(pack.logoName));
+ }
+ QIcon icon = APPLICATION->getThemedIcon("screenshot-placeholder");
+ ((ListModel*)this)->requestLogo(pack.logoName, pack.logoUrl);
+ return icon;
+ } case Qt::UserRole: {
+ QVariant v;
+ v.setValue(pack);
+ return v;
}
- return pack.description;
- } else if (role == Qt::DecorationRole) {
- if (m_logoMap.contains(pack.logoName)) {
- return (m_logoMap.value(pack.logoName));
- }
- QIcon icon = APPLICATION->getThemedIcon("screenshot-placeholder");
- ((ListModel*)this)->requestLogo(pack.logoName, pack.logoUrl);
- return icon;
- } else if (role == Qt::UserRole) {
- QVariant v;
- v.setValue(pack);
- return v;
+ case Qt::SizeHintRole:
+ return QSize(0, 58);
+ case UserDataTypes::TITLE:
+ return pack.name;
+ case UserDataTypes::DESCRIPTION:
+ return pack.description;
+ case UserDataTypes::SELECTED:
+ return false;
+ default:
+ break;
}
-
return QVariant();
}
diff --git a/launcher/ui/pages/modplatform/flame/FlamePage.cpp b/launcher/ui/pages/modplatform/flame/FlamePage.cpp
index 7d2ba2e2f..a65b65858 100644
--- a/launcher/ui/pages/modplatform/flame/FlamePage.cpp
+++ b/launcher/ui/pages/modplatform/flame/FlamePage.cpp
@@ -43,6 +43,10 @@
#include "InstanceImportTask.h"
#include "Json.h"
#include "ui/dialogs/NewInstanceDialog.h"
+#include "ui/widgets/ProjectItem.h"
+#include "modplatform/flame/FlameAPI.h"
+
+static FlameAPI api;
FlamePage::FlamePage(NewInstanceDialog* dialog, QWidget* parent) : QWidget(parent), ui(new Ui::FlamePage), dialog(dialog)
{
@@ -66,6 +70,9 @@ FlamePage::FlamePage(NewInstanceDialog* dialog, QWidget* parent) : QWidget(paren
connect(ui->sortByBox, SIGNAL(currentIndexChanged(int)), this, SLOT(triggerSearch()));
connect(ui->packView->selectionModel(), &QItemSelectionModel::currentChanged, this, &FlamePage::onSelectionChanged);
connect(ui->versionSelectionBox, &QComboBox::currentTextChanged, this, &FlamePage::onVersionSelectionChanged);
+
+ ui->packView->setItemDelegate(new ProjectItemDelegate(this));
+ ui->packDescription->setMetaEntry("FlamePacks");
}
FlamePage::~FlamePage()
@@ -250,7 +257,10 @@ void FlamePage::updateUi()
text += "- " + tr("Source code: %1 ").arg(current.extra.sourceUrl) + " ";
}
+
text += " ";
+ text += api.getModDescription(current.addonId).toUtf8();
ui->packDescription->setHtml(text + current.description);
+ ui->packDescription->flush();
}
diff --git a/launcher/ui/pages/modplatform/flame/FlamePage.ui b/launcher/ui/pages/modplatform/flame/FlamePage.ui
index 1a3d02255..71d195135 100644
--- a/launcher/ui/pages/modplatform/flame/FlamePage.ui
+++ b/launcher/ui/pages/modplatform/flame/FlamePage.ui
@@ -66,7 +66,7 @@
-
-
+
true
@@ -99,6 +99,13 @@
+
+
+ ProjectDescriptionPage
+ QTextBrowser
+ ui/widgets/ProjectDescriptionPage.h
+
+
packView
packDescription
From ba4af1a890f3d2990d86a36a2fbbb16ad2c774cf Mon Sep 17 00:00:00 2001
From: seth
Date: Fri, 21 Oct 2022 19:54:10 -0400
Subject: [PATCH 11/72] fix: make jars path specific to prism
Signed-off-by: seth
---
CMakeLists.txt | 2 +-
launcher/Application.cpp | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 131d3e53c..97bad31b4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -249,7 +249,7 @@ if(UNIX AND APPLE)
elseif(UNIX)
set(BINARY_DEST_DIR "bin")
set(LIBRARY_DEST_DIR "lib${LIB_SUFFIX}")
- set(JARS_DEST_DIR "share/jars")
+ set(JARS_DEST_DIR "share/${Launcher_APP_BINARY_NAME}")
set(LAUNCHER_DESKTOP_DEST_DIR "share/applications" CACHE STRING "Path to the desktop file directory")
set(LAUNCHER_METAINFO_DEST_DIR "share/metainfo" CACHE STRING "Path to the metainfo directory")
set(LAUNCHER_ICON_DEST_DIR "share/icons/hicolor/scalable/apps" CACHE STRING "Path to the scalable icon directory")
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index 6ffec1ae4..babf824aa 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -1571,7 +1571,7 @@ QString Application::getJarPath(QString jarFile)
{
QStringList potentialPaths = {
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD)
- FS::PathCombine(m_rootPath, "share/jars"),
+ FS::PathCombine(m_rootPath, "share/" + BuildConfig.LAUNCHER_NAME),
#endif
FS::PathCombine(m_rootPath, "jars"),
FS::PathCombine(applicationDirPath(), "jars")
From 4a2b25e841224441c0dcaa81bcbd0f716d64201e Mon Sep 17 00:00:00 2001
From: seth
Date: Fri, 21 Oct 2022 21:29:28 -0400
Subject: [PATCH 12/72] fix: use correct variable for jars path
Signed-off-by: seth
---
buildconfig/BuildConfig.cpp.in | 1 +
buildconfig/BuildConfig.h | 1 +
launcher/Application.cpp | 2 +-
3 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/buildconfig/BuildConfig.cpp.in b/buildconfig/BuildConfig.cpp.in
index 50e5e8a4b..fc68326cf 100644
--- a/buildconfig/BuildConfig.cpp.in
+++ b/buildconfig/BuildConfig.cpp.in
@@ -42,6 +42,7 @@ Config::Config()
{
// Name and copyright
LAUNCHER_NAME = "@Launcher_Name@";
+ LAUNCHER_APP_BINARY_NAME = "@Launcher_APP_BINARY_NAME@"'
LAUNCHER_DISPLAYNAME = "@Launcher_DisplayName@";
LAUNCHER_COPYRIGHT = "@Launcher_Copyright@";
LAUNCHER_DOMAIN = "@Launcher_Domain@";
diff --git a/buildconfig/BuildConfig.h b/buildconfig/BuildConfig.h
index ef384ed20..13ccdaa18 100644
--- a/buildconfig/BuildConfig.h
+++ b/buildconfig/BuildConfig.h
@@ -44,6 +44,7 @@ class Config {
public:
Config();
QString LAUNCHER_NAME;
+ QString LAUNCHER_APP_BINARY_NAME;
QString LAUNCHER_DISPLAYNAME;
QString LAUNCHER_COPYRIGHT;
QString LAUNCHER_DOMAIN;
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index babf824aa..97f757f7c 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -1571,7 +1571,7 @@ QString Application::getJarPath(QString jarFile)
{
QStringList potentialPaths = {
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD)
- FS::PathCombine(m_rootPath, "share/" + BuildConfig.LAUNCHER_NAME),
+ FS::PathCombine(m_rootPath, "share/" + BuildConfig.LAUNCHER_APP_BINARY_NAME),
#endif
FS::PathCombine(m_rootPath, "jars"),
FS::PathCombine(applicationDirPath(), "jars")
From 2592c690213506c3cdfbc441c20f13ef7cf3eb23 Mon Sep 17 00:00:00 2001
From: seth
Date: Fri, 21 Oct 2022 21:37:31 -0400
Subject: [PATCH 13/72] semicolon fail
i was off by one key :(
Signed-off-by: seth
---
buildconfig/BuildConfig.cpp.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/buildconfig/BuildConfig.cpp.in b/buildconfig/BuildConfig.cpp.in
index fc68326cf..b8fa51339 100644
--- a/buildconfig/BuildConfig.cpp.in
+++ b/buildconfig/BuildConfig.cpp.in
@@ -42,7 +42,7 @@ Config::Config()
{
// Name and copyright
LAUNCHER_NAME = "@Launcher_Name@";
- LAUNCHER_APP_BINARY_NAME = "@Launcher_APP_BINARY_NAME@"'
+ LAUNCHER_APP_BINARY_NAME = "@Launcher_APP_BINARY_NAME@";
LAUNCHER_DISPLAYNAME = "@Launcher_DisplayName@";
LAUNCHER_COPYRIGHT = "@Launcher_Copyright@";
LAUNCHER_DOMAIN = "@Launcher_Domain@";
From 56ae4e5b6ad984d4c9569cb024d807bd695555a6 Mon Sep 17 00:00:00 2001
From: Bensuperpc
Date: Sat, 22 Oct 2022 13:04:48 +0200
Subject: [PATCH 14/72] Change old style cast to C++ cast
Change old style cast to C++ cast
Signed-off-by: Bensuperpc
---
launcher/GZip.cpp | 4 ++--
launcher/HoeDown.h | 2 +-
launcher/tasks/Task.cpp | 2 +-
libraries/LocalPeer/src/LocalPeer.cpp | 2 +-
libraries/katabasis/src/DeviceFlow.cpp | 2 +-
libraries/murmur2/src/MurmurHash2.cpp | 6 +++---
6 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/launcher/GZip.cpp b/launcher/GZip.cpp
index 067104cff..e36dc8a49 100644
--- a/launcher/GZip.cpp
+++ b/launcher/GZip.cpp
@@ -72,7 +72,7 @@ bool GZip::unzip(const QByteArray &compressedBytes, QByteArray &uncompressedByte
uncompLength *= 2;
}
- strm.next_out = (Bytef *)(uncompressedBytes.data() + strm.total_out);
+ strm.next_out = reinterpret_cast((uncompressedBytes.data() + strm.total_out));
strm.avail_out = uncompLength - strm.total_out;
// Inflate another chunk.
@@ -129,7 +129,7 @@ bool GZip::zip(const QByteArray &uncompressedBytes, QByteArray &compressedBytes)
{
compressedBytes.resize(compressedBytes.size() * 2);
}
- zs.next_out = (Bytef *) (compressedBytes.data() + offset);
+ zs.next_out = reinterpret_cast((compressedBytes.data() + offset));
temp = zs.avail_out = compressedBytes.size() - offset;
ret = deflate(&zs, Z_FINISH);
offset += temp - zs.avail_out;
diff --git a/launcher/HoeDown.h b/launcher/HoeDown.h
index b9e06ffbc..cb62de6cf 100644
--- a/launcher/HoeDown.h
+++ b/launcher/HoeDown.h
@@ -42,7 +42,7 @@ public:
}
void put(QByteArray input)
{
- hoedown_buffer_put(buf, (uint8_t *) input.data(), input.size());
+ hoedown_buffer_put(buf, reinterpret_cast(input.data()), input.size());
}
const uint8_t * data() const
{
diff --git a/launcher/tasks/Task.cpp b/launcher/tasks/Task.cpp
index b4babdd4f..9ea1bb26d 100644
--- a/launcher/tasks/Task.cpp
+++ b/launcher/tasks/Task.cpp
@@ -153,7 +153,7 @@ QString Task::describe()
auto name = objectName();
if(name.isEmpty())
{
- out << QString("0x%1").arg((quintptr)this, 0, 16);
+ out << QString("0x%1").arg(reinterpret_cast(this), 0, 16);
}
else
{
diff --git a/libraries/LocalPeer/src/LocalPeer.cpp b/libraries/LocalPeer/src/LocalPeer.cpp
index 3c3d8b4ce..b7149c408 100644
--- a/libraries/LocalPeer/src/LocalPeer.cpp
+++ b/libraries/LocalPeer/src/LocalPeer.cpp
@@ -210,7 +210,7 @@ void LocalPeer::receiveConnection()
return;
}
- while (socket->bytesAvailable() < (int)sizeof(quint32))
+ while (socket->bytesAvailable() < static_cast(sizeof(quint32)))
{
socket->waitForReadyRead();
}
diff --git a/libraries/katabasis/src/DeviceFlow.cpp b/libraries/katabasis/src/DeviceFlow.cpp
index ba1d121d0..f78fd6200 100644
--- a/libraries/katabasis/src/DeviceFlow.cpp
+++ b/libraries/katabasis/src/DeviceFlow.cpp
@@ -445,7 +445,7 @@ void DeviceFlow::onRefreshError(QNetworkReply::NetworkError error, QNetworkReply
if(refreshReply) {
refreshReply->deleteLater();
}
- qDebug() << "DeviceFlow::onRefreshFinished: Error" << (int)error << " - " << errorString;
+ qDebug() << "DeviceFlow::onRefreshFinished: Error" << static_cast(error) << " - " << errorString;
}
}
diff --git a/libraries/murmur2/src/MurmurHash2.cpp b/libraries/murmur2/src/MurmurHash2.cpp
index b625efb1c..c13608f07 100644
--- a/libraries/murmur2/src/MurmurHash2.cpp
+++ b/libraries/murmur2/src/MurmurHash2.cpp
@@ -55,12 +55,12 @@ uint32_t MurmurHash2(std::ifstream&& file_stream, std::size_t buffer_size, std::
// Mix 4 bytes at a time into the hash
if (index == 0)
- FourBytes_MurmurHash2((unsigned char*)&data, info);
+ FourBytes_MurmurHash2(reinterpret_cast(&data), info);
}
} while (!file_stream.eof());
// Do one last bit shuffle in the hash
- FourBytes_MurmurHash2((unsigned char*)&data, info);
+ FourBytes_MurmurHash2(reinterpret_cast(&data), info);
delete[] buffer;
@@ -72,7 +72,7 @@ void FourBytes_MurmurHash2(const unsigned char* data, IncrementalHashInfo& prev)
{
if (prev.len >= 4) {
// Not the final mix
- uint32_t k = *(uint32_t*)data;
+ uint32_t k = *reinterpret_cast(data);
k *= m;
k ^= k >> r;
From a6b13487f0e27c8bea1917720a0c5c1eb1eb206c Mon Sep 17 00:00:00 2001
From: Jamie Mansfield
Date: Thu, 20 Oct 2022 18:30:32 +0100
Subject: [PATCH 15/72] ATLauncher: Abort install if optional mods dialog is
closed
This matches the behaviour of ATLauncher.
---
launcher/modplatform/atlauncher/ATLPackInstallTask.cpp | 7 ++++++-
launcher/modplatform/atlauncher/ATLPackInstallTask.h | 2 +-
.../atlauncher/AtlUserInteractionSupportImpl.cpp | 7 +++++--
.../modplatform/atlauncher/AtlUserInteractionSupportImpl.h | 2 +-
4 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp b/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp
index a553eafd1..68d759436 100644
--- a/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp
+++ b/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp
@@ -736,7 +736,12 @@ void PackInstallTask::downloadMods()
QVector selectedMods;
if (!optionalMods.isEmpty()) {
setStatus(tr("Selecting optional mods..."));
- selectedMods = m_support->chooseOptionalMods(m_version, optionalMods);
+ auto mods = m_support->chooseOptionalMods(m_version, optionalMods);
+ if (!mods.has_value()) {
+ emitAborted();
+ return;
+ }
+ selectedMods = mods.value();
}
setStatus(tr("Downloading mods..."));
diff --git a/launcher/modplatform/atlauncher/ATLPackInstallTask.h b/launcher/modplatform/atlauncher/ATLPackInstallTask.h
index ed4436f07..78cd87fb1 100644
--- a/launcher/modplatform/atlauncher/ATLPackInstallTask.h
+++ b/launcher/modplatform/atlauncher/ATLPackInstallTask.h
@@ -62,7 +62,7 @@ public:
/**
* Requests a user interaction to select which optional mods should be installed.
*/
- virtual QVector chooseOptionalMods(PackVersion version, QVector mods) = 0;
+ virtual std::optional> chooseOptionalMods(PackVersion version, QVector mods) = 0;
/**
* Requests a user interaction to select a component version from a given version list
diff --git a/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.cpp b/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.cpp
index 031966850..c68e40bad 100644
--- a/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.cpp
+++ b/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.cpp
@@ -43,10 +43,13 @@ AtlUserInteractionSupportImpl::AtlUserInteractionSupportImpl(QWidget *parent) :
{
}
-QVector AtlUserInteractionSupportImpl::chooseOptionalMods(ATLauncher::PackVersion version, QVector mods)
+std::optional> AtlUserInteractionSupportImpl::chooseOptionalMods(ATLauncher::PackVersion version, QVector mods)
{
AtlOptionalModDialog optionalModDialog(m_parent, version, mods);
- optionalModDialog.exec();
+ auto result = optionalModDialog.exec();
+ if (result == QDialog::Rejected) {
+ return {};
+ }
return optionalModDialog.getResult();
}
diff --git a/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.h b/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.h
index aa22fc730..3b37c9bed 100644
--- a/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.h
+++ b/launcher/ui/pages/modplatform/atlauncher/AtlUserInteractionSupportImpl.h
@@ -47,7 +47,7 @@ public:
private:
QString chooseVersion(Meta::VersionListPtr vlist, QString minecraftVersion) override;
- QVector chooseOptionalMods(ATLauncher::PackVersion version, QVector mods) override;
+ std::optional> chooseOptionalMods(ATLauncher::PackVersion version, QVector mods) override;
void displayMessage(QString message) override;
private:
From a4f4f2891c8127c86365b1f36cf2982e1cfafa2c Mon Sep 17 00:00:00 2001
From: Jamie Mansfield
Date: Sat, 22 Oct 2022 12:56:40 +0100
Subject: [PATCH 16/72] DCO Remediation Commit for a6b13487
I, Jamie Mansfield , hereby add my
Signed-off-by to this commit: a6b13487f0e27c8bea1917720a0c5c1eb1eb206c
Signed-off-by: Jamie Mansfield
From 970e4b020ea14a1fbd5abe65517a3e26399280cb Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Sat, 22 Oct 2022 14:11:51 +0200
Subject: [PATCH 17/72] fix: fix segfault when resolving Flame resources
Signed-off-by: Sefa Eyeoglu
---
launcher/modplatform/flame/FileResolvingTask.cpp | 14 ++++++--------
launcher/modplatform/flame/FileResolvingTask.h | 3 ++-
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp
index 0b2431f7e..c50abb8f2 100644
--- a/launcher/modplatform/flame/FileResolvingTask.cpp
+++ b/launcher/modplatform/flame/FileResolvingTask.cpp
@@ -12,6 +12,8 @@ bool Flame::FileResolvingTask::abort()
bool aborted = true;
if (m_dljob)
aborted &= m_dljob->abort();
+ if (m_checkJob)
+ aborted &= m_checkJob->abort();
return aborted ? Task::abort() : false;
}
@@ -40,7 +42,7 @@ void Flame::FileResolvingTask::netJobFinished()
setProgress(1, 3);
int index = 0;
// job to check modrinth for blocked projects
- auto job = new NetJob("Modrinth check", m_network);
+ m_checkJob = new NetJob("Modrinth check", m_network);
blockedProjects = QMap();
auto doc = Json::requireDocument(*result);
auto array = Json::requireArray(doc.object()["data"]);
@@ -60,19 +62,15 @@ void Flame::FileResolvingTask::netJobFinished()
out.resolved = true;
});
- job->addNetAction(dl);
+ m_checkJob->addNetAction(dl);
blockedProjects.insert(&out, output);
}
}
index++;
}
- connect(job, &NetJob::finished, this,
- [this, &job] {
- modrinthCheckFinished();
- job->deleteLater();
- });
+ connect(m_checkJob.get(), &NetJob::finished, this, &Flame::FileResolvingTask::modrinthCheckFinished);
- job->start();
+ m_checkJob->start();
}
void Flame::FileResolvingTask::modrinthCheckFinished() {
diff --git a/launcher/modplatform/flame/FileResolvingTask.h b/launcher/modplatform/flame/FileResolvingTask.h
index f71b87ceb..8fc17ea91 100644
--- a/launcher/modplatform/flame/FileResolvingTask.h
+++ b/launcher/modplatform/flame/FileResolvingTask.h
@@ -30,8 +30,9 @@ protected slots:
private: /* data */
shared_qobject_ptr m_network;
Flame::Manifest m_toProcess;
- std::shared_ptr result;
+ std::shared_ptr result;
NetJob::Ptr m_dljob;
+ NetJob::Ptr m_checkJob;
void modrinthCheckFinished();
From 8b3093e7580c01e43d80803b8b931445f9438bc8 Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Sat, 22 Oct 2022 14:57:03 +0200
Subject: [PATCH 18/72] chore: add PR template
Signed-off-by: Sefa Eyeoglu
---
.github/pull_request_template.md | 9 +++++++++
1 file changed, 9 insertions(+)
create mode 100644 .github/pull_request_template.md
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 000000000..41f0604e4
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,9 @@
+
From 1dad35ca760662b9fc7c22cc0799403f75780bb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tobias=20M=C3=B6ritz?=
Date: Sat, 22 Oct 2022 15:00:52 +0200
Subject: [PATCH 19/72] update macos plist contents (fixes #132)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Tobias Möritz
---
CMakeLists.txt | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 131d3e53c..09f62bb3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -211,19 +211,19 @@ if(NOT (UNIX AND APPLE))
endif()
if(UNIX AND APPLE)
- set(BINARY_DEST_DIR "${Launcher_Name}.app/Contents/MacOS")
- set(LIBRARY_DEST_DIR "${Launcher_Name}.app/Contents/MacOS")
- set(PLUGIN_DEST_DIR "${Launcher_Name}.app/Contents/MacOS")
- set(FRAMEWORK_DEST_DIR "${Launcher_Name}.app/Contents/Frameworks")
- set(RESOURCES_DEST_DIR "${Launcher_Name}.app/Contents/Resources")
- set(JARS_DEST_DIR "${Launcher_Name}.app/Contents/MacOS/jars")
+ set(BINARY_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS")
+ set(LIBRARY_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS")
+ set(PLUGIN_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS")
+ set(FRAMEWORK_DEST_DIR "${Launcher_DisplayName}.app/Contents/Frameworks")
+ set(RESOURCES_DEST_DIR "${Launcher_DisplayName}.app/Contents/Resources")
+ set(JARS_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS/jars")
# Apps to bundle
- set(APPS "\${CMAKE_INSTALL_PREFIX}/${Launcher_Name}.app")
+ set(APPS "\${CMAKE_INSTALL_PREFIX}/${Launcher_DisplayName}.app")
# Mac bundle settings
- set(MACOSX_BUNDLE_BUNDLE_NAME "${Launcher_Name}")
- set(MACOSX_BUNDLE_INFO_STRING "${Launcher_Name}: A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once.")
+ set(MACOSX_BUNDLE_BUNDLE_NAME "${Launcher_DisplayName}")
+ set(MACOSX_BUNDLE_INFO_STRING "${Launcher_DisplayName}: A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once.")
set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.prismlauncher.${Launcher_Name}")
set(MACOSX_BUNDLE_BUNDLE_VERSION "${Launcher_VERSION_NAME}")
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${Launcher_VERSION_NAME}")
From 500a7eceabd292a7ddef5a5e2cec0fd26d66cef6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tobias=20M=C3=B6ritz?=
Date: Sat, 22 Oct 2022 15:10:32 +0200
Subject: [PATCH 20/72] update macOS build process to work with new .app
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Tobias Möritz
---
.github/workflows/build.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b6400791d..f67ba4c7e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -249,8 +249,8 @@ jobs:
cmake --install ${{ env.BUILD_DIR }}
cd ${{ env.INSTALL_DIR }}
- chmod +x "PrismLauncher.app/Contents/MacOS/prismlauncher"
- sudo codesign --sign - --deep --force --entitlements "../program_info/App.entitlements" --options runtime "PrismLauncher.app/Contents/MacOS/prismlauncher"
+ chmod +x "Prism Launcher.app/Contents/MacOS/prismlauncher"
+ sudo codesign --sign - --deep --force --entitlements "../program_info/App.entitlements" --options runtime "Prism Launcher.app/Contents/MacOS/prismlauncher"
tar -czf ../PrismLauncher.tar.gz *
- name: Make Sparkle signature (macOS)
From 0e17eee0960edd67a60f86c704a4c23237463caf Mon Sep 17 00:00:00 2001
From: Jamie Mansfield
Date: Sat, 22 Oct 2022 15:22:30 +0100
Subject: [PATCH 21/72] ATLauncher: Fix pack installation always aborting
I made a mistake during when cherry picking a previous commit, this
applies the change - and fixes installing ATLauncher packs.
---
.../ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp b/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp
index 004fdc57a..9138dcbbb 100644
--- a/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp
+++ b/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp
@@ -331,7 +331,7 @@ AtlOptionalModDialog::AtlOptionalModDialog(QWidget* parent, ATLauncher::PackVers
connect(ui->clearAllButton, &QPushButton::clicked,
listModel, &AtlOptionalModListModel::clearAll);
connect(ui->installButton, &QPushButton::clicked,
- this, &QDialog::close);
+ this, &QDialog::accept);
}
AtlOptionalModDialog::~AtlOptionalModDialog() {
From 1471eddc7e9a5383218daf0fb271987d81e7096b Mon Sep 17 00:00:00 2001
From: AliceDTRH <57547425+AliceDTRH@users.noreply.github.com>
Date: Sat, 22 Oct 2022 16:40:31 +0200
Subject: [PATCH 22/72] Deduplicates java installs before passing it on
Signed-off-by: AliceDTRH <57547425+AliceDTRH@users.noreply.github.com>
---
launcher/java/JavaUtils.cpp | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp
index 040fe8210..81b3a0b2c 100644
--- a/launcher/java/JavaUtils.cpp
+++ b/launcher/java/JavaUtils.cpp
@@ -379,7 +379,9 @@ QList JavaUtils::FindJavaPaths()
}
}
- return addJavasFromEnv(candidates);
+ javas = addJavasFromEnv(javas);
+ javas.removeDuplicates();
+ return javas;
}
#elif defined(Q_OS_MAC)
@@ -402,7 +404,9 @@ QList JavaUtils::FindJavaPaths()
javas.append(systemLibraryJVMDir.absolutePath() + "/" + java + "/Contents/Home/bin/java");
javas.append(systemLibraryJVMDir.absolutePath() + "/" + java + "/Contents/Commands/java");
}
- return addJavasFromEnv(javas);
+ javas = addJavasFromEnv(javas);
+ javas.removeDuplicates();
+ return javas;
}
#elif defined(Q_OS_LINUX)
@@ -448,7 +452,9 @@ QList JavaUtils::FindJavaPaths()
scanJavaDir("/opt/jdks");
// flatpak
scanJavaDir("/app/jdk");
- return addJavasFromEnv(javas);
+ javas = addJavasFromEnv(javas);
+ javas.removeDuplicates();
+ return javas;
}
#else
QList JavaUtils::FindJavaPaths()
From a6e65dfc7a7e8080297b59ecf322b788d1c9bad2 Mon Sep 17 00:00:00 2001
From: he3als <65787561+he3als@users.noreply.github.com>
Date: Sat, 22 Oct 2022 15:40:39 +0100
Subject: [PATCH 23/72] Add new flat white icons
---
launcher/resources/flat_white/scalable/delete.svg | 5 +++++
launcher/resources/flat_white/scalable/export.svg | 5 +++++
launcher/resources/flat_white/scalable/rename.svg | 4 ++++
launcher/resources/flat_white/scalable/tag.svg | 4 ++++
4 files changed, 18 insertions(+)
create mode 100644 launcher/resources/flat_white/scalable/delete.svg
create mode 100644 launcher/resources/flat_white/scalable/export.svg
create mode 100644 launcher/resources/flat_white/scalable/rename.svg
create mode 100644 launcher/resources/flat_white/scalable/tag.svg
diff --git a/launcher/resources/flat_white/scalable/delete.svg b/launcher/resources/flat_white/scalable/delete.svg
new file mode 100644
index 000000000..4cf7206e8
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/delete.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/export.svg b/launcher/resources/flat_white/scalable/export.svg
new file mode 100644
index 000000000..a28bb2540
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/export.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/rename.svg b/launcher/resources/flat_white/scalable/rename.svg
new file mode 100644
index 000000000..f2067c16b
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/rename.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/tag.svg b/launcher/resources/flat_white/scalable/tag.svg
new file mode 100644
index 000000000..2473126f6
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/tag.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
From 99e1c13e80d12764f57a993661656d9ed7de27bb Mon Sep 17 00:00:00 2001
From: he3als <65787561+he3als@users.noreply.github.com>
Date: Sat, 22 Oct 2022 15:50:06 +0100
Subject: [PATCH 24/72] fix: add flat_white to code
---
launcher/CMakeLists.txt | 1 +
launcher/main.cpp | 1 +
launcher/resources/flat_white/index.theme | 2 +-
launcher/ui/pages/global/LauncherPage.cpp | 13 ++++++++++---
launcher/ui/pages/global/LauncherPage.ui | 5 +++++
5 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 79ac49c76..0dae47df8 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -602,6 +602,7 @@ SET(LAUNCHER_SOURCES
resources/OSX/OSX.qrc
resources/iOS/iOS.qrc
resources/flat/flat.qrc
+ resources/flat_white/flat_white.qrc
resources/documents/documents.qrc
../${Launcher_Branding_LogoQRC}
diff --git a/launcher/main.cpp b/launcher/main.cpp
index c6a7614c4..e2116f384 100644
--- a/launcher/main.cpp
+++ b/launcher/main.cpp
@@ -84,6 +84,7 @@ int main(int argc, char *argv[])
Q_INIT_RESOURCE(OSX);
Q_INIT_RESOURCE(iOS);
Q_INIT_RESOURCE(flat);
+ Q_INIT_RESOURCE(flat_white);
return app.exec();
}
case Application::Failed:
diff --git a/launcher/resources/flat_white/index.theme b/launcher/resources/flat_white/index.theme
index a0b3ba6f4..0292509ff 100644
--- a/launcher/resources/flat_white/index.theme
+++ b/launcher/resources/flat_white/index.theme
@@ -1,5 +1,5 @@
[Icon Theme]
-Name=White Flat
+Name=Flat (White)
Comment=White version of the flat icons (for dark mode)
Inherits=multimc
Directories=scalable
diff --git a/launcher/ui/pages/global/LauncherPage.cpp b/launcher/ui/pages/global/LauncherPage.cpp
index b8431e8c4..536ab22e1 100644
--- a/launcher/ui/pages/global/LauncherPage.cpp
+++ b/launcher/ui/pages/global/LauncherPage.cpp
@@ -310,9 +310,12 @@ void LauncherPage::applySettings()
s->set("IconTheme", "flat");
break;
case 7:
- s->set("IconTheme", "multimc");
+ s->set("IconTheme", "flat_white");
break;
case 8:
+ s->set("IconTheme", "multimc");
+ break;
+ case 9:
s->set("IconTheme", "custom");
break;
}
@@ -408,14 +411,18 @@ void LauncherPage::loadSettings()
{
ui->themeComboBox->setCurrentIndex(6);
}
- else if (theme == "multimc")
+ else if (theme == "flat_white")
{
ui->themeComboBox->setCurrentIndex(7);
}
- else if (theme == "custom")
+ else if (theme == "multimc")
{
ui->themeComboBox->setCurrentIndex(8);
}
+ else if (theme == "custom")
+ {
+ ui->themeComboBox->setCurrentIndex(9);
+ }
{
auto currentTheme = s->get("ApplicationTheme").toString();
diff --git a/launcher/ui/pages/global/LauncherPage.ui b/launcher/ui/pages/global/LauncherPage.ui
index 0d14f147f..76a25f2ed 100644
--- a/launcher/ui/pages/global/LauncherPage.ui
+++ b/launcher/ui/pages/global/LauncherPage.ui
@@ -300,6 +300,11 @@
Flat
+ -
+
+ Flat (White)
+
+
-
Legacy
From 46fe7e77b3285a77ee71df5f055b927b777ca112 Mon Sep 17 00:00:00 2001
From: he3als <65787561+he3als@users.noreply.github.com>
Date: Sat, 22 Oct 2022 16:14:50 +0100
Subject: [PATCH 25/72] DCO Remediation Commit for he3als
<65787561+he3als@users.noreply.github.com>
I, he3als <65787561+he3als@users.noreply.github.com>, hereby add my Signed-off-by to this commit: d87f743a2bd2fac761b94de77ed7255d7a983f03
I, he3als <65787561+he3als@users.noreply.github.com>, hereby add my Signed-off-by to this commit: 92dfd659f1a3e11accdbf0ebbdc7cb91f74d9a21
I, he3als <65787561+he3als@users.noreply.github.com>, hereby add my Signed-off-by to this commit: a6e65dfc7a7e8080297b59ecf322b788d1c9bad2
I, he3als <65787561+he3als@users.noreply.github.com>, hereby add my Signed-off-by to this commit: 99e1c13e80d12764f57a993661656d9ed7de27bb
Signed-off-by: he3als <65787561+he3als@users.noreply.github.com>
---
launcher/resources/flat_white/index.theme | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/resources/flat_white/index.theme b/launcher/resources/flat_white/index.theme
index 0292509ff..54dd0e102 100644
--- a/launcher/resources/flat_white/index.theme
+++ b/launcher/resources/flat_white/index.theme
@@ -1,6 +1,6 @@
[Icon Theme]
Name=Flat (White)
-Comment=White version of the flat icons (for dark mode)
+Comment=White version of the flat icons (dark mode)
Inherits=multimc
Directories=scalable
From b2789fef0fd91b6088bc8ec5ea17ea3b59810c96 Mon Sep 17 00:00:00 2001
From: AliceDTRH <57547425+AliceDTRH@users.noreply.github.com>
Date: Sat, 22 Oct 2022 17:19:34 +0200
Subject: [PATCH 26/72] Use correct variable for Windows
Signed-off-by: AliceDTRH <57547425+AliceDTRH@users.noreply.github.com>
---
launcher/java/JavaUtils.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp
index 81b3a0b2c..6c0c60cd3 100644
--- a/launcher/java/JavaUtils.cpp
+++ b/launcher/java/JavaUtils.cpp
@@ -379,9 +379,9 @@ QList JavaUtils::FindJavaPaths()
}
}
- javas = addJavasFromEnv(javas);
- javas.removeDuplicates();
- return javas;
+ candidates = addJavasFromEnv(candidates);
+ candidates.removeDuplicates();
+ return candidates;
}
#elif defined(Q_OS_MAC)
From 01db80d19a82ada1f6e37e3fb3ef45143156302b Mon Sep 17 00:00:00 2001
From: jn64 <23169302+jn64@users.noreply.github.com>
Date: Sun, 23 Oct 2022 03:35:23 +0800
Subject: [PATCH 27/72] Fix version labels width
Make labels fit to the contents, so Ibeam cursor doesn't appear
over empty space. Should have been done with 90025ed.
Signed-off-by: jn64 <23169302+jn64@users.noreply.github.com>
---
launcher/ui/dialogs/AboutDialog.ui | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/launcher/ui/dialogs/AboutDialog.ui b/launcher/ui/dialogs/AboutDialog.ui
index e0429321e..4a9eef08f 100644
--- a/launcher/ui/dialogs/AboutDialog.ui
+++ b/launcher/ui/dialogs/AboutDialog.ui
@@ -87,14 +87,11 @@
- -
+
-
IBeamCursor
-
- Qt::AlignCenter
-
Qt::TextSelectableByMouse
@@ -167,7 +164,7 @@
- -
+
-
IBeamCursor
@@ -183,7 +180,7 @@
- -
+
-
IBeamCursor
@@ -199,7 +196,7 @@
- -
+
-
IBeamCursor
@@ -215,7 +212,7 @@
- -
+
-
IBeamCursor
From 4777a4572267a604dc4fa8e1cd1f4bf2fc068929 Mon Sep 17 00:00:00 2001
From: he3als <65787561+he3als@users.noreply.github.com>
Date: Sun, 23 Oct 2022 14:32:35 +0100
Subject: [PATCH 28/72] Fix new flat white icons
Signed-off-by: he3als <65787561+he3als@users.noreply.github.com>
---
launcher/resources/flat_white/flat_white.qrc | 6 +++++-
launcher/resources/flat_white/scalable/delete.svg | 2 +-
launcher/resources/flat_white/scalable/tag.svg | 2 +-
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc
index feda4762e..4243760b4 100644
--- a/launcher/resources/flat_white/flat_white.qrc
+++ b/launcher/resources/flat_white/flat_white.qrc
@@ -41,6 +41,10 @@
scalable/status-running.svg
scalable/status-yellow.svg
scalable/viewfolder.svg
- scalable/worlds.svg
+ scalable/worlds.svg
+ scalable/delete.svg
+ scalable/export.svg
+ scalable/rename.svg
+ scalable/tag.svg
diff --git a/launcher/resources/flat_white/scalable/delete.svg b/launcher/resources/flat_white/scalable/delete.svg
index 4cf7206e8..3365a96f8 100644
--- a/launcher/resources/flat_white/scalable/delete.svg
+++ b/launcher/resources/flat_white/scalable/delete.svg
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/launcher/resources/flat_white/scalable/tag.svg b/launcher/resources/flat_white/scalable/tag.svg
index 2473126f6..f91fb0b42 100644
--- a/launcher/resources/flat_white/scalable/tag.svg
+++ b/launcher/resources/flat_white/scalable/tag.svg
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
From 0aac85dda145603434e64bf04f39823f44509605 Mon Sep 17 00:00:00 2001
From: he3als <65787561+he3als@users.noreply.github.com>
Date: Sun, 23 Oct 2022 14:35:33 +0100
Subject: [PATCH 29/72] Replace tab with spaces in flat_white.qrc
Signed-off-by: he3als <65787561+he3als@users.noreply.github.com>
---
launcher/resources/flat_white/flat_white.qrc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc
index 4243760b4..9df690600 100644
--- a/launcher/resources/flat_white/flat_white.qrc
+++ b/launcher/resources/flat_white/flat_white.qrc
@@ -42,7 +42,7 @@
scalable/status-yellow.svg
scalable/viewfolder.svg
scalable/worlds.svg
- scalable/delete.svg
+ scalable/delete.svg
scalable/export.svg
scalable/rename.svg
scalable/tag.svg
From d5109f024b7bde5862a60b7359d815dc3d138663 Mon Sep 17 00:00:00 2001
From: Trisave <42098407+Protrikk@users.noreply.github.com>
Date: Sun, 23 Oct 2022 20:32:04 +0200
Subject: [PATCH 30/72] Better dark theme selection contrast
Tweak background of the selection background in order to make text more readable
Signed-off-by: Trisave <42098407+Protrikk@users.noreply.github.com>
---
launcher/ui/themes/DarkTheme.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/ui/themes/DarkTheme.cpp b/launcher/ui/themes/DarkTheme.cpp
index 07a2efd2d..48231b53e 100644
--- a/launcher/ui/themes/DarkTheme.cpp
+++ b/launcher/ui/themes/DarkTheme.cpp
@@ -31,7 +31,7 @@ QPalette DarkTheme::colorScheme()
darkPalette.setColor(QPalette::ButtonText, Qt::white);
darkPalette.setColor(QPalette::BrightText, Qt::red);
darkPalette.setColor(QPalette::Link, QColor(47,163,198));
- darkPalette.setColor(QPalette::Highlight, QColor(145,205,92));
+ darkPalette.setColor(QPalette::Highlight, QColor(150,219,89));
darkPalette.setColor(QPalette::HighlightedText, Qt::black);
darkPalette.setColor(QPalette::PlaceholderText, Qt::darkGray);
return fadeInactive(darkPalette, fadeAmount(), fadeColor());
From 43bf601f120c9b1eac1c73feb31c67df54955b6d Mon Sep 17 00:00:00 2001
From: leo78913
Date: Sun, 23 Oct 2022 11:34:49 -0300
Subject: [PATCH 31/72] add icons to the instance toolbar
Signed-off-by: leo78913
---
launcher/resources/OSX/OSX.qrc | 1 +
launcher/resources/OSX/scalable/launch.svg | 33 +++++++++++++++++++
launcher/resources/flat/flat.qrc | 1 +
launcher/resources/flat/scalable/launch.svg | 16 +++++++++
launcher/resources/iOS/iOS.qrc | 1 +
launcher/resources/iOS/scalable/launch.svg | 17 ++++++++++
launcher/resources/pe_blue/pe_blue.qrc | 1 +
.../resources/pe_blue/scalable/launch.svg | 20 +++++++++++
launcher/resources/pe_colored/pe_colored.qrc | 1 +
.../resources/pe_colored/scalable/launch.svg | 23 +++++++++++++
launcher/resources/pe_dark/pe_dark.qrc | 1 +
.../resources/pe_dark/scalable/launch.svg | 17 ++++++++++
launcher/resources/pe_light/pe_light.qrc | 1 +
.../resources/pe_light/scalable/launch.svg | 17 ++++++++++
launcher/ui/MainWindow.cpp | 17 ++++++++--
15 files changed, 165 insertions(+), 2 deletions(-)
create mode 100644 launcher/resources/OSX/scalable/launch.svg
create mode 100644 launcher/resources/flat/scalable/launch.svg
create mode 100644 launcher/resources/iOS/scalable/launch.svg
create mode 100644 launcher/resources/pe_blue/scalable/launch.svg
create mode 100644 launcher/resources/pe_colored/scalable/launch.svg
create mode 100644 launcher/resources/pe_dark/scalable/launch.svg
create mode 100644 launcher/resources/pe_light/scalable/launch.svg
diff --git a/launcher/resources/OSX/OSX.qrc b/launcher/resources/OSX/OSX.qrc
index 55be28b5f..19fe312b6 100644
--- a/launcher/resources/OSX/OSX.qrc
+++ b/launcher/resources/OSX/OSX.qrc
@@ -38,5 +38,6 @@
scalable/tag.svg
scalable/export.svg
scalable/rename.svg
+ scalable/launch.svg
diff --git a/launcher/resources/OSX/scalable/launch.svg b/launcher/resources/OSX/scalable/launch.svg
new file mode 100644
index 000000000..fb1891625
--- /dev/null
+++ b/launcher/resources/OSX/scalable/launch.svg
@@ -0,0 +1,33 @@
+
+
+
+
diff --git a/launcher/resources/flat/flat.qrc b/launcher/resources/flat/flat.qrc
index 7f59da7b8..508e0a9f5 100644
--- a/launcher/resources/flat/flat.qrc
+++ b/launcher/resources/flat/flat.qrc
@@ -46,5 +46,6 @@
scalable/tag.svg
scalable/export.svg
scalable/rename.svg
+ scalable/launch.svg
diff --git a/launcher/resources/flat/scalable/launch.svg b/launcher/resources/flat/scalable/launch.svg
new file mode 100644
index 000000000..b462f2e45
--- /dev/null
+++ b/launcher/resources/flat/scalable/launch.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/launcher/resources/iOS/iOS.qrc b/launcher/resources/iOS/iOS.qrc
index 1d7520420..aa08d811a 100644
--- a/launcher/resources/iOS/iOS.qrc
+++ b/launcher/resources/iOS/iOS.qrc
@@ -38,5 +38,6 @@
scalable/tag.svg
scalable/export.svg
scalable/rename.svg
+ scalable/launch.svg
diff --git a/launcher/resources/iOS/scalable/launch.svg b/launcher/resources/iOS/scalable/launch.svg
new file mode 100644
index 000000000..c16d5c37c
--- /dev/null
+++ b/launcher/resources/iOS/scalable/launch.svg
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/launcher/resources/pe_blue/pe_blue.qrc b/launcher/resources/pe_blue/pe_blue.qrc
index 3d3857133..3121ffe6b 100644
--- a/launcher/resources/pe_blue/pe_blue.qrc
+++ b/launcher/resources/pe_blue/pe_blue.qrc
@@ -38,5 +38,6 @@
scalable/tag.svg
scalable/export.svg
scalable/rename.svg
+ scalable/launch.svg
diff --git a/launcher/resources/pe_blue/scalable/launch.svg b/launcher/resources/pe_blue/scalable/launch.svg
new file mode 100644
index 000000000..b3bd124f4
--- /dev/null
+++ b/launcher/resources/pe_blue/scalable/launch.svg
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/launcher/resources/pe_colored/pe_colored.qrc b/launcher/resources/pe_colored/pe_colored.qrc
index fa6cd9cd4..ce5ad8e21 100644
--- a/launcher/resources/pe_colored/pe_colored.qrc
+++ b/launcher/resources/pe_colored/pe_colored.qrc
@@ -38,5 +38,6 @@
scalable/tag.svg
scalable/export.svg
scalable/rename.svg
+ scalable/launch.svg
diff --git a/launcher/resources/pe_colored/scalable/launch.svg b/launcher/resources/pe_colored/scalable/launch.svg
new file mode 100644
index 000000000..76713387d
--- /dev/null
+++ b/launcher/resources/pe_colored/scalable/launch.svg
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/launcher/resources/pe_dark/pe_dark.qrc b/launcher/resources/pe_dark/pe_dark.qrc
index 6b9c7cb60..156d8f8b4 100644
--- a/launcher/resources/pe_dark/pe_dark.qrc
+++ b/launcher/resources/pe_dark/pe_dark.qrc
@@ -38,5 +38,6 @@
scalable/tag.svg
scalable/export.svg
scalable/rename.svg
+ scalable/launch.svg
diff --git a/launcher/resources/pe_dark/scalable/launch.svg b/launcher/resources/pe_dark/scalable/launch.svg
new file mode 100644
index 000000000..3746e2dd6
--- /dev/null
+++ b/launcher/resources/pe_dark/scalable/launch.svg
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/launcher/resources/pe_light/pe_light.qrc b/launcher/resources/pe_light/pe_light.qrc
index 963bfcdeb..d8e4a1bd7 100644
--- a/launcher/resources/pe_light/pe_light.qrc
+++ b/launcher/resources/pe_light/pe_light.qrc
@@ -38,5 +38,6 @@
scalable/tag.svg
scalable/export.svg
scalable/rename.svg
+ scalable/launch.svg
diff --git a/launcher/resources/pe_light/scalable/launch.svg b/launcher/resources/pe_light/scalable/launch.svg
new file mode 100644
index 000000000..6c27b7e0c
--- /dev/null
+++ b/launcher/resources/pe_light/scalable/launch.svg
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp
index 97152a485..559ebc316 100644
--- a/launcher/ui/MainWindow.cpp
+++ b/launcher/ui/MainWindow.cpp
@@ -656,6 +656,7 @@ public:
actionLaunchInstance->setObjectName(QStringLiteral("actionLaunchInstance"));
actionLaunchInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Launch"));
actionLaunchInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Launch the selected instance."));
+ actionLaunchInstance->setIcon(APPLICATION->getThemedIcon("launch"));
all_actions.append(&actionLaunchInstance);
actionLaunchInstanceOffline = TranslatedAction(MainWindow);
@@ -741,7 +742,9 @@ public:
// See https://github.com/PolyMC/PolyMC/issues/493
connect(instanceToolBar, &QToolBar::orientationChanged, [=](Qt::Orientation){ instanceToolBar->setOrientation(Qt::Vertical); });
instanceToolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
- instanceToolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
+ instanceToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ instanceToolBar->setIconSize(QSize(16, 16));
+
instanceToolBar->setFloatable(false);
instanceToolBar->setWindowTitle(QT_TRANSLATE_NOOP("MainWindow", "Instance Toolbar"));
@@ -761,8 +764,18 @@ public:
instanceToolBar->addAction(actionViewSelectedInstFolder);
instanceToolBar->addAction(actionExportInstance);
- instanceToolBar->addAction(actionDeleteInstance);
instanceToolBar->addAction(actionCopyInstance);
+ instanceToolBar->addAction(actionDeleteInstance);
+
+ QLayout * lay = instanceToolBar->layout();
+ for(int i = 0; i < lay->count(); i++)
+ {
+ QLayoutItem * item = lay->itemAt(i);
+ if (item->widget()->metaObject()->className() == QString("QToolButton"))
+ {
+ item->setAlignment(Qt::AlignLeft);
+ }
+ }
all_toolbars.append(&instanceToolBar);
MainWindow->addToolBar(Qt::RightToolBarArea, instanceToolBar);
From 6a474a01258d375228a0883b0b5c792049ef74ef Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Thu, 20 Oct 2022 14:00:11 +0200
Subject: [PATCH 32/72] fix: update icon generate script
Signed-off-by: Sefa Eyeoglu
---
launcher/resources/OSX/scalable/launcher.svg | 14 ++-
launcher/resources/flat/scalable/launcher.svg | 14 ++-
launcher/resources/iOS/scalable/launcher.svg | 14 ++-
.../resources/multimc/scalable/launcher.svg | 14 ++-
.../resources/pe_blue/scalable/launcher.svg | 14 ++-
.../pe_colored/scalable/launcher.svg | 14 ++-
.../resources/pe_dark/scalable/launcher.svg | 14 ++-
.../resources/pe_light/scalable/launcher.svg | 14 ++-
program_info/genicons.sh | 86 ++++++++++++------
program_info/prismlauncher.ico | Bin 102134 -> 372526 bytes
10 files changed, 132 insertions(+), 66 deletions(-)
diff --git a/launcher/resources/OSX/scalable/launcher.svg b/launcher/resources/OSX/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/OSX/scalable/launcher.svg
+++ b/launcher/resources/OSX/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/flat/scalable/launcher.svg b/launcher/resources/flat/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/flat/scalable/launcher.svg
+++ b/launcher/resources/flat/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/iOS/scalable/launcher.svg b/launcher/resources/iOS/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/iOS/scalable/launcher.svg
+++ b/launcher/resources/iOS/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/multimc/scalable/launcher.svg b/launcher/resources/multimc/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/multimc/scalable/launcher.svg
+++ b/launcher/resources/multimc/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/pe_blue/scalable/launcher.svg b/launcher/resources/pe_blue/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/pe_blue/scalable/launcher.svg
+++ b/launcher/resources/pe_blue/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/pe_colored/scalable/launcher.svg b/launcher/resources/pe_colored/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/pe_colored/scalable/launcher.svg
+++ b/launcher/resources/pe_colored/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/pe_dark/scalable/launcher.svg b/launcher/resources/pe_dark/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/pe_dark/scalable/launcher.svg
+++ b/launcher/resources/pe_dark/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/launcher/resources/pe_light/scalable/launcher.svg b/launcher/resources/pe_light/scalable/launcher.svg
index 69dd84b17..aeee84338 100644
--- a/launcher/resources/pe_light/scalable/launcher.svg
+++ b/launcher/resources/pe_light/scalable/launcher.svg
@@ -37,17 +37,21 @@
https://github.com/PrismLauncher/PrismLauncher
-
-
- CC BY-SA 4.0
-
-
Prism Launcher
+
+
+
+
+
+
+
+
+
diff --git a/program_info/genicons.sh b/program_info/genicons.sh
index bfe756d82..42592c4ee 100755
--- a/program_info/genicons.sh
+++ b/program_info/genicons.sh
@@ -1,39 +1,73 @@
-#/bin/bash
+#!/bin/bash
-# ICO
+svg2png() {
+ input_file="$1"
+ output_file="$2"
+ width="$3"
+ height="$4"
-inkscape -w 16 -h 16 -o prismlauncher_16.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 24 -h 24 -o prismlauncher_24.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 32 -h 32 -o prismlauncher_32.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 48 -h 48 -o prismlauncher_48.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 64 -h 64 -o prismlauncher_64.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 128 -h 128 -o prismlauncher_128.png org.prismlauncher.PrismLauncher.svg
+ inkscape -w "$width" -h "$height" -o "$output_file" "$input_file"
+}
-convert prismlauncher_128.png prismlauncher_64.png prismlauncher_48.png prismlauncher_32.png prismlauncher_24.png prismlauncher_16.png prismlauncher.ico
+sipsresize() {
+ input_file="$1"
+ output_file="$2"
+ width="$3"
+ height="$4"
-rm -f prismlauncher_*.png
+ sips -z "$width" "$height" "$input_file" --out "$output_file"
+}
-inkscape -w 1024 -h 1024 -o prismlauncher_1024.png org.prismlauncher.PrismLauncher.bigsur.svg
+if command -v "inkscape" && command -v "icotool"; then
+ # Windows ICO
+ d=$(mktemp -d)
-mkdir prismlauncher.iconset
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_16.png" 16 16
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_24.png" 24 24
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_32.png" 32 32
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_48.png" 48 48
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_64.png" 64 64
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_128.png" 128 128
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_256.png" 256 256
-sips -z 16 16 prismlauncher_1024.png --out prismlauncher.iconset/icon_16x16.png
-sips -z 32 32 prismlauncher_1024.png --out prismlauncher.iconset/icon_16x16@2x.png
-sips -z 32 32 prismlauncher_1024.png --out prismlauncher.iconset/icon_32x32.png
-sips -z 64 64 prismlauncher_1024.png --out prismlauncher.iconset/icon_32x32@2x.png
-sips -z 128 128 prismlauncher_1024.png --out prismlauncher.iconset/icon_128x128.png
-sips -z 256 256 prismlauncher_1024.png --out prismlauncher.iconset/icon_128x128@2x.png
-sips -z 256 256 prismlauncher_1024.png --out prismlauncher.iconset/icon_256x256.png
-sips -z 512 512 prismlauncher_1024.png --out prismlauncher.iconset/icon_256x256@2x.png
-sips -z 512 512 prismlauncher_1024.png --out prismlauncher.iconset/icon_512x512.png
-cp prismlauncher_1024.png prismlauncher.iconset/icon_512x512@2x.png
+ rm prismlauncher.ico && icotool -o prismlauncher.ico -c \
+ "$d/prismlauncher_256.png" \
+ "$d/prismlauncher_128.png" \
+ "$d/prismlauncher_64.png" \
+ "$d/prismlauncher_48.png" \
+ "$d/prismlauncher_32.png" \
+ "$d/prismlauncher_24.png" \
+ "$d/prismlauncher_16.png"
+else
+ echo "ERROR: Windows icons were NOT generated!" >&2
+ echo "ERROR: requires inkscape and icotool in PATH"
+fi
-iconutil -c icns prismlauncher.iconset
+if command -v "inkscape" && command -v "sips" && command -v "iconutil"; then
+ # macOS ICNS
+ d=$(mktemp -d)
-rm -f prismlauncher_*.png
-rm -rf prismlauncher.iconset
+ d="$d/prismlauncher.iconset"
+ mkdir -p "$d"
+
+ svg2png org.prismlauncher.PrismLauncher.bigsur.svg "$d/icon_512x512@2x.png" 1024 1024
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_16x16.png" 16 16
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_16x16@2.png" 32 32
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_32x32.png" 32 32
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_32x32@2.png" 64 64
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_128x128.png" 128 128
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_128x128@2.png" 256 256
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_256x256.png" 256 256
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_256x256@2.png" 512 512
+ iconutil -c icns "$d"
+else
+ echo "ERROR: macOS icons were NOT generated!" >&2
+ echo "ERROR: requires inkscape, sips and iconutil in PATH"
+fi
+
+# replace icon in themes
for dir in ../launcher/resources/*/scalable
do
- cp -v org.prismlauncher.PrismLauncher.svg $dir/launcher.svg
+ cp -v org.prismlauncher.PrismLauncher.svg "$dir/launcher.svg"
done
diff --git a/program_info/prismlauncher.ico b/program_info/prismlauncher.ico
index e4529f93807cd8f40c25820338e2821dc35105cf..2f0fa67ff6be7681f76aa8ccbdfedabcef766b72 100644
GIT binary patch
literal 372526
zcmZQzU}Rut00Bk@1qKZT7KSng28M$Cr
zU|@kzqvU7^jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQN>u0b{2CWea;B-yV;A_kQm}r6K2mQ3sEPz-R~%9Ri`Dq0FWZ{w_xLK68!jeV-fK
z`~Ek!_x;!7k^dixpY?j=&*}BZb6yo1%1pGuqY6huU^D~KkxO(pV;SKXf|j)HtMj^5Eu;stRbMS9m-~G?-y!h?{gGd&x7+jIvY>^
zhnEMv9{Fc`JoD1}LJK*uS~e;;8UmvsFepO6*fvPg#KEt@*xvUQdS1uICnoIMVG|=sO^uAGLHe
z1V(5GK*#a%_U-ZIdzc)h`5)FM0F4p!dgO=x2OTvtLgQrA+oK^s+Yo4AGP3gtH@5e^
z1k1ma($vcTuyUZsBmYvbXMT7?Ljx0S!(!C*(GVChA;4&4@8fH1?|Y8Y{En`l2KgV>
zH@MpCnIAX0j$p*3(NT|5KLlX;{w#XFr52xt`5#seTmh8>qwN9eCyr4Qhi?dg`uE26
zerKqa&vBVUhx`vI2R!pHkB$!v-}E}_GwOtZk%OOyvAr+N>U;EZfNuF8w#L{q|4g5I
zo(FY8Yt)p{5EvdI09~WI4?Tae@{jg;=GqUB*cp7l-uD+J`IcIG2TA^iwgvKk_ITt^
z?RF~>BQ7*YRgH$g&`
z4uIwiN9PI#X(}Ie7J3L6*!idqQ!^M)rPb#Gbh`kog_m
z?je}}A$`cQV|(B4Ln(g~a_g|m{~r1OC;DYQ
z*;DJ?y1BuZYhI)6-XQ#BcdbtxEz-oOnZrK>
zp!4`!hhn}a*3H8$|Idz02IYHHTX$OGBe(kCCnYgXNlaDHiWYmyh83NF@{sZ)UGF08^Eobm4VU~s!8hmsu1a4*c^@vnx5n$h?piNh
zvJ=dx#$gcxdTwsq(6;_hTzOR^-*Ftzbk8j0ij#Fhm^IsY$BjwLg16V(m?n+=*L*jeeTfs&|3IfFg~92^{2j3MW3
zejzq5j6`)qHUCfY&;Gxw$_JcBNf_@ZSN-?hH9ig7ay{7xeZn7gAcLu$zm>7Q@8yx0
zpGo!eP|g2qv%|^F%jD~;^}e~M&f9S`iw({YFm?&$hmP+Ji@mv|=4Eo!55@dHJtUp{
zJd9WmOs*OKK;wgZDg%WFXD%3-t}?Ro3o^F%eMU|m7|D8uV*cM;6i9B~rKY}Td#il{
zM`mstJiZ3qr(^?!FY-RAq?
zd78-jA6fnT-L>9Hqx*}gTMj|``92#*^Q`ZGYKFm3$^Ywe!;tgX;AdBR?-(5ypiUV8
z9ov6R&2&F%7Ni^*3i*Flc*@|^xy)_ttp78l58`zYH)p_vC|~wN2GJZ#3^i@;)dW
z27CSoo$0luWKhiakzWSYdapWM;VnphP8fMQp=SQwd^VG8c!R{I#hmn_)N%Jvi-M)#vZ>zDr@8}vnd)noDSUED7^MAij&i|bxoar@y
zd7IcW;_u#CpXODeq0FS^ijkojI>tA8E(aa*{ZPpNE7K#1%~wNB-NDhZLDVwM*xt|4
z*xvU!EM1P$w6FU?VLVvt|EYl#pXoKI%LLHa;GP;U57b;R@_3=4q0G>GwMN_fbgcJ5
zc^`xaYyRJuPpvb(sJ_;Zn&ryhJ+Q;)1IjDI6<^rj;3+c_
z$^a7wZyjTM-w|`i&R{NU23!7LoJ7Ou7UFX>wNyN
znv(E;>W1?FlQviVnYg)JZn%^I*5TC!*5OtEVc0Ub_`jKZ%xGJH4s8K5C;$H$1y%ny
zZr%mX@34Fiqd|Ee9bY_p=KtE3Isf~8i)mgC%!?UpXL`|p&A`U)i2pNJ6@l_S60Xh}
zF8SXoym~V%?<3O|0eSyToI^&-0UDG8HXfn>E9yJ`A2@g%Yre;q|6%39jf+?RZ=16G
z|KyMgnv?^5-g*DGmkr7@z3|r6)Eax-)*AGG-r^jjJYR)iZ>icaT=Ktlc-2$ne2>Bo
ztNL&5oAKYoadd2e8vPD?ukimJz0>}mI(-3ez9%OC!^(l%H*WpkIcv@TNx{?|BUqLa
zLzjF;t^7(Yb9UDI{a-dS<^SZ3m5BVl87c2W*bj$8{ad0@iN9|7%-%|DQN{j;MT3O8$qH19xuR`oCl5>i-i1%P4LSO!Cj7=N&$Srkq(b
zA?E+o^`-doJzTD5bHk9ohtx8x${i)2|E8`{qvZgR<$$GY5V)Ox-;8iJPmO
zhk6^pCcLtOl>84d=u4wyR!{4cI*`G4r}NwV@iCHWt@9N65qnB;N7
znW3qJraq=tn;w@r+nWOZFPxwGf6^xWc^#DBvEb67pZ}}p!SXc8bXeto3!k+A#t#0Y
z|JU_L|DV351Wuwk=S-a~S0RyRdvr
zDQy{4_}|1ee8jZ{yh4-y&t15Zs`(yP4xr~@YVc2PKlFcAQWHiwFu^3=hixM9;4
zNX{wyzjxnZnzZ$?l@HX+>-fyNdGXx;<8!Kr&Rc__UdQK#4Lyb=$IR5|QDxthghWwVwpdp+8!>e;>o$pc153Blb;g|J)DD5-0a0&X~)G_h@*|Qhv
zp7%jz04?%3K{M~(`F~-{{Qr9!gN96dU}uB>|0T22{!iY7cg-%<%Y}(ss?&yW{%=Id
zpE%m^)K+5^R{r1I8??{ZZ&0@flC#VI?>lgGK=M5(?}ISGyb9ePObd0luU`0nazW#u
zE(1V){MD1<{!d$9M)kZ+%vykno2sgZYW}wgubM{fyiJOER>8&pP2C3HT4Jw|#Q#fI
ztRK*P56b%>OpAO?s+rf0?HZJQf{k6_|7Vi8W|x>eO^TX{o2w=a+58_?wVIUtN-MRN
zfuMcHp#$C)uy79i-_kW1<@^m$9vnzaYF?$8`nz}jpIblu|K9q6KmT`IOVIxX3$g~J
zzQ-sVwp1<~s`=k4qUr#x@-)fjg2o00a4m6oV$T2VI}Z$sIv=^bp;>+=v)^#*;;H|~
zrWFlHpI{e!%`ScW_!xN}vi}!a{#5QBs`=kKyy_~+`IOdU1fa12I_@(Dox{;PY4-mM
z7p@Mvybme|23!6IyXW4$|Ce{K{J+1MetQH#`*NqP8<;*m{`_BkVaVqHu*#Q%F8@Qz
z7pox9KH~_Q_6d@*N(r971ImK~iNX1e%(|M^dhcAj`2YBvYMQnMHg|+ld(AGi-X>$N
z52fCR>wh+6^M82NkHMP%VeYaB$ff!|V<+DznyuHTc3DB|JWLJqFYjCT|3Djc*A7#-
zFPGYR9G`h#hhqMBNNC`I<*`9ehgJSJ_fDnCTH^SO;{S(_P_`$Z+IbwGdDO_C^f2S@
z&1?Tp%&VoiEdbh=yJA}6|0xvh%Z1m?`0_2)%cXDr@7vKJG}Q9HT~v)K
zEME;Z+A65w~i#*a2O$OXk^Ibj{=V%YkzJp_c!xB5Rz`^V3k|TjAJe
zZ0hL$f70~%L$c0CE-$E^FX?UGm3`|l)(pY!(xK(PT>SYJQg2gB&4jJhc0(=y+eB0c
z4#oVA%gt6HCGb0oKz;ocYc>t}ybme|=$&6_VIOGy@ZJWgb`C
z|E=l0_ZMv}pH^jzcS_6uix;nq=Kn#rX6WAkIXl~Fl>Y{}{jjMredy)?s#03z!GScl
zykqG1`9bwQ41?;<;et0FT|7MV|CZ{4p_c!x!m8>AGN01Q?kNj444b+iR0a%}ybton
zfwS9&Y5uRQ8iM)1gI0NPAkAIBb@1)s1Lb3KF(}^*7kuvO$>Ev*H&-_gwft`rRylDX
z^C_+D-hY_9d-ll9pS0FDT=G81AJ=YO9;W%fs%OaM|A^{Yw9116Wv)#`_5ZUpJd2;!
zc^#YipnNl2@V)zY|4-ghJsit`X+tglTZdOJ8K`_pD|_7&8;4cjA5cNM-ab(I
zlvehpR!$ks|ARdLuRJhg*yaC;o2xeux%^Lsdw*$_kI6N+q;>9S{vYJ|f5VZ5!!G|%
z+C22m0JILTIz(oCoCP!|ARdL?>M=780P<~eM7GPkEl8}So1Nt?&_FEn>)Bc
z<8T9oVdG}Qh2C{){cz0xhlX1Iw~44aNp3zHtor)rtR1cY2YLO!@9dW0nE#Irwft`t
zUUhb`=3{c*HErR>(fmKi^Z%i9JBDNaKRML$zjb)^1#<^{9kor2ynuFmo?+^3G^;=hlU;f`xb$`g^
z|FEiODGo$tYAg}+g-@ZEh^8e#pM`FO25@
zL7x9_-@P>)^Z&b{mjA88tG2U`TzT1&Bx@r>&)3p
zqxJtFumA7fyE7c?|F1(Z|Nka8pAA-h!|m+P;W+e
zfYJOv=-UZbuip6o^5v`l-@bkO|K!ONlrwY(d;TWmzTDfN{^#8OJghLo|NlcL|1&T!
zScg}Qw*N0(8+7Hs<;&OqKX~xy|KGoV|HHt)fB*h}`t<4lqeqX1MLCc=%<_KD?axE2
z{SV3iqvL;rEdSrWeeeH|A3tE(9)kvz32)!N9nxjM-TU{4RlN^w#|*{sztQ=>L6ZNk
zU%&PL!-tO;`5l+QuV26Zzj*OtNR|V4?mrlg`F|+R|BbHy8Q}bX<;wN{&z`-&mCXr?
zfBpLP|KrDxhg3Om>)!CI|Fds@{xoF9{-6#WUH?09eScUV|M%}d1oJo{1)#Bkj~_q&
zfB5j>kSGUk4$u03D6an<-TyNH_5ZC~cfn)&gz`11@_+vP`Tyq4n?YX&T)#Ig+y6su
z|BrRp=>A{O`Z{{yYu9f6fA{V^so9!j^*?|9{QvCPvq4)9T)qErIQIXaLz~q@hO!=x
z=YJeMJt*h%o<4p4|KC57vob{*zI^#ID8~k_+#8npf9Re65neTV{uhng|M%}d{Qvv+
zZ;J9UC7MBF1Ml9w`~TpvOf6^%b-?(x6KWJ>8
zlDtbzy`VDa_3PJzq6|1UEc5^8JJ4)3WGL(K(euBl-S-Er*?sfoEj6<)Rn7YT{rmr?
zPoEBGIdJ0M<6&3-XW#ie6wm)2z5jzs^*?An@A2cOC~J19nsKRY*yqom2W&0zk$X>u
zUH;Fx{rT#UsraD|wGJP>|BD*+|D8LaHM>8loI`1E9B3`^K#UFSyZ3b1<^SAUpD#kQ
z)sUe^@BgH1{ST;*|LN0b+GkW6+W=Zi{PN{Xy7dWm-g`Fe@_)|l&*z3r#)mp|^!{)1
z^8b}9H~znP@sh^5lK#fiYoGDvyTdR4=id5s3Yx8k3}q8hb#gGD#g%zA7hs{fxmcbTX%05qQmTC+>_3GOq#JUsXQ
z{m;4msc*<+e5gaM!m2vR&0~XE-}D#%Id_NO+&`%P
z&%XVo2%4>i3}qc&oimv8F}ZH@PHFjn@zS;bBW=wt8CjGrT0m=wLHmsF-hc4F`p$41
z`~Unu=ho+pA(Qc;4z-G?N+36n4Q73=rA`0$-M>hev^{DG@gZ>h=Fk7x$G#5F_W$iK
zG0cGLAk4bf#eM;^BkVU=!6VJ~4pLTxE|ErT7_lRnjyBZaw+;KX2;q
z{}~g1|Ib?fbcqfkG{Q0({w#*IAL)1_P_tR(7X@I|6n}n_y4SoKmO-jA0FjE?(NU^&}=niDC>x7
zlfjsuiFQ*&^?&!emjAH_rlI6}P~L~(q_Z>sFMV|M|F6H4-?K$HrH`sW4gt{BW~&eV
z{hv7zQtyNFJsLZ6#;^a`d%uDD&qKOBkbC>9;gHGrP>0$@)u%pM7%Zjtykq
z`k(~ORzrp|kE{|OOnI6Zx7a7wLHhV-P}};je2$L>jS1|2dHFw`ui+UE*_k9ioVfn)
zfBrPwbv}CDN9KdZ268S9y*@$O%}*jjCgVdL>X6XDK}?<-3~FqmtN;7-b^MP%KAq?~
zA6Hq>dwc8u55K;Wl%_`&6ApoIKmY%qvz_=lA35Knu&4a~pSk(_|C}2`ryOXw`kxJ&
zt%ek39bWZwFywE1Zg8t^{vWeQNO$g}{Y7|NfWHA+OFy
z$@@s-1DP{_{m(w|Z77Tjd}A1*U@+eS?3~;1KYRo6eSGBnO)PuDo$deM{v7&ecoUUL
zX`txi*Z=<)?4m-QkCgAx%Y)3tKmTW+9n@`sA$RvLthllXueye>?i~m@yM&tm0keDl
zCz8>}CpOp`^um!2QI_%
z(@>+W!>bMsL>|Xxr%hz_fA6l2|8d7C@8cuqZ(`YPH#h!&_WeDvSzyGfd;Q_x{|W18
zTj#^`J$k!f%CG-f+rIzLx%qi8^$Ye6wR{hAuXT9U8fDH9r&4Ze*MorG-$>KR>1PpP@}CQ
zs;1LBuOr*%kXipfY*qh&=X>Nb0K~4mvf}@xkB@L=g%KwXTEE-8WPs{?JmpE|(x3mc
z&kcB=VDeDQ_b~TbhgCHp=SO<6ZR2bH2Tbe6ShEYtdxHs2ytCu~o1Y_heDK2;$oL+<
zHGDYR>Ui=kRrO5z{XcX4kN-JW2c{gzzWuolmY;?iZ53XXORqc+vd1Q(>c3}m>;JgJ
z1JlPRr))_-KllHJXJDHTm)N{XPj$H$7yjS+;{5;LLvX$jbnn60W1s)G6h8W2o^&6K^XlFYtNafyYiPI6
z_y@!P|BOQ|-y^%%I=t#0wer7ne#8Gr687cNGq2LpuF9(`|DSp{boLY6zWVL|gu18T
zJP*tJAi6B|;s4COAH%Z@nE3lYc%Shps*VlZLe5J=kxh+zfI<6mgXZ=APdGDk$d2z(
zqkQPPwfXdPGrseA_fX99
z$Zoa{ubNM8{cjTmS+g5|ob>(p)W~mx(Tt?Cv;NO}aNz&DUtb2z*ucm4fBvso@aBJI
z3Z$J6%j;O_5M
z7d$*Ppl1zy{rva;w$<y$_;cF(0=ypCSWkSaJx&K!`Ir;y~pC5E<5B&K4_y2)yAO6>8KO`yN
zBbNiYO`k?g835`RWG*3nEphJcFK)7TP`+=-AwS>4%7D_0N5gJD5R}jHV(30&V%HMq-}@py6!Sc~o2|pEpW|u+*hE(S
z_iAhVA9rNvtl1sRbaG{P7QX
z?M`DJ<@G(ba-uBd;s31O;X5A)&+pK&0CYZhpD~U*i?VNj*)&x1JG#5A!mEpr^S?tz
z-T%;KgKu9hxp{3c>jRAw&c46@|6>x)Cx89o*Z)n+-jY17hb@m25-TiuIWpS-NM!i-nJzE==2}-PWPksVXm3Vxwzo}oCo{=?|F6Q|FONF{;!_*`aiAO_{8M@lH8~N
zGbRk3y};=0c&hTJ|N5V`_uFc0d1xq$rJb26nRssIi_!dunI8u-Oo+*!^iY%A@Nu*a
z0O=Dv&zkyw$nN>US4JhAnW>w2Zsyy8Oz)$1qn1DP$lJu&QJVhfe`f#i+8;=2yC8ky
z@Any#ehs<1{_y2_bh+fy({&Qh&U`qU4^i{sK!pb}d6Qmh@~hsCyokt)
z0}&QPOS9G`zvF3y%oJUjF7Xq`;oa)8pjN-O<&bsvUn8{lL{|My|Fwg+FnCPl7c
ze*;V6*_oZA{Q>%w0kq1$l$u)xnh)&zIh@J>PG!JSzW+kx=7W*0FY(-rki@eyUyqgpv?&KD&7-u|UtI8FNVWkWYx({}kM#UY
z4gaT{m@S@ocIKwhGJyJJ0Il;cHO$X#`8=e`fb@yKcV_hcm!?MAA2kCS0{{OrCY+s>
zns|2RhtYC?dgTB$@+Ym$D9L&}RL%%2=X
z^Yd#5`Q1Sies3FTYj_8;fJitqGjw!ZfbuecTKSXK<_y-mgFyZK%!$9!1~M;a$pALQNvx;yCB=o-GkmDh2(Chg2j)`W92
z$`jAd{61O^;4cS2`Dv(O(A`0FJS*&1`h?#dxs(30<4SL%;)62;lF!ajNjy7q_h=b_
zy9^j=c^~FpI^7*~FsuKk=HN`-qpl(<1pfbLOguXyadfT_dl>-BPeY9c-5r$KL$kYs
zUS&@F6F<6+ho~GjBoswmnkEPxAN(`g9zc`@LoMGUySK2I>hpnrN5}VuM0O_IkqPH#
z86=&Xb!4;*fRq8q`Dw_plkfk}q2Ap=r!pq}G9x=-jcOb^A@Kh{W74@9aieFB4bJob
zNGXR(awxt#=uP^>U-=CU|CxqP0v>fKH9{cm%uN2IGqXAp&(8cgQriQhN&XHIK4AwkNio3`-E9_v}97?tKE1@)(uZ@>ARHA}n_Y
zrBD35FT3xjHhojisBOa~1fYF_`@^*ypmrV{X!CMfKZDNM2JI7m0&eRMmxMU#j{yq-
zP@f?2?97(oxSwF4^DDLOFUfxLBV*F<*4Xa<+yjqgC>EDI%GtI
z0Ca5N&QLA~sF(-oewT1r()~x}N%!Iy82&Skhy*w4$w3zaptA;&&dy95s{0FvX#Rg+
zk$k_rA>ls9pi2;=4jPdmkbG>85Ogi^kXkn|#Pa{IvZVVnOJeVcjmShc>ghor0^oH6
z=Vq=NDt&^Xlm8#=E>C?pI*&i-bHJzrK_QTEcD6<0*_p=%dpR%!^8eY2l=}{#FdfCC
zAuyyu0CZ;=@aN%zx2L;o`msW=~X>}Uv}g+S=BK2GR)q#p-cdteae
z|1V`p_d6Q0uJWJ-<0yAD1cr17B%GQmk$86IjKs4ue+`y$U=Zd1U*(DSXOt$~ml)EK
zJnHz-5Fii&3FoIPB%Yl)Gx6-q0Y8gy5aj=VD&y<#IrLG3`Cz`K=Oa${o`dx4;)Dhrcvdi
zAuy~%Ao1)hpMfX!zg21m0(OX6AWXvVXr0gyZ%2Y{p*
z7;u^oww{3jrvt#&;|T$<^>{)6Vm(d=K&{8=0I2mi9q<5VK8_G*fXQP|1OH&sIMTom
zguFbqAcR}bz`%}89vV6zQ?NP^Bmu)%^ut33qy|eA!9xcmk0p&DS&ub};GqN3j~PNp
zp#xHYkxP(52PBUXLMYC|5``$v!{R`Yp~x65gwULa5rt^ZV_-mYAX4N(Y(a}cH0NPB
z5TXg0L~$U7^UxAGhV#%Ih~Yf6G=||kGzTI(48}%sAQtDLgdi5@p*RpNav?S#r9mvt
zLvbKV+Joq3U_hintjd!X4+`@fPw-m9u1%W|NoDs53Fee
zBsiKrM$^at(e?!>D`3ULqJ2R@{0@uu_kXNW3l=2Ke*@irB4j_M{YOIj3H5IY^^Xbl
zuW?q;;Ogl=?g9#&J^%m58Nra~{r?|_2jQcHI6Md+pTOZk_y7zJ4?vxd(*rQ)|NoCQ
zhM~Q8kSDNu0Pg(%|FJp{?!5p1vBm&&bOU5Q)*=GoJnSJ1(g?#?9Ejw+|NpUsFg$cY
zW?*q3lJl^JAUt$I`mrPdurQp!a3G5Fus9IKd00Xa#d%m9h#Yz#SAfeKBmyLcjL{s3
z<~)ojMv7dBDQF>x<~$4sqB{>Q4I-sIi1BEd2*Y`34#aRCS~DCq@*q|q1rF9J6r>Qs
zVm(R}qD3CWe54S<2py0Lq)dPrIv@q`T#6-hK=SZJj@5ZcA%rD#K>Fdu2)57xDS(9#
zh>Z0_yam+@
zlRR_zhFpLR697nX~y=x&j`gaK6x_ZAC?YYcYEfS_k|X64wGOV0^Vp~GIH=u
zAk?nI7w5=w6vjU+9X#ss$ct}iXkZ!w0XSrxXk_Q>WNhzy4mtiPWm75sVd>y%uScHO
zkPYBL>Toj~FEwL(-&K^xH8%ZJj(=!6$lKlLRj4~igLB9@3)Gi0cJS>$9nOiCbdy(lGv^WkLRDP+wuRjYwSLGI8|v
zH@5e^M@-yNLk%6`ADj->=7e9^UG3#hTquk@RYneeD#mucTc{DIq?kdE_@5n-@_$c_
zHyH1&_TIC*##?jb#V~dsgT`-69Q+!L?R~$K5^vN}OY8XW_00RfwKNbM_pmgur^fr&
zo?4%YN6P$ov4_gY5H+&*@in&hy-%&UB*z?D$N!>)c=WhO=0Dk8>k~IJVjJO013Mp8
z6MNt7`(7hAo@k|yR`EYIC<7Fy
zB;(!H-naMGcsdQ2G+^u!%5QA%JJHzQ_b;vDkP>rg75^LZLr9K$r1Ie3?i!y(I~v@F
z^tuxx2VWm*&C^g4$N2QpBL3$_B~cRh$aEgl3(`!T~)r=;*M%!pmxFL24AkhlnxAS{k4qkeJ>8CcqP^?
z)QtZ%+2K@+XQZ|uHZ!m7tM$AjbnW3s1^UyL(;Lu6D`HQ@2T<1
z9;m%4pgCG2d*4O)!geUgQ7is86$a5VuJM_@U{ymX8$HVcOUqDBV|(9yLm_?%xse+2
zKR-4BU;NNq4m78@zrlfSdzH*wLWg|5H*xU$ADNW*e|}cy{~pf*@EkokX`$aM_y3M^
zs`vLuPBWW3Ls!tF46q3;m$MG5`fcu;@!!NT5WI(yP#zmh^3Hxy|J!<|{y%)=T
zuKmA%|Nj5$7q9%^K7G~yDdANlr-Nmw(Im$efwmn<=Iw0o`@d{v%KyomD*sN}RwhI1
zG+-TGnQk3k^&gBw%l?~rCj2+H_Z#%-z$-NA|I}HF{+~T}2^{aBxCdcS{KN3w+jsu&
zU%KW0%=iYP(!pf^tpB^KeMpKgYR3JV2{Hett}FXLX>%1APuyIULi_lyngNb`SQ-eg
z`fn9d{NL0qYEY&Dx4_u{lcvxAf8oLvlz0clJqW|%9+|#(@816-Yj^#h5nGQp9jwg_
z8<4o)*cI`A*2*GqoWtTCN>8D6{M&?A9Yv3S7~e7==f8c7fVBr$AQgb(hBR&uAT9^%HBnBh?2Wd8^Q}
z|K?txwgKdv4O+JWLGAgBf~x=f4jd&a-a&B>!r0;)m)N!Qm;bMAne%^9BGu;i@TZwt
z@Bg4Wei~984=v}h#{Zd^ng6SMHg9riUoMC;ky9`b+o@&a7(j8nXCM+42)4A_L1>yr}q
z$Z9PDa{rq+1yMB}*m;Hj@0~RJ|HX^g+jgM%C4}+CGhVrS_x@krz4HJ5mI$Kbl$f^v
z_NIXU3+HG4pR@_mrYDf!G19@rEmb0!#oDpy*?zfD+G63KCn)-C|+4=Md`<`G9$8t@89_`h<^W{Tq-mIm;}Eh%!>Pwf4F
zs28!%gP6PyQ?sEb^8fTTB^Y^`P+Vh^pSYzmo@VhMUReQ-KWuSIhL~kw{(n=KFrw0d
znUg=bU5`F~1B*v;X;R{tpxV24{-57C>;K+*;>Lrww1xbivowz?@eWH1lQ&nE(Jub0
zTBsTSV6#B|MZc{7#(2h(y+f1!Z{E6_YIz@>3LcvxIxrMFZ!(k%YNDkp;DjEuZaNRJh`ZIJxm1Z^xix3uB^snZu|68E5VfF5_$
z;@`V{>;LKH-6&~bcb(7wRZ|lFPg!41)jW@y4k~+T75`QdRdWf&Bc<||!Nvd0+++TO
z+IXOGTTmR)5>qR_ahY>r>w^D#YJL81?2h<9a~0MxTdJmo$(yQX(klL~BdS(X8o$Kq
zFK?ScvpkQSo^Zt*HN|)Co7
z&3MLT)`?38=@$Q!Hdk$=UHn%aq%>ZM)qmtTapU*I#4$cKxZ;eO;x}(!r)T`{p;i1_
zg;$*=HvTA4XBS!X|H8$q!>0VdfB)Y9DO+mjk_IMkt~x=h__q$Px=BgA606rIwS_Km
z4=NX^na}Z=HG4-JUE+Vz=E^HHjDP%dzf|fMMi=%DyZB$cX98W~pO$mL*5Or8iOs{5
zs7tAsJnZ6s`Tl8iiT_EPs~*xU|A$q+q$FO6)tg;6eb~kS>VvcC691DoS3RLw{6|#1
zAvO*vQCHM5XV}I6y2JD7691DnSG}NB{M&?AeV`;>iPc-#xnS7E|E6P0=oSBOXchm~
z;Z>iBjYCS*)%7kOcJaUU_;Py1|9cw7|948_l~}zE{Y!>n{I8@}{C}ol{Qn|04k=OB
zG;!Imi~sE>R?#c|ztb@O|4|aJ#OiICG#ul9HNE2h7meZ{wDuda?~6*~Jh;+B+msc<
zF8}X5xt3n>|Boi|-_XE>E54{L-aeJ~@qhK|jsLG+z5f60+qeHuo;)GA&J*9*E-`Y;
z?!Nq=bNe%0FvI`iv
zETLcg|E5X)XJBBk4zC*0?Z4Z%@BRPr;|DC-F=$Ylc>DG(P13;PyRYby_j7K4{z1d|
zACmpQ>(_7n|M1}>MttKE`1R}8{}(S_P&FMaq+9%d`9j0^A5!B#SFYUn|MKN4T+vKW
z{Oi}R{~teoOqF!7fNt^s`2(%upKjy7U6hUgg6jDD_aFZM{rfk;I3}b3)He9|@#Fu8
z4cKucXTV`Sa)hn>TOBP6N~K&@KL7(k%W5
z@%-<#Yd8PDd-tByXeC)asQvit*)x*U!Nj|7>6QPV(k}k1o>9B6kIg(%)_;J?`lnBy
z|Nr-o2}#7qP7W294RidGnUsXrj5k@87@wfBN((Mmo56|Nj5{+n?wZ|6fkhD*mm*
z2WI~VsE&W~ByD8|1&53{-3$z=l|^UU+9qzX3;ACZD@G@
zgH24$f4@mx{}WEm_@8)oCLGVczyJS_zm$*T(mVQp{rUfY)xp32Gba8<;7Py#XKnoP
zKj%6v)4``cTE)M0SamD5@fu3RY$B@udp5WJk2^FC9_PsM4`NqcUHSjv*VpupLbC09
z_U7OJ<|Tg+@s6AZK~fioBU`k#I3D^=@+?AxEp
zX%+w05tYf5tS(?kFL0~;{WwePiYi`Ff9(f1LDqM@|!^Z);U&~(#@>;L|j%_gp_Cpuls{PjQkz&G;i
zgu7pKX%_#n4Pv0UBn3O=HT;j*IFYLHj-Do(Z>;}+|10_Hd`Qdj|NlRH@$Y}0lvwZG*I%pG0UC{|t~d;6$wfwM(e^A27RztU4Y&eu?2Hot^oA+P&TXU;q3>
zYIG8<{^R>U|JN>j^S`+AHSV@OHR2x0jI6ak{^wjFx^3{2R%^duY04(7>M_3jZxdPl
z-@A+QI-Zy~$EGIz{M`SmpPc;v?GN?FjDP+7_y54Q5C7}39{w*+x(~+Lo!{t|1~RAo
z`k%G!`~RGq`1_05cfQ<*#S^V)>ximjxZ>Znyy<_`t|>Gv>#@Z-HnD3?g{BXFF<;vPg7=Rc=g{KM;vIlumAAHm%=$i4NM=J&tYL{!g0kAKI^
zy8mITCk%>sM^6hSmzVwrjU)dhVcY=JoV;}U%m1#5Cm8V#ihCH&Y5qk2G%yh|mYj1I
zvrfpp{dpR#@;%I4>#*t!Sp3_@*ZdEd*8M->6lMK6^f;phzw+wJ|3}{3#9JQx`Tg(z
znIoV7_f+GLcUb(FW(x$@|$N0p{QXl@$
z>isdWX#kWK=KflQ97nWdhaT(WOguaDz(B?ywd}?hx5Ua7mcAO$_)nksdtYJSe@G*7-#9q&7iMWEo}GD#(zqB1
z{lvyEG3s&~KhmoVxSrMj%K%4o42UqeO>l1J#DR!IO6(*iUWrvxn*R8IW-~XT8`h}7-
z@GoQHuSLmy|7muYGrbc@!r9rjiDzeCCpCU(t)A#Oh0gmDtG*=r37PT#=T7>>-_G=o
zA9~ma>LVnbnbnbacIGcy$1Abs6C0o8sLQJ-sXzEDW76-|0UOJqM*@J_5qDvhTH@Im
zJBW=VTB;)_UWwIHn)c{_X5UZ3<-nxh`!go~q}jdg&|n{Q6u5nOcIE?G#xEhWiH%Eg
z)fH5{!59Be(ynaP!Oc4ossjUkg8uf*yrOMdV_s|%w)_$y<=?}q(ohD!3#tgFyZ&!^hrOp26bc%pyQIx&I(MV
zW1T=rypp0fr|sLB%>F+C0~oYJ#_G_ktJo6G%*szZJM#mz^EkE
zB%TUgwTe0M%*>R;vooJk8uuXm)QSHGkING8CpI+vXBs5IH0+%LY9l6{otc(+cIIxNN+`Tw6W@$4-3#IrLtBdm{Iu*3@93YFfhm?EBL^`z>ds6z`($W%m)P#68{f~
zZ;ucF--wIkf&(CVBo~0V3=DAf{~&z00niJz;Vyark%zme0m6s72*QOM2zCuf3~C_Q
zH6T9JMNs45UW6J4_aaCs1cO}&H;#b;Y#`KiAQfO2!i|F(2=**UmVp86Ww`MW3!t8b
zD5(GcAIW&I1xUt&BZUwj?mLi){Qv(CG#@EAzyUJK2Sp4Nv;Y4;8XnNF08v=NW1!P7
zy8VRmAG$nxen!vl|Ix~W|LElfQUU>&ct{q2%NryMz~#|@P(VU3xV%DG04*Tl27--4
zDj}fdA>2TSasS~4LX7(lGZ1PVJPAXM`~M&6La^&VdZ1p083!{EBn81>FM|t52p=5g
zP}hJ&z%D{)hZq2ofMN9d2)({Suh0IY)p!5V>qGSV61_f!Sxhml!N9=az`(!&N(GDz
z3XpgM2|!q*s6#iZ}-v4
zK4TkSITL%|na1|MzhQnxrqTQl3Ih=S+vAbHs>?H1nO5$iwYjDaUJ}OkzEh3ueSaeR
z7oCm6|DZ4c;h#Moc~gc`zA!fSYYTQqeL#Lk#&7r5`eZaTG|**@x{-sQ
zim|=#K4Sbvj2cq>zb-EX+282wqkAenX}15?*f@<9TCStCUx@J|J~hPpe@;XSx_`0p
zf9mW?FHVfZ>Q87nh)eFg9nMKI`l*$wG{{-Kh|GO%E
zaru#;`0iToZe(8(%eL^%Dl~Nt`A@0;aOw9BP5M83{__9(7jOPQBd#9Qw!w;5WkwM6
zBffO7y*c3H{6#q##QGbi&L*sCi*Ul>d`ARsNr}xoQ*4U&PYZVU;go
z_n}yamH#*QO!#kX??-kxxcJBXpEP~`{|gtcfc*{fI|zgP55wSaSi9^0^q4wuIBYBk
zCd>b8CdB-oy1o?TZz!&QPOQH{>WtIUSgpgW{=)qqUiBZuwhAu(Z{`+BQW#jf1^@5p
zo%a9i*^4Ot2KgO?VSY!Z@7%im|G>hf|MxZolH~u5UE%*{tt^82xeA&7+pxcZ1>`qk
zFz7B6kbiMui-6q!CQiWw!y!4l{QtfKN3r@F*Y08?|2K3@CEDL0zk@KyZ=~Q88)y8Vvn-!re53n+^5#mS
z&uFm;uZlzWA2IyH$IjB+|JQF{CE4$wu$a81Dh3p{#9*87>MUaXi>$^Wx{hSOlN0~<
z@8A1BWlJr|VK8}fHPLM#tMKX~WWN!^_DyT0lmGAkpS`1vWdBdvQe8ky+=J9ug;kaj
z<7Z?wL0KJi^Z(qPoh18z;-<G)?rnZ$bKV+9hTcoH~%l#-9xhfCvB-JC&up}
zH8x?DHN^NCSxt0dFWvmVXiq=M{-3z1sv6`sVz5Gv`qh(FJJ%v@ZsbCfB*i4ukrZz@8ADVpFaJ6^ym>$;m~sDJ?Z|x^O@-MPpk6p
z_U(KBfBg6X_cuBN6ee%qz9kq2jkihnfA;N9M3;ZmuK%uIzxDs)$B*dV#mWEm>(~Dm
zFJ9mbhuYg8$cX9J$;~(}(wf}?W_5M#dGZTDI`0V@p|Nr>=i(-GG
z8}RG*|NpBF{)L~no4M-8|LjYMJCbw2aSV!Q>^S$<7ox{MY$7Vn3FUd4$m;*zT^;}9
zk7M4EU36*5|1=f}Xhuxi2c*U-
zs#+eO|J|ya|Htf|3XX4VXD`6SCf?cc|IN?OWc&NWm;e74?84%2^t%&h{raDM;2YjB
zAmt8a?a&4`>+q_7=waZPS^qz5^#p?chWQ^vXI_~1fBTCI|9}1cLv%R&{`K$wzWrbS
z7fdJZ-pR}*KmTL9KR)O7=f7!Z{;u9&(DMJXYZ+gg5q!FFvxBAfLZRL=YKr>%(=h*XC3%f
z2#QluaKrxwri3%I<`C;2a@8UG6&o9T*GNARca7i*gGqm8QF4A|66A~>qR!kRCk(Lp
z8C{IPT^qR4$G7x}zbIJ$fJiL~XJ%?7o}GD)9RCs0gYH*sd>nU8;PUtX^hv+3q)q-w
z)pLr$_ky3B(U^F4=1)R?B1ImXf3b-b6(ZfWfGe#}{QWay;_rsghW~7c*rP5h`Sf(1
z#IrMwlj28wYO(nhmsn2gXPj}KG3ocQ?7pAc)b%ZP)4*lpxf!{MXJ@|0=Qm>HaQPLR
zIHW#Ay@wZce`@B$U)hwDaoBxHSQLET5QTRjV)G|HvAkM%eF(lwFlEC30Y8U6;p}XS
zq_Z>65EI|%YVi3Ln_OAi!~Yq*KToGk_%-0`pHWiC|No2$XJ&?yddCSiKjIO4T9I@=
zEj0B1pj!Wq91fs+pP=Wp64iFZ<5%Q1;aAZ4tYt|z2J`+0@
zq{0E{IW!;#|Ns9Vd^kfr^w0)*urlyDEwD2gKnD{rFhZ0uFw}#UGceSHk7QtAu%{C(
z4?Ri}?ERnic;w&i
z@yPG$@yeFRrGBu88`*hlnmG8bK;Bc2w2$a_k4OIU9=9A&(jF{M2D?Mw$wwO3SpZ1x
z2k-sp@yP$%<594v(=|s5ta$(lZHG`E=-$Uqxb`z)aX;7}y&m~rL3`Kx0}AMVw}y(R
zC%dtoU$L>h?^|5%hKb{HKa%*H37)yds~SRSHnxZy#fEl%cEjKYYsMCq)Yr3pWs&lFMs;H^8Rlt^(Vs3;PV{*!}hUF-dam=
z?#e2>G842u1K&P0T<$h?^!uM%+VKC-;S=yRd$6^~*Un%5zqV!0|6Z?x|4Wl&iE=yo
zKD3Ejs?!L?fptVx8_4}IjJ}Tym)qmhOaAZNeE{xm&>k8PhPfX`Up{g6|B-2>_}!0V
zAKApsRZWE5U%de4c4Qi~56sjh9K06}*$+;>QU7PmS%TqiklR5R=5BNvy!Wp?8p9u3
z+C%Z}1Di|G{b5xbk=>2Xw(!q}@9|8}ulj%T6#hMZ=
z!tSp+j_gic?4A3LQ_cOCZk!{|{adPz5O#m{Ib3c=7Tp1=+`qZ{3?cX1
zgjZcdb|)_O;bUj0=KgE9t`O<|s>_7jZyjEB7nhrn#gCmhPc`@7ynUT0_fOnf|CnCx
zCuJYdwR;cnuJJ@#1AK>&`zcL7ur>amJu9$*HPBjpeEWDV-6MMK`V~U%w+<&i|AN-&
zld})!Jn`-)n18LqNiRP^`)EMn3kz>T^v|C^|382J99{>UzW
z06CxHVz1wJ@IPoD%!?N<2{{+1JZK-x!$*(*@4feoDEH^w{!Fm`BBuRd8&my%&fZ=B
ze^X%}3uxW%va?_QXJ02`&Hk-Vgxe4J+HVon|K00a{>SWxtWlqKZ}P?HRc7E7XLr`
z_7)+hV#r^*_wRq@Jj`|EnG1g5*+=qa9-;Ja9bVmz?0)opAfUNjY`E|Cw*Sw+zsGPV
zy1=U!zyD8OkLhms-UsL!K&<;fZhdYc-C`S2m1$o9|sY8wLtxMV)tQy+>8yUpP&1G@uMUEAAWuP
z|LMb@|2Hgo^S>tJ0esy}S;~X|Sv}v0^8?5~pnVuezP`%5_eGCT_=DsV&(3VY<}Px?
z(AH7F{ZLf=ig@=={QW<3;%}193xlqY{!EUWk@etmKV%=oS7Q9|jokIlNvEf&C!U>o
z4B0)TvT?dU>HhzcoTvXYCg9D>M^mT#AZz>(l#amo|9?hkT)ZaL?I88|+z*n=!?F(n
zwDuGf=G0t!ntW`I5OlrNKajhK#UMB0!;pOhzy5;D8&F=I^m|pt^#3$FJ2m;-47PSH1m`G3n3ktVzG!z;RAv0=(w^%&d~cb2Hx(@(0L$1n}GP)CVQGlm1in
zY))c=AnWQ>o}{xg8xqgX{D#XPc-;Q8BI*9bf`t2YpT9%*Tik`|($Kttv6c{v`yp!x
z6YfJ7HK3a|aQu|Bvo#aX&RCgvcIF>gd?301Pg(N)6=f+8GzZRw#Mzv3akgU8nOVKb
zC+9pXPriSrJn3F_PYC{QnQS(gwr_U3CMZ8yLXi
z;N?gR4FADb2TvL3
zIti3}L7?`-=1{@+fONa%P_0Y_t>rPY_vtjY_x%p?FFHoEALfqlbE6Zw_BVv`P!i)t
z_CCJG_P!6$?L_8dv%k+P?+wWpt;0PduqM$&NCakhBl&`kB=W5m-&BoQZp>h
z!StH!aFAU%@rItrc3gpA65|7Yws2Df9lLd@Uy5v^NAq)K^Sxv
z^Vuyc|L_*0Su3!0oVqPuS4I6qQ|Ib)cf-#3Pbwjl*y8V`sl^SsWqs^;k*Wf;@4cTsF_NMI<
zG3|9{SQ$lOQPO6+GYVLMyL*tdZTmi|EVNPd&L
z{wJJ7Ju4~i;==!j-`x2B59KrzNRWWeL^*!x&;OEHsN;s2lYjru+V}%y9;xv0e@^uD
z2jW{tRKGx;2ZHsr(doKtYyMyQ_z3I@ki9o9e)~V6{^|eX+-JDQEoXwx9Qyh{_txiE
zAiJ>Pu+Ih|O-87<5dO=<#W!aR~4jdTILO
z|C#-$d+woQh(wP!gT@IG&&}G3&+jlfbo)Vk^m&x@iNCj`O#V)Cn>gX@4By1FGath2
z!bXGaL&u6}!I^P+6RDi2tPl>UMB+mOR0A*1;JwjGf5si3~fg(Ii`Z)|MFFdN=)
z+f=m{=582m9bR=6)=shv%KvZb9QxnEJM#a$MW}rwkohotdEdJK`&+{QZ*2|!KX*wk
za=+jr%v>049bR=GWtNOog^InYhKg?_xeewL^|C2Uh+$nM!W-g4j4y$?wHW#Un
ziEYgy%v>0K^A6Uvh#2b*t;4I{qMLu_>}7)PzjOCCa=1X)TWY|=$S}8qXhP=W>KEO*
zkGU2x_x9)4ATyCMw(vQ5>f(P;zvuDerx@pe!}>iq&bh@FJ}B{P6H)d5=!HxFfBeAT
zuQ~hhJ+?JWnDL90K3z(i{zq+_{2$bAKl}bZxT?WMoV)W6+-}dD_v?T5NyJ&Txwk%J
zrq8g-y~zC%P#Xk>L2HGce0vMG;`!sB|7XmBpML~z7iTR8^-I3~$+`V`BXZb-*gm}-
z*@>rT{(_l_PA8w6^?%Zxo&Oh3dilR1`9ApE$?T4AaI>Lp-TxVrfB(zb^b6}bg3xn+
z@Sb-AZP$R?)Zl&vXbv8MKW0w&6AE%KE}V8|rexCDnTycf591@74`Sywe*&F_2J*+|
ztls~4%V%Uelg`cZOguaD2FzR-4KfoMmu5V^o-yG!(e(?m9iY3olFrUdOFTRCDHiiz
zl_%fNZ)n(0^nG2(W+Ss>FD~LvJUcTd`PjTWbc)-BUaDaiCC=5~y(gV^9G6Q55*v$X`89?nY(DV>!
zkQ&|&BQZp+9fP&|+zUxQ4Zz6OPtVxScZ;#T@4p_8d=TE!?U7G#O_;HRuZWSo&s^AC
z45+S!w+lS;e{U)doV~xnR|H##n>hGI7~A{40qH@;F#Ypm6JYi7n?2P&;mBrK_+>?#
zIESIMAuL>i{!g4f_y3M*EB{XnDEz;@+z+Pz|F-79_w$zLhQQ1Kt%bA-uY%u|n3Pot
z-&+Q%?`~eY`2YB<^8Y&<{QobRod&5_H&wU7^xK42O@q~OVY#UH=z#RY@ZufF_uf=a
zhUvG8sG1AYpISKurEY}j1<}j)PleQjo2&l!Z*5$LPd~PLulvqh_!wO7?a#Ae`jOoq
zSKj~sK9>6}UcLM9zvbpfxc;2mpW*HYg&(Ni@@#JXAA5M({|R@t|Nnrrw(`TLzyGIf
z{PRC!I(+TzzwFze;o;|6(HI)DcM8f`grK#JOCKHmzj5i?|20{U{%7|70F{LhJpb3f
z%p+f-VD1Oe31?-mp0{UV!{bZ&-z;@O$oKz-u!r2GHMlJ9RVPr9d%tcDnN^8Q6SgwD_c&DH<0
hXJGii&%p42oq^#1GXp~dBX$gu1E~S21?d6l1pu!P9Vq|+
literal 102134
zcmZQzU}RupXlMY@3Je+?j0|ZE3=9qqP`(obLmvktgMk5rze1IPVVf5tgMtE-FTlVM
zSHQ?1Apzlca56BkH8L^?2tfE5EDQ{NU5pGG3=9kn3=AMa21W)25DUzSQ)gfRVW(j3Is;e!Qe;-
z#>T!}&~pAIw)iC^Mq>QK(!pC$y)el$mv1y33`{xzwd;)R{nCu>eV-AEV|?;t#y>0_
zyzchQFYgO20^hpN{3=K?14!#M5+I9Hi99fRS_=lx~M?D^S@eK_POrz<5cIm*#
z&ezG<-uE1G{87rLQvAcx!PQ=mJg?C-K;1N8X5*!1Z11~@(zwQ^pUUwMO$T|q`@9Nu
zN7Dgi=>XK1Gj{OpKpwBd7KfCG(I)=EV~W3fJPKw`aLyMWO$Vf<15n!z+NS?NN!${n
zmxl2VEerBLgZc`iZA9YIfQh58zp=gVJ!0aH8fxee|KN16HYfbT?rJap(Xs%0IxuqZ
zQ!%#l-9n8xCB+PS#Q*Gwl>d8byuo;HwfCOgHQt(|=>U=rK;t(i4t@>B_P*aqi8pGg
zrFH!GdglG#S{ewBdsrISQ{(+>Pp!|yBV~TPBRL%y+57k!+xy<9R$P)}4z1&VQ9?X=
z+#~a!?5_2R8)<34z|Ke2#NKy1Iq^kpJ+zGf3BK9?cUJl#$2WF%wfDY#wZ7WJJsmhW
zIB*y___i3^`~ISKJd$f3E#rSxMkMz5hPDNe>I0CvpL=V4nz!Y8vJb~}VB+X!ZEWv*
zjof&ml|EX<|J0xiP@IyCcUODg-dp48G+fevu}dhwvAyp^V|(Afw2DJY%%xTQZ^#cJ
zIqs3lgMYhgd=~9!a39j^PK+FUeW*20LrEOt(@Tr^pBt4#N!%mreYU&WD|o1t1*Q&O
z62|s^tMP^VV3DJC{P%h0{ohvRj~s{8V6Wca;3Y8>(t(kqx4W^u@AJVDzl7XD?f74k
z6ibcx#%9LreKp>GgEb9++V;?T{vV+*A58MpjQ>e~+5dM{`C^MZs)>Qx1)Cduxdu}@
zFtqj8GPd`IS7jolI($N1Dy
zEB>d4q+^RGT8e$&Q{$CAP4~s)kTDdX@#2
zmZ6-+_P+auLi`ePBQ@fGery81_@TKRXijl|g9F|6Dw(;24*7g<;^6l`GAZx>{H)IZ
zJ)Q;NIeK!^Lcdq;{~hI2@9&YEW;S<*uAoO5U=vy{XB}4c+uS$fzlmcYcn>9^JT{o*
zo&BQzxAjc@fB4AB|CcUZ`+xub{r}f5UirU$`l|m^!mCJ52g_2UNscQ5Z99_8+u7jv
zf7#5G|C2XW{++a~OorBJz&gA#-8#JLKNyFW{WtSW_-}0QH|W!WS7_4zsk0XSKYQ*H
zINm{V55l1MhvB=o@BH7tbj$yl@eM?!gUS9`|94mWkQ86kjQcecV*XEESN4C><|;6r
zxVb8Y_VHge1046TG!S0(-zuc|zo}c)piBd9fwBK5O`re&!i6g+@eYc65QfD)GJWsf
zz5hqn?)pC?wjOUfSeqL*AaTF3E8_pGl||qexaqIt%nXCU#@Gk+E2cR`wTZ%E(bkQt5?5g+uzkGV~|H&IGVDXHVp1is0E-mAq
zfq{Y1I=t#9)_6y%4?yx(p=JNgy+CaP$T=IdZUcha^BDzI|Mwj@N>sdq;vR&t#Wyao
zYv(WjU)wV0|Dr^y&F|q)Gqv9TL3R8zq&gm2&SQ=LNt>&_|Nl?BvrBA4D@8$ZOA59O
zD*SKi5<%0lAS5p9|HjR`NQ!q*+=DQ#xW*@biCe04XjKPThgW$b$0^C|
zu!{fY-l_jh9Q-Lt2d0jG|4XV{{~teohO9h~oF?$b@%{VY@d12l?%cTY|J0K9|9fjG
z>j&gYWjxK|KfJO6
z9Dms2lngP;!2JKFE@4Ea12ZRoaJwFT{00_}R?MsKvi``_}){%ezt1!0tMq|Es1X{GYPEoT_;qH62v;(klL~
zBC6&RibqQ2ErW~yo4LpQ2et7)A%d8WZ4$>|DCvC3UNW1v2I!I}}6085napK1BiHT!;
zYH-CFHN|hme4Ey-_R=lt;4H66B~z=sH^K;JnZ6s>+$9EivRaCjQ{VH#4E9S8~T?F
z!}woGulWB=!}$M2Y#dUeu4&@3VHf|~PpqO>{C}rm{QsjQUWwJ)GHE!*|7v>0|1Vm^
zKXmOkWZxH+#(8k1hqfszhF$*Od2%hi;{P8_;=iGR30HhkTfBWL?c@LI)f@j`y?Xus
z+qZB3pFDX&aGfWwylP1H|E^!Z_5Z_%j~MZdOW@b9U;kgcctO>4u#j%?
z|K$rPuhIe!weg=TS8n`&`SKO6XeKEB_3PLFj~_p#N;+6TxA_13ffjKOGLvrOzg?7#
z|AOlH`}ZII|NR?O6%veQyb3^VgO49S{(t!JAw}t6&fVAaD*xYt;))j7dI-$_+`4ra
z+@{AHsbon0`Sa)hn>TOBP6N~K&@KL7(jx9bW?B#8`QK~TZvKDw4m9*lM&y#91=N0g
z_UswS>0sjBxAe;YPeE}-3v3-$^^DqmeQf5Dvi<{9)<1pv{Qp1Ds0Ru0NU72bv(Ig0n}f7_wL>Q2M-<)EDu`myr)zC|8fr$
zSG2(NTL0;r){1xh_r{IeG^yjsO$VTM=Iht5@uq>Q+aKr@|DUhYBJM$E(rf*ihov`~Rm;pJJqgd-w1E&%gbNPVxWcBq*+Efvv*_X8#AM
zj(_sx8OoR~ZDW!$)6vJ0uibx0r?~(8Kl}FQeYA*skeSv4u>b4M9nhHVPs$=>0CdCJ
z2KOI4_`mnwQ#!`~mrbC!q6Mbs{?7@kHvI>+u?HaPsA?r>EP3g*k93RwoI9VF(IW0a
zX3}H-w_`^A|IlUq|C7$n`hVc{HLAwNKp1x9%HRK)lYaltT=MgO_W3XLNC&e(aYYMk
zL&NhQY+`Eu`%UWlpKx-<|HQL1;du7_{r`XbrFc3}m>;Jez)8KKA9RDD8)zy{%AAWsJ
z?s55%(Z7ts^RvDaq?Fz4j@!|3en_{!cuETGqqj8XsM8WySyNpFl(0G>Swr
zjlKKq-~UE@c^*d^0M!p!%YXdOzC@)u;nt@_P+ZXhTZdJ8!Qzk{+BT;8zfWJs|M=si
z$2)SG0JRMlKRWXN%OB8E7cwJ^O4`2t`2T;!0Z1DU6qjV?7k663
zJ;+R}&?*CR;vJ;Nt-ASt%)Y5amG#JRjgOskal!xHFE9W9OYg~_|NsAkrkhS&|M$Oa
zHgRP=(dlC5um9NxzL8%i-2I{piYr=RtJnrHP+XFNo$?y~M{Jx()p$ow6U{f)|G)p0
z{B=I076lJq{QKXz5>NXMPgzfNI#@_v+aT@cClOl2J;+Q3$Qp2>)_~e2)cg;a-9uI#
zj~>6o@RQEY{6Fp9?*FfUej+tGiB|vd{h$A97ryylT=^Pz+nyS6k7P#H+8_UOt`OZe
z_(`j^-=O#hVVkh3$N2KUO=R_d?=H&gcw*ulo0|0VbN{b?a`OMTKhzsD{`K?U{{!1T
z{IAP;_`f{qJ{V_rexq9&$ei-)f7Z6||8s8Q?=NQG`Enl=N3_J&5mm=<#lLHL)BmVl
zQ)pV&V~cZaVg;8L|KI=mDnyd+RgJ?|-q0sGfx$|Bjh;|HD>K7!>i2o)$_jFZ~Z1NB&E~xB;j+dFk|*|6LVN
zFyb8)_b{B({E7Z)U?OBJIp-{9osfI`^E6uKeURDKVbvM1__vL(`5!Q?`+veI%KCHY
zaYhS%<<*t{kG#2ww>{eDptK!mj~I0~ye<7XJ;N5$oQj{-T2~`
zSh>Q|R|6XV=@WnNEA0EvN$Yq=Hb3|FB=*F!GZ#}U9tO%BV&j;Qy6pC^1Cs_O{a%$Y
z|3BUC{zgs%ps|Levoi}4&(8cYQ1M5py@cYGSoxB?Xa6%MPyhY`hOV=L|o&t6Wk^^H*?}Z#33bi
z5)-e)swqu>{6Djw*8Ra>i(h93HejaO3C6&1atR{TFtpY$hWFvTgUZb>^clRpvCF8E82
z_$1X1QsR|pwaNGYXSaT#Bn|w_nD}c^a^HWN-Q`SbJW{GY;p}YN#IrN6lNvv?R!?-C
zLg#&nRbP_*gv|K=b0>Y`Z)Zxwdobz;^%0WJ%<4!yJM$N<G%GOi9cy}Z#zBX
zmK3|d?ZdM(AJ8&>37Ji7T#~DMKir@IR{yqd)j7W5Vx=NuB?Bhg*D->z{=4GgK4L&Du&RzfxPC*m$HwU2(w+L>VyQ
z_ulkLKefmWr{S(I>Flh)L^{?9l*B73dUM*ooyqL~6ENK4j~f09y}F7m;moZ3#IrL$
zP&>b)n@36PhEjuA)|)Bb!5;_3CAHd!U)txOgcL=E%EHk=b(5b7gHAh4_;R!-!C6++tDY^v89{Xi;K7u&dn%K
zIy>_nIcb2*`2SRvbibn^`ZganH;szXKRqNJnac}G2c-5HNsRw5pm;AxxGyjo$Mlb5
zV!}M_%uJEQvopFA&(8cpOnE?L{C_D+deBvzc9Uj%>xuE(s2bwaT=a=aeBd!80_%?m
z#QzJ>*iB{J6XDUYCqC>4Q&@r9iRWg-C7zvm8C!XPBmQreC*RK>ZPyLWILDU$K>H*T
z&(3mBJUe4E^7<2``2Sg+cz;tx(mgi@2HM=8h|OK2V)RdA;Bn=%GZK>y&tFuYbZ<&U
z(*1mywJE8wd_Nh%`77kcgb>$v{Yn3Qf!KA{(CKz{Vk^IB0nYHxO*x|Nn3UA;$gx4>J&4
zJpP9#VW@H7+5@Bn>^hJdsDV)9;0D5s`w#IlsBi?S{ttB#)HNU>u$SS+{r?XRL!|l!
z>>`jt7)GzJ(Cahw`tCox@_?FvUSFcur%+{-QyL5m3=Rwo44_zNWKaNw8(3hyFarY!
zLj=Ii16A3h`2T3zmY!`}1_lO38%KZhUe8>^|Bx2Uh)9FRwn37{_C9UK_P)=J?S23E
zc;tidvmVd<)-JCs33|o>J?%1a^iwys_nmKS@B0JfZy1L99~1^4{G-P`Z*H$wks3YS
zMoYVlZG7cS?0sh%+xz~8`5Bo;^FJsIK=^NuNB*iV&s=3%x{a1*n>u(&7~A_!HMaNt
ziR@o=HV*%T!T^MS_ITt?8A|!W*w~lL*v_}y*xvUex?i#J3HTor1|a;U*FC?Z)30pM
z?kfb9=f?Jap~m*U_p$jCml%=$2ZaF$Kk4zzOIsBh3ThJ$n)<@T*2m1m-uE;vKjIT7
z(f|MZz4E?pukby-uhz?)mid<$vn?&%g^cZeCmP%P{=w%*d~&4ve??l<|2;L{ApCE4
zjnAT;4Q^t@xRsh}7#JFujP3n0jqQEk;qx0Ya-{fwNboS9bm7X-)e`{=<#tJRhQQ9xW_z|BPV*NiS
zA_d*Q*!aKp)OdGn%k>0xa;a86LfdZV@cDyWIb!_Z>zVg|Ye@h$|6&!}TjPCsXO%Zq
z&fPGv^NBOI_x((+{|M^e0QyPH#uQo;hR-x>KyW)Qvc!7?;V=-fA;+4|MxH6{C`GVJ*aJi6|c&S
zAm~SY>0oO!&Ck*ShD*6g$q~zU%GVd
z|NZ;-|KGcJ@BfkYyZ_HhYC;KvX+are`+aA<-~VMZQ~pohRQZ3>=BiDk`rkUN@+Is(
z6zj0^|K^?v|Bdba$PNb=|Cs-irqBO>;ldTLzd?QnVUYh}7#t33cm1CpQwI)*jRnDE
z`G3uXnEzAPmxBBa#nsPA@xO6e8mo19)nB;(!>j&-*jB;C|IOSYNeTmNx8VOBz0>}m
zJ$n(w-ypw(FwF1B^qpI`{~uVm^#9(5K$85wu`B%ltd&JjKUX2se;f8Uun-#tpu12&
z{>6nY0&@SGI0X|7hve+?|N9Oc#p-X6-$5AJ-{|byS1!Yluq`=tIiaq!0o2N%DX|MM2D#OrU6-$5AN&)E1^4{iQ`
zpaZiG+*R-UfBE#}|C2XXVET76O8ozyu&Kh7SpQpvSGd9aNr<)zDf@5k8UNqd!5173
z83k4UPnX-ka@vHrIX
zuM8sOZ*+Of;KKh69aD++H^}cG4DuT(_{7E;|K}{rCm7%8{-3fqQHvVnGtFwslFR~hk=sJ@9PEP#azkl!llr6O+hr#5{
z)kL>}tir2{ko`ss+c&M1PX53DfA)?xlKnqvOLYOU@oyDYSw@VXk<|ocba$VTa{*)6M@2cK49%|4Cb_%8B*AO;}|OF@8o?6J6L#H~%l%
z(@(PhCvK{$Cf5H}VO90Wej|n*SJF>6|1a4)iDdsz*xKAhtp9Bysv3y#GqRfak_jaF
z|LWBn|6jd&{r}syZ~vb>c>?YS659^wxbu#jd(=VeLWmj@qh8ZhU%&ppc<};fIMm+$Kt}w3A-evfR{Q75
zmFxdszI=t#pM)g7e*OCY@#DuB;ZRA2|Fds@A-erz6H%3oT(%Lzc8sZomw%u<{@}r*
z|9}1<@;D*C;*tlI4WP91@Zm#vI27FeM0)(+`b>2Dm)!o(snZw#gYx+I@3`|gE`Jgd
z|MTb1|JScy|G$3!A?bd<4Z2_b3(@@_a{9kc`HlZqT{%j~8x+fLJp1E+_NlL=hryjs
zME8G58UL_Ps{J1{ulIk#nVH~w!e`|NqC|UljWj-GE=e|Nmcg@Gtzl-ON=#{%2o8
z+>x9Ej$=?fW5>C-z7ReBVG~hlPAJdYL{|Uz?&|m-e;o6U?4nCc{-1e&58Vr7^Dp23
z_rGTTAGqJ)_r_28^*?I|_>N$L=^^*#M>AsEe^yb|^7#DkR^9wRX75yRd}BL%0VX!_
z&W`_Yetss~-ygpG|G!`t7JsAPojB{)|Lg+c_;!{PU@fB*OG|N6gRI%)S#W-j^pAKU%$Ik!LmO*`|S
zmDuD-F{#NNsVV>)mL3z`G4#4
z^Wgj0d#azH_!~J4avMHimV4;=9}hos?yvt@2fh`8;*=EJ@V|j6;moW##QKL^b;y3j
z#s=Rt(oe))Be=p~(w|wBoL`v)Ib(;YGq=bI18jaq7b9@j2Cnq+Eq&rIve!Q#rUX!qb57~^mLuXvons9;zxXHvH2C3SWfF_oN=Bp
z>G!ehzMtCE^eZm2z-8mP8M%pPXTHbhH)7;)`4yWuq&`HwhZl5zYUadW*_4!Vxco^-
z9DLpog?Aug^Cv#ByjpmD2);`&Wy1dfKZicy>}-pqvop^S6W{1+@c9*+Tv^(~{~5hM
zPp3`zHQ?)?k<$n09I}KnGeb$e;{=-@@rXUGNV=aE8v1`wt$#-j2hhDw(DPb}YCGcb
zD{`CgE9iXIvZNb>cK-u%7=YN2yOL+lKt7WWJ?(?|1pNQAEb0FAs0@F59c1+cRZU}qvUKz4D1Pj#sO{~vrfgFN)m27c&a
z4$O!%86XD`K#p8sV5kQly}-a=k4}S)VPKFSsx-QP(D~paCO{zzI;a73kPrA24Q52R
zfjuq{J=_AcgaI1Ppz}LGtw8vhO7OEMK&FA>6c%r=c!b3(NDhuc=R_DVFfb&5HgLku
ziBMr+ILrsZkZ1xMNz~d28mHA!H&F4M3Im4#1!FtkZVP+=r#&9|w|hMDyL!B`LFcIq
z>Tou)^VT$R@Lhqtrygk^(eECQ{N+7vIU0j4E$Tb@NaH#S0LlH}y&pXu`G0#n3Kn&`
z=12{+KeQb}d7yhAKjGTXgvI?}fAo6fe+BJb?++-T``sEUo}TQ+c7Dai_P%d%xf>>q
z%l$~=Zzg!=7O!durPt{#Q11{XcQ?
z?EkB0F8*KNKJWhozY=)))9014s|A!8rfUntutv$YW{__8|Epz_&dKLU%njA}%+tK%-P25tQMyO1+j;Lw_
zxgUnn_mSapdwhDy|DC%Jz}*enLj%Gv_rvJRC(iyqGOZN9`*G|eo4C2EiLm>t7r@+(
zOoR4;nYx67_rf9j!O1u3|BN|HFx(AtI|#$vjZTC2{n)|QZyhxn;H&>q_jJ%ax=2{u@mR1=Kh;t-X?*ZO5o=9te
z?+|i7rRfK@#vin21vZ!lTC0z5AJ3(GM6X@HLdgBr;pFFE&>DSm_Tii--u(pguXQ--
zwweu9}|^+vTuI|E#${L24)pebpSb^;$pAgcJM!F
zAIysvF9|spr#xsM%)>{I|L?u`j41c#-2P0k{vxLRU>j5Yf6m@r|9?|q9}8&R@3OOB
z{%2n&V$J@oPlVeK_}Xs~)&Je=TK>oEhpbVbc5nCpZ-0K`3|~SL-+%u9KWiIw9r}!4
z|Fidg`=4_Q`#uA38FcG2!SWgZdbPdl>v(f5IX=612+zT4aWKmYz7!=2~?uU`EAKY2Z-yWx8u
zplblJ?gP2?xrLDXVf{yZ`#7+0L_J3u{{r~w@
z?{KfzgSsE=AM|}3MC{c9_1}rzhXHakHk^Kb?*GM)j{JZ4_4WU!4}bpOu;k7Env4hV
zbvI=x5B_KMd?(HiApd~&VI2ATD)ZhKJwo9Rl21H4vjv;G$Pq(ZM*;UkQSmF{-9Pd7
z|ICTMNjfhKx<2|dIc`SQgUkJpeGp%X@xwQA*E=Vjo~E97cIGi;_mIlQ>Hehq|4VY7
z{?C|zH!mMeo$`aM@k3BL0%6d43TRxsCe`gA_4wQmlFP%g4*|6H6cpyvTzi^)Y>p6g
zz0^ODyNJagH{!#PeFVS$g3B9FUY+!NRmSxHG&?&r`P>Y<#IrN6Qp^1yzvWlG{gN^1
z&+V*9zuiD_PHPNa^L}PlN#ePgZwdJWxH#2
zkiJp*A-UcS6m6hBF_Z>fT?1Md^ne|7bI(4UAy=AL#Zm28RDXK(~xBFhG_kF)%=u
zD={#D*E{`ZV1O(WV_*QUhq7m2fGl%jV1Qi7GjwQ}yJ7x-`3vSxxWB>6<&eS!7EZ8m
z`wt68Sh#|^7NGEj(4ci%pj&)EclyBZ^ATWRxXuZ|Lw%hVXb#)fK44m}M_yZ}M?T%w
zKbt!GY8%`8t~a*#{R^6}0?oOC*534b6l~~oFQnOiDsu-<8R$9*lzTy-_QU2-!S{f4
zyX8==Oa-mwF|zmRG`9Es4)QNLMzbI0j_-4$6T0>{gz|tgKe^b*-pAM2-uD5zoydG_
z_V;<^{ejLSKiysH6Gy83pmkTq_I|68?ZL&yWW7p6|bo24?gX1#)&rWKF#W|Q>lN}DS3n$*t6WNX{
zKCD73-&pu({Woz8!k7<6c1J)|+W*DN*Ma9bK=X9RH|_gBJGuG)^pG^1_9D%rKE-Cg
zWoRKMe0(ab;=j3f@_%Ervuf?VBK}XExd?t1HE2E&WIqUl&SE~hW##{U&0#2R*j?-M
zf7O%(uW1m79PQx+5Y`!x8k;cW3>so|E(h`
zZE^X3`l3xF+kf!f4xIK++SCMEkq>H{!Le0XwH+?|XDr%`VLzdHxJ`F)&pl+_{bYmg
ze`3QQ*E|~fnOE!Yy}&*9arY}m_!CNhmoH!Yf9DS9JUZO-0-!Ue-n@D9|K9!k|5x0_
zXa5(B^-B2iU(@^*|37~E1Zvn3g@63~`G3Y`+-H8}-TjD>|FD%m4k>m2Ll*V^Pdqc@
z|BQQk|9|;S_?)gU-~a!gvmG+`k+l;0nM>Ht)-m>N;DV(;&^(ggq^|!7CsEHz%DcGm
z|KT?`{{KTc4FwV;pfgd9U;6XEWESeUVdmuD|Fbs!K$%A>eEgpiJ^g|B))Cb&kmrG5
zeQk8Q?%JCFmp(oMy8>kIjf>y@PpE(Tzc}|9?s3bRpfiWQ{?EPj8FauMJl}!rh2gN(
z6FSiC!pE<;vf_VN1?pKSxs4z3j{RmX_}K`v4;u{~6D4|l8fhE?JceGH{`h}pKkA-)
z=oli=>v!cJo86dOZ!xtbsKz4!b{Qv(yXq-ZVfq?W&{yVm>n(mAOZ=SA6sRUWVoDg6WMw;_j1LPqibZ95?AQ$c-|3r9}>
z-`LoUVK%(qwyA0@%-t~BI=t#Ctes>Tl>gt04
z9ai-WY%WqC6Wf|an7J_e<{hkS5i!;sT8CG?MK}M<*~$Ds{cnX
zT>Agx2mXG|*@y43tzp89U!?TuQrh%CYTM-hpmzJ&_xB+Ubu8q$JO9A#_RM*|{%4;=
zoK>59>oaEh46EFW+%EyOL0}lPR_MvMw{RPtKmPfD#vJ(hNAPxW)^bq4NKBBiomBZkA`_*_k(B=E7)@naH>_q0ggnH_s^5qIL*nK{YF=G`ezx__=b=|Ofw+B1slcVs
zVmJP0_{UJs@Q1;k;R6Fd!vh9(h64=DBw>&qkY11(AhZ5ALgp4h?Jxlb2Jnu4csq=R
zf#Ee26Vnc}b_~|;b1x+M3?3s}KRshR-z~=WzW;hW@|_;g=O{
z;v9z3hOlr6`af~{-2XeKt^7YRpz#0pazB{<|J#}a-_Ki~8v--KI=s5wD!dAQS7K6D
zDSU4ksJ^>->Ei$6vSPZ1DfTWOf>)UfopP3e#^BUNsF?$A#sh-lGH355tRhAm4ja
zIT@zkDxzvGOn++S6qLFVrWZsn+dmaj4{omd-@mnS89x2k>b>qeZ{cHbxwk*hhUrIk
ze_VP0|NB_(w|MpL!~d3>AL06QZhwZm9~6F|ddsu9^?&T)Y5ynO+5Z0n(%Q-opZ@-z
zvhmOVjOp;TxBs$le};#jYei#d%-$&|XAy$dHZFa1^#8`CZ~xb1J^G*7`vX)KLh$@w
z|1yt!iGsNwL?@h?8HH_~53I~9EQPNle48=xPXtI0I!-({Pc-rD%z24tXa2<~*OKr5
z&Fc8NFsPR?@i{`iW;}ZUgm+%aiW^D@(q=wLIybKC&8O*vb1B=@2?Y>t8(s
d!w-1|h6n5n3
Date: Mon, 24 Oct 2022 11:23:02 +0200
Subject: [PATCH 33/72] fix: use display name in NSIS
Signed-off-by: Sefa Eyeoglu
---
program_info/win_install.nsi.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/program_info/win_install.nsi.in b/program_info/win_install.nsi.in
index 1c1f29dae..0cd7ea118 100644
--- a/program_info/win_install.nsi.in
+++ b/program_info/win_install.nsi.in
@@ -4,7 +4,7 @@
Unicode true
-Name "@Launcher_CommonName@"
+Name "@Launcher_DisplayName@"
InstallDir "$LOCALAPPDATA\Programs\@Launcher_CommonName@"
InstallDirRegKey HKCU "Software\@Launcher_CommonName@" "InstallDir"
RequestExecutionLevel user
@@ -113,7 +113,7 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "@Launcher_VERSION_NAME4@
;--------------------------------
; The stuff to install
-Section "@Launcher_CommonName@"
+Section "@Launcher_DisplayName@"
SectionIn RO
From b638a6ae950e472c6e6139cfdbaa2950e848efb0 Mon Sep 17 00:00:00 2001
From: flow
Date: Mon, 24 Oct 2022 09:07:41 -0300
Subject: [PATCH 34/72] fix: retry mod search job after aborting it
This way, we don't get stuck with an aborted job in our way! :o
Signed-off-by: flow
---
.../modplatform/helpers/NetworkModAPI.cpp | 1 +
launcher/ui/pages/modplatform/ModModel.cpp | 25 ++++++++++++-------
launcher/ui/pages/modplatform/ModModel.h | 1 +
3 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/launcher/modplatform/helpers/NetworkModAPI.cpp b/launcher/modplatform/helpers/NetworkModAPI.cpp
index 866e7540c..7633030e1 100644
--- a/launcher/modplatform/helpers/NetworkModAPI.cpp
+++ b/launcher/modplatform/helpers/NetworkModAPI.cpp
@@ -15,6 +15,7 @@ void NetworkModAPI::searchMods(CallerType* caller, SearchArgs&& args) const
QObject::connect(netJob, &NetJob::started, caller, [caller, netJob] { caller->setActiveJob(netJob); });
QObject::connect(netJob, &NetJob::failed, caller, &CallerType::searchRequestFailed);
+ QObject::connect(netJob, &NetJob::aborted, caller, &CallerType::searchRequestAborted);
QObject::connect(netJob, &NetJob::succeeded, caller, [caller, response] {
QJsonParseError parse_error{};
QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error);
diff --git a/launcher/ui/pages/modplatform/ModModel.cpp b/launcher/ui/pages/modplatform/ModModel.cpp
index 49766fa66..ed58eb32f 100644
--- a/launcher/ui/pages/modplatform/ModModel.cpp
+++ b/launcher/ui/pages/modplatform/ModModel.cpp
@@ -267,18 +267,25 @@ void ListModel::searchRequestFailed(QString reason)
.arg(m_parent->displayName())
.arg(tr("API version too old!\nPlease update %1!").arg(BuildConfig.LAUNCHER_DISPLAYNAME)));
}
+
+ jobPtr.reset();
+ searchState = Finished;
+}
+
+void ListModel::searchRequestAborted()
+{
+ if (searchState != ResetRequested)
+ qCritical() << "Search task in ModModel aborted by an unknown reason!";
+
+ // Retry fetching
jobPtr.reset();
- if (searchState == ResetRequested) {
- beginResetModel();
- modpacks.clear();
- endResetModel();
+ beginResetModel();
+ modpacks.clear();
+ endResetModel();
- nextSearchOffset = 0;
- performPaginatedSearch();
- } else {
- searchState = Finished;
- }
+ nextSearchOffset = 0;
+ performPaginatedSearch();
}
void ListModel::infoRequestFinished(QJsonDocument& doc, ModPlatform::IndexedPack& pack, const QModelIndex& index)
diff --git a/launcher/ui/pages/modplatform/ModModel.h b/launcher/ui/pages/modplatform/ModModel.h
index a58c7c55b..d2636d87e 100644
--- a/launcher/ui/pages/modplatform/ModModel.h
+++ b/launcher/ui/pages/modplatform/ModModel.h
@@ -51,6 +51,7 @@ class ListModel : public QAbstractListModel {
public slots:
void searchRequestFinished(QJsonDocument& doc);
void searchRequestFailed(QString reason);
+ void searchRequestAborted();
void infoRequestFinished(QJsonDocument& doc, ModPlatform::IndexedPack& pack, const QModelIndex& index);
From d9463620e601aa62342cafc3fb2fbeae5f56511c Mon Sep 17 00:00:00 2001
From: tobimori
Date: Tue, 25 Oct 2022 09:34:07 +0200
Subject: [PATCH 35/72] move .app rename to packaging process, update mac
copyright string
Signed-off-by: tobimori
---
.github/workflows/build.yml | 5 +++--
CMakeLists.txt | 16 ++++++++--------
program_info/CMakeLists.txt | 1 +
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f67ba4c7e..ac701c1e0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -249,8 +249,9 @@ jobs:
cmake --install ${{ env.BUILD_DIR }}
cd ${{ env.INSTALL_DIR }}
- chmod +x "Prism Launcher.app/Contents/MacOS/prismlauncher"
- sudo codesign --sign - --deep --force --entitlements "../program_info/App.entitlements" --options runtime "Prism Launcher.app/Contents/MacOS/prismlauncher"
+ chmod +x "PrismLauncher.app/Contents/MacOS/prismlauncher"
+ sudo codesign --sign - --deep --force --entitlements "../program_info/App.entitlements" --options runtime "PrismLauncher.app/Contents/MacOS/prismlauncher"
+ mv "PrismLauncher.app" "Prism Launcher.app"
tar -czf ../PrismLauncher.tar.gz *
- name: Make Sparkle signature (macOS)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 09f62bb3c..611ca1de7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -211,15 +211,15 @@ if(NOT (UNIX AND APPLE))
endif()
if(UNIX AND APPLE)
- set(BINARY_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS")
- set(LIBRARY_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS")
- set(PLUGIN_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS")
- set(FRAMEWORK_DEST_DIR "${Launcher_DisplayName}.app/Contents/Frameworks")
- set(RESOURCES_DEST_DIR "${Launcher_DisplayName}.app/Contents/Resources")
- set(JARS_DEST_DIR "${Launcher_DisplayName}.app/Contents/MacOS/jars")
+ set(BINARY_DEST_DIR "${Launcher_Name}.app/Contents/MacOS")
+ set(LIBRARY_DEST_DIR "${Launcher_Name}.app/Contents/MacOS")
+ set(PLUGIN_DEST_DIR "${Launcher_Name}.app/Contents/MacOS")
+ set(FRAMEWORK_DEST_DIR "${Launcher_Name}.app/Contents/Frameworks")
+ set(RESOURCES_DEST_DIR "${Launcher_Name}.app/Contents/Resources")
+ set(JARS_DEST_DIR "${Launcher_Name}.app/Contents/MacOS/jars")
# Apps to bundle
- set(APPS "\${CMAKE_INSTALL_PREFIX}/${Launcher_DisplayName}.app")
+ set(APPS "\${CMAKE_INSTALL_PREFIX}/${Launcher_Name}.app")
# Mac bundle settings
set(MACOSX_BUNDLE_BUNDLE_NAME "${Launcher_DisplayName}")
@@ -229,7 +229,7 @@ if(UNIX AND APPLE)
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${Launcher_VERSION_NAME}")
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${Launcher_VERSION_NAME}")
set(MACOSX_BUNDLE_ICON_FILE ${Launcher_Name}.icns)
- set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2021-2022 ${Launcher_Copyright}")
+ set(MACOSX_BUNDLE_COPYRIGHT "© 2021-2022 ${Launcher_Copyright_Mac}")
set(MACOSX_SPARKLE_UPDATE_PUBLIC_KEY "v55ZWWD6QlPoXGV6VLzOTZxZUggWeE51X8cRQyQh6vA=")
set(MACOSX_SPARKLE_UPDATE_FEED_URL "https://prismlauncher.org/feed/appcast.xml")
diff --git a/program_info/CMakeLists.txt b/program_info/CMakeLists.txt
index f6e2ea848..61949e137 100644
--- a/program_info/CMakeLists.txt
+++ b/program_info/CMakeLists.txt
@@ -15,6 +15,7 @@ set(Launcher_Name "${Launcher_CommonName}" PARENT_SCOPE)
set(Launcher_DisplayName "${Launcher_DisplayName}" PARENT_SCOPE)
set(Launcher_Copyright "Prism Launcher Contributors\\n© 2021-2022 PolyMC Contributors \\n© 2012-2021 MultiMC Contributors")
+set(Launcher_Copyright_Mac "Prism Launcher Contributors, © 2021-2022 PolyMC Contributors and © 2012-2021 MultiMC Contributors" PARENT_SCOPE)
set(Launcher_Copyright "${Launcher_Copyright}" PARENT_SCOPE)
set(Launcher_Domain "prismlauncher.org" PARENT_SCOPE)
set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_VERSION_NAME}" PARENT_SCOPE)
From 482d3a1d76e1c66e351b400c40d772be624cd9b9 Mon Sep 17 00:00:00 2001
From: tobimori
Date: Tue, 25 Oct 2022 15:24:41 +0200
Subject: [PATCH 36/72] update macos copyright year
Signed-off-by: tobimori
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 611ca1de7..d2111fe44 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -229,7 +229,7 @@ if(UNIX AND APPLE)
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${Launcher_VERSION_NAME}")
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${Launcher_VERSION_NAME}")
set(MACOSX_BUNDLE_ICON_FILE ${Launcher_Name}.icns)
- set(MACOSX_BUNDLE_COPYRIGHT "© 2021-2022 ${Launcher_Copyright_Mac}")
+ set(MACOSX_BUNDLE_COPYRIGHT "© 2022 ${Launcher_Copyright_Mac}")
set(MACOSX_SPARKLE_UPDATE_PUBLIC_KEY "v55ZWWD6QlPoXGV6VLzOTZxZUggWeE51X8cRQyQh6vA=")
set(MACOSX_SPARKLE_UPDATE_FEED_URL "https://prismlauncher.org/feed/appcast.xml")
From 610b9711178d164a41f76106968c3fb511570fd8 Mon Sep 17 00:00:00 2001
From: Adrien <66513643+AshtakaOOf@users.noreply.github.com>
Date: Wed, 26 Oct 2022 02:09:45 +0200
Subject: [PATCH 37/72] Improve a bit README.md (#305)
Add Open Collective and fix some stuff.
---
README.md | 44 ++++++++++++++++++++++++++------------------
1 file changed, 26 insertions(+), 18 deletions(-)
diff --git a/README.md b/README.md
index d7df8e264..dc6cdbc72 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,14 @@
-
+
+
Prism Launcher is a custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once.
This is a **fork** of the MultiMC Launcher and not endorsed by MultiMC.
+
## Installation
- All downloads and instructions for Prism Launcher can be found [on our website](https://prismlauncher.org/download/).
@@ -16,25 +18,24 @@ This is a **fork** of the MultiMC Launcher and not endorsed by MultiMC.
There are development builds available [here](https://github.com/PrismLauncher/PrismLauncher/actions). These have debug information in the binaries, so their file sizes are relatively larger.
-Portable builds are provided for on Linux, Windows, and macOS.
+Portable builds are provided for Linux, Windows, and macOS.
+
+For Arch, Debian and Gentoo, respectively, you can use these packages to get compiled development versions:
+
+[](https://aur.archlinux.org/packages/prismlauncher-qt5-git/) [](https://aur.archlinux.org/packages/prismlauncher-git/) [](https://mpr.makedeb.org/packages/prismlauncher-git) [](https://packages.gentoo.org/packages/games-action/prismlauncher)
-For Debian and Arch, you can use these packages for the latest development versions:
-[](https://aur.archlinux.org/packages/prismlauncher-git/)
-[](https://mpr.makedeb.org/packages/prismlauncher-git)
## Help & Support
-Feel free to create an issue if you need help. However, you might find it easier to ask in the Discord server.
+Feel free to create an issue if you need help.
+#### Join our Discord server:
[](https://discord.gg/prismlauncher)
-We will also soon be opening up our Matrix channels.
-You can already join our Matrix space:
+#### Join our Matrix space:
+[](https://matrix.to/#/#prismlauncher:matrix.org)
-[](https://matrix.to/#/#prismlauncher:matrix.org)
-
-We also have a subreddit you can post your issues and suggestions on:
-
-[r/PrismLauncher](https://www.reddit.com/r/PrismLauncher/)
+#### Join our SubReddit:
+[](https://www.reddit.com/r/PrismLauncher/)
## Building
@@ -60,13 +61,11 @@ Be aware that if you build this software without removing the provided API keys
If you do not agree with these terms and conditions, then remove the associated API keys from the [CMakeLists.txt](CMakeLists.txt) file by setting them to an empty string (`""`).
-## License
+## Sponsors & Partners
-All launcher code is available under the GPL-3.0-only license.
-
-The logo and related assets are under the CC BY-SA 4.0 license.
+We thank all the wonderful backers over at Open Collective! Support Prism Launcher by [becoming a backer](https://opencollective.com/prismlauncher).
-## Sponsors
+[](https://opencollective.com/prismlauncher#backers)
Thanks to JetBrains for providing us a few licenses for all their products, as part of their [Open Source program](https://www.jetbrains.com/opensource/).
@@ -85,3 +84,12 @@ Thanks to Netlify for providing us their excellent web services, as part of thei
Thanks to the awesome people over at [MacStadium](https://www.macstadium.com/), for providing M1-Macs for development purposes!
+
+
+## License
+
+All launcher code is available under the GPL-3.0-only license.
+
+
+
+The logo and related assets are under the CC BY-SA 4.0 license.
From 990cfb7b3378aa5c4f0482c1f6ef4bfa8b073e81 Mon Sep 17 00:00:00 2001
From: Adrien <66513643+AshtakaOOf@users.noreply.github.com>
Date: Thu, 27 Oct 2022 18:08:56 +0200
Subject: [PATCH 38/72] Remove appveyor
I forgor :skull:
But seriously I forgor to remove the &logo=appveyor thing AAAAAH!!!
Signed-off-by: Adrien <66513643+AshtakaOOf@users.noreply.github.com>
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index dc6cdbc72..db0e2c623 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ Portable builds are provided for Linux, Windows, and macOS.
For Arch, Debian and Gentoo, respectively, you can use these packages to get compiled development versions:
-[](https://aur.archlinux.org/packages/prismlauncher-qt5-git/) [](https://aur.archlinux.org/packages/prismlauncher-git/) [](https://mpr.makedeb.org/packages/prismlauncher-git) [](https://packages.gentoo.org/packages/games-action/prismlauncher)
+[](https://aur.archlinux.org/packages/prismlauncher-qt5-git/) [](https://aur.archlinux.org/packages/prismlauncher-git/) [](https://mpr.makedeb.org/packages/prismlauncher-git) [](https://packages.gentoo.org/packages/games-action/prismlauncher)
## Help & Support
@@ -32,10 +32,10 @@ Feel free to create an issue if you need help.
[](https://discord.gg/prismlauncher)
#### Join our Matrix space:
-[](https://matrix.to/#/#prismlauncher:matrix.org)
+[](https://matrix.to/#/#prismlauncher:matrix.org)
#### Join our SubReddit:
-[](https://www.reddit.com/r/PrismLauncher/)
+[](https://www.reddit.com/r/PrismLauncher/)
## Building
From b18466da8430ba782e59f50812f3724defa1f2a9 Mon Sep 17 00:00:00 2001
From: TheLastRar
Date: Thu, 27 Oct 2022 12:29:41 +0100
Subject: [PATCH 39/72] Fix: Don't specify x86 in manifest
Signed-off-by: TheLastRar
---
program_info/prismlauncher.manifest.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/program_info/prismlauncher.manifest.in b/program_info/prismlauncher.manifest.in
index 1d7644450..6f4467c7d 100644
--- a/program_info/prismlauncher.manifest.in
+++ b/program_info/prismlauncher.manifest.in
@@ -10,7 +10,7 @@
-
+
Custom Minecraft launcher for managing multiple installs.
From d35c985d2ebca44903bedba87c99efb8db0f158d Mon Sep 17 00:00:00 2001
From: DioEgizio <83089242+DioEgizio@users.noreply.github.com>
Date: Sun, 23 Oct 2022 12:57:29 +0200
Subject: [PATCH 40/72] feat(actions): use clang32 for building on windows
*way* faster
Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com>
---
.github/workflows/build.yml | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b6400791d..a7dd31d7e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -30,12 +30,12 @@ jobs:
- os: windows-2022
name: "Windows-Legacy"
- msystem: mingw32
+ msystem: clang32
qt_ver: 5
- os: windows-2022
name: "Windows"
- msystem: mingw32
+ msystem: clang32
qt_ver: 6
- os: macos-12
@@ -89,6 +89,7 @@ jobs:
update: true
install: >-
git
+ mingw-w64-x86_64-binutils
pacboy: >-
toolchain:p
cmake:p
@@ -99,7 +100,6 @@ jobs:
qt${{ matrix.qt_ver }}-imageformats:p
quazip-qt${{ matrix.qt_ver }}:p
ccache:p
- nsis:p
${{ matrix.qt_ver == 6 && 'qt6-5compat:p' || '' }}
- name: Setup ccache
@@ -194,7 +194,7 @@ jobs:
if: runner.os == 'Windows'
shell: msys2 {0}
run: |
- cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=${{ matrix.name }} -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -G Ninja
+ cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=${{ matrix.name }} -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_OBJDUMP=/mingw64/bin/objdump.exe -G Ninja
- name: Configure CMake (Linux)
if: runner.os == 'Linux'
@@ -280,7 +280,7 @@ jobs:
cd ${{ env.INSTALL_DIR }}
if [ "${{ matrix.qt_ver }}" == "5" ]; then
- cp /mingw32/bin/libcrypto-1_1.dll /mingw32/bin/libssl-1_1.dll ./
+ cp /clang32/bin/libcrypto-1_1.dll /clang32/bin/libssl-1_1.dll ./
fi
- name: Package (Windows, portable)
@@ -292,7 +292,6 @@ jobs:
- name: Package (Windows, installer)
if: runner.os == 'Windows'
- shell: msys2 {0}
run: |
cd ${{ env.INSTALL_DIR }}
makensis -NOCD "${{ github.workspace }}/${{ env.BUILD_DIR }}/program_info/win_install.nsi"
From 2ba3de79d8df31d196f0cd249b1606e7233cf840 Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Thu, 27 Oct 2022 21:14:30 +0200
Subject: [PATCH 41/72] chore: add comment about copy bug
Signed-off-by: Sefa Eyeoglu
---
launcher/FileSystem.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp
index 39e68c207..76cfccb0b 100644
--- a/launcher/FileSystem.cpp
+++ b/launcher/FileSystem.cpp
@@ -401,6 +401,7 @@ bool overrideFolder(QString overwritten_path, QString override_path)
std::error_code err;
fs::copy_options opt = copy_opts::recursive | copy_opts::overwrite_existing;
+ // FIXME: hello traveller! Apparently std::copy does NOT overwrite existing files on GNU libstdc++ on Windows?
fs::copy(toStdString(override_path), toStdString(overwritten_path), opt, err);
if (err) {
From 93894f62ffcb8c33caf36e8801e163738cc2873d Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Fri, 28 Oct 2022 00:05:11 +0200
Subject: [PATCH 42/72] fix: avoid segfault for unexpected API reponse
Signed-off-by: Sefa Eyeoglu
---
.../modrinth/ModrinthPackIndex.cpp | 55 +++++++++++--------
1 file changed, 31 insertions(+), 24 deletions(-)
diff --git a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp
index 3e53becb4..ae45e0966 100644
--- a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp
+++ b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp
@@ -1,20 +1,20 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
-* PolyMC - Minecraft Launcher
-* Copyright (c) 2022 flowln
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, version 3.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see .
-*/
+ * PolyMC - Minecraft Launcher
+ * Copyright (c) 2022 flowln
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
#include "ModrinthPackIndex.h"
#include "ModrinthAPI.h"
@@ -35,7 +35,7 @@ void Modrinth::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj)
pack.provider = ModPlatform::Provider::MODRINTH;
pack.name = Json::requireString(obj, "title");
-
+
pack.slug = Json::ensureString(obj, "slug", "");
if (!pack.slug.isEmpty())
pack.websiteUrl = "https://modrinth.com/mod/" + pack.slug;
@@ -59,23 +59,23 @@ void Modrinth::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj)
void Modrinth::loadExtraPackData(ModPlatform::IndexedPack& pack, QJsonObject& obj)
{
pack.extraData.issuesUrl = Json::ensureString(obj, "issues_url");
- if(pack.extraData.issuesUrl.endsWith('/'))
+ if (pack.extraData.issuesUrl.endsWith('/'))
pack.extraData.issuesUrl.chop(1);
pack.extraData.sourceUrl = Json::ensureString(obj, "source_url");
- if(pack.extraData.sourceUrl.endsWith('/'))
+ if (pack.extraData.sourceUrl.endsWith('/'))
pack.extraData.sourceUrl.chop(1);
pack.extraData.wikiUrl = Json::ensureString(obj, "wiki_url");
- if(pack.extraData.wikiUrl.endsWith('/'))
+ if (pack.extraData.wikiUrl.endsWith('/'))
pack.extraData.wikiUrl.chop(1);
pack.extraData.discordUrl = Json::ensureString(obj, "discord_url");
- if(pack.extraData.discordUrl.endsWith('/'))
+ if (pack.extraData.discordUrl.endsWith('/'))
pack.extraData.discordUrl.chop(1);
auto donate_arr = Json::ensureArray(obj, "donation_urls");
- for(auto d : donate_arr){
+ for (auto d : donate_arr) {
auto d_obj = Json::requireObject(d);
ModPlatform::DonationData donate;
@@ -104,7 +104,7 @@ void Modrinth::loadIndexedPackVersions(ModPlatform::IndexedPack& pack,
auto obj = versionIter.toObject();
auto file = loadIndexedPackVersion(obj);
- if(file.fileId.isValid()) // Heuristic to check if the returned value is valid
+ if (file.fileId.isValid()) // Heuristic to check if the returned value is valid
unsortedVersions.append(file);
}
auto orderSortPredicate = [](const ModPlatform::IndexedVersion& a, const ModPlatform::IndexedVersion& b) -> bool {
@@ -116,7 +116,8 @@ void Modrinth::loadIndexedPackVersions(ModPlatform::IndexedPack& pack,
pack.versionsLoaded = true;
}
-auto Modrinth::loadIndexedPackVersion(QJsonObject &obj, QString preferred_hash_type, QString preferred_file_name) -> ModPlatform::IndexedVersion
+auto Modrinth::loadIndexedPackVersion(QJsonObject& obj, QString preferred_hash_type, QString preferred_file_name)
+ -> ModPlatform::IndexedVersion
{
ModPlatform::IndexedVersion file;
@@ -141,6 +142,12 @@ auto Modrinth::loadIndexedPackVersion(QJsonObject &obj, QString preferred_hash_t
auto files = Json::requireArray(obj, "files");
int i = 0;
+ if (files.empty()) {
+ // This should not happen normally, but check just in case
+ qWarning() << "Modrinth returned an unexpected empty list of files:" << obj;
+ return {};
+ }
+
// Find correct file (needed in cases where one version may have multiple files)
// Will default to the last one if there's no primary (though I think Modrinth requires that
// at least one file is primary, idk)
@@ -167,7 +174,7 @@ auto Modrinth::loadIndexedPackVersion(QJsonObject &obj, QString preferred_hash_t
file.fileName = Json::requireString(parent, "filename");
file.is_preferred = Json::requireBoolean(parent, "primary") || (files.count() == 1);
auto hash_list = Json::requireObject(parent, "hashes");
-
+
if (hash_list.contains(preferred_hash_type)) {
file.hash = Json::requireString(hash_list, preferred_hash_type);
file.hash_type = preferred_hash_type;
From a5be974f1a53a8e56527d639beb4c16f3a7e18c6 Mon Sep 17 00:00:00 2001
From: DioEgizio <83089242+DioEgizio@users.noreply.github.com>
Date: Thu, 27 Oct 2022 21:05:32 +0200
Subject: [PATCH 43/72] feat: use clang64 on qt6 builds
Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com>
---
.github/workflows/build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ca82d3d8f..dd2c05994 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -35,7 +35,7 @@ jobs:
- os: windows-2022
name: "Windows"
- msystem: clang32
+ msystem: clang64
qt_ver: 6
- os: macos-12
From e6e92f2b0e9ef16bdbae371ccb284339a70cff02 Mon Sep 17 00:00:00 2001
From: flow
Date: Fri, 28 Oct 2022 13:31:21 -0300
Subject: [PATCH 44/72] fix: only allow workarounds for blocked mods from MR
when 100% safe
If a version on Modrinth has more than a single mod loader associated,
it means that it's possible we might get the wrong file for download,
since individual files don't really have this kind of metadata in the
API response.
So, in such cases, it's best to let the user take care of it instead.
Signed-off-by: flow
---
.../modplatform/flame/FileResolvingTask.cpp | 23 +++++++++++--------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp
index c50abb8f2..25b56fbd1 100644
--- a/launcher/modplatform/flame/FileResolvingTask.cpp
+++ b/launcher/modplatform/flame/FileResolvingTask.cpp
@@ -3,6 +3,8 @@
#include "Json.h"
#include "net/Upload.h"
+#include "modplatform/modrinth/ModrinthPackIndex.h"
+
Flame::FileResolvingTask::FileResolvingTask(const shared_qobject_ptr& network, Flame::Manifest& toProcess)
: m_network(network), m_toProcess(toProcess)
{}
@@ -84,18 +86,21 @@ void Flame::FileResolvingTask::modrinthCheckFinished() {
delete bytes;
continue;
}
+
QJsonDocument doc = QJsonDocument::fromJson(*bytes);
auto obj = doc.object();
- auto array = Json::requireArray(obj,"files");
- for (auto file: array) {
- auto fileObj = Json::requireObject(file);
- auto primary = Json::requireBoolean(fileObj,"primary");
- if (primary) {
- out->url = Json::requireUrl(fileObj,"url");
- qDebug() << "Found alternative on modrinth " << out->fileName;
- break;
- }
+ auto file = Modrinth::loadIndexedPackVersion(obj);
+
+ // If there's more than one mod loader for this version, we can't know for sure
+ // which file is relative to each loader, so it's best to not use any one and
+ // let the user download it manually.
+ if (file.loaders.size() <= 1) {
+ out->url = file.downloadUrl;
+ qDebug() << "Found alternative on modrinth " << out->fileName;
+ } else {
+ out->resolved = false;
}
+
delete bytes;
}
//copy to an output list and filter out projects found on modrinth
From 76146e0f17dc56a68128edb13a73f4852af86e84 Mon Sep 17 00:00:00 2001
From: leo78913
Date: Fri, 28 Oct 2022 15:51:20 -0300
Subject: [PATCH 45/72] add a flat white version of the launch icon
Signed-off-by: leo78913
---
launcher/resources/flat_white/flat_white.qrc | 1 +
.../resources/flat_white/scalable/launch.svg | 16 ++++++++++++++++
2 files changed, 17 insertions(+)
create mode 100644 launcher/resources/flat_white/scalable/launch.svg
diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc
index 9df690600..e11d63165 100644
--- a/launcher/resources/flat_white/flat_white.qrc
+++ b/launcher/resources/flat_white/flat_white.qrc
@@ -46,5 +46,6 @@
scalable/export.svg
scalable/rename.svg
scalable/tag.svg
+ scalable/launch.svg
diff --git a/launcher/resources/flat_white/scalable/launch.svg b/launcher/resources/flat_white/scalable/launch.svg
new file mode 100644
index 000000000..9e7594318
--- /dev/null
+++ b/launcher/resources/flat_white/scalable/launch.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
From be3c9abcfeb68ad76914848e7135b2595490beda Mon Sep 17 00:00:00 2001
From: flow
Date: Fri, 28 Oct 2022 20:11:46 -0300
Subject: [PATCH 46/72] fix: copy single files too in FS::copy
eek
Signed-off-by: flow
---
launcher/FileSystem.cpp | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp
index 76cfccb0b..9bca847e7 100644
--- a/launcher/FileSystem.cpp
+++ b/launcher/FileSystem.cpp
@@ -182,6 +182,21 @@ bool copy::operator()(const QString& offset)
if (!m_followSymlinks)
opt |= copy_opts::copy_symlinks;
+ // Function that'll do the actual copying
+ auto copy_file = [&](QString src_path, QString relative_dst_path) {
+ if (m_blacklist && m_blacklist->matches(relative_dst_path))
+ return;
+
+ auto dst_path = PathCombine(dst, relative_dst_path);
+ ensureFilePathExists(dst_path);
+
+ fs::copy(toStdString(src_path), toStdString(dst_path), opt, err);
+ if (err) {
+ qWarning() << "Failed to copy files:" << QString::fromStdString(err.message());
+ qDebug() << "Source file:" << src_path;
+ qDebug() << "Destination file:" << dst_path;
+ }
+ };
// We can't use copy_opts::recursive because we need to take into account the
// blacklisted paths, so we iterate over the source directory, and if there's no blacklist
@@ -193,20 +208,13 @@ bool copy::operator()(const QString& offset)
auto src_path = source_it.next();
auto relative_path = src_dir.relativeFilePath(src_path);
- if (m_blacklist && m_blacklist->matches(relative_path))
- continue;
-
- auto dst_path = PathCombine(dst, relative_path);
- ensureFilePathExists(dst_path);
-
- fs::copy(toStdString(src_path), toStdString(dst_path), opt, err);
- if (err) {
- qWarning() << "Failed to copy files:" << QString::fromStdString(err.message());
- qDebug() << "Source file:" << src_path;
- qDebug() << "Destination file:" << dst_path;
- }
+ copy_file(src_path, relative_path);
}
+ // If the root src is not a directory, the previous iterator won't run.
+ if (!fs::is_directory(toStdString(src)))
+ copy_file(src, "");
+
return err.value() == 0;
}
From 81333515e0ecfa0ad0880032808a220a3f463e30 Mon Sep 17 00:00:00 2001
From: flow
Date: Fri, 28 Oct 2022 20:55:25 -0300
Subject: [PATCH 47/72] feat(tests): add test for FS::copy with files
Signed-off-by: flow
---
tests/FileSystem_test.cpp | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/tests/FileSystem_test.cpp b/tests/FileSystem_test.cpp
index 47a963b0c..21270f6f6 100644
--- a/tests/FileSystem_test.cpp
+++ b/tests/FileSystem_test.cpp
@@ -183,6 +183,32 @@ slots:
f();
}
+ void test_copy_single_file()
+ {
+ QTemporaryDir tempDir;
+ tempDir.setAutoRemove(true);
+
+ {
+ QString file = QFINDTESTDATA("testdata/FileSystem/test_folder/pack.mcmeta");
+
+ qDebug() << "From:" << file << "To:" << tempDir.path();
+
+ QDir target_dir(FS::PathCombine(tempDir.path(), "pack.mcmeta"));
+ qDebug() << tempDir.path();
+ qDebug() << target_dir.path();
+ FS::copy c(file, target_dir.filePath("pack.mcmeta"));
+ c();
+
+ auto filter = QDir::Filter::Files;
+
+ for (auto entry: target_dir.entryList(filter)) {
+ qDebug() << entry;
+ }
+
+ QVERIFY(target_dir.entryList(filter).contains("pack.mcmeta"));
+ }
+ }
+
void test_getDesktop()
{
QCOMPARE(FS::getDesktopDir(), QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
From 5ed7eb9d537558da603683d517f5537f0e4537a1 Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Sat, 29 Oct 2022 13:12:51 +0200
Subject: [PATCH 48/72] chore: update credits
Signed-off-by: Sefa Eyeoglu
---
launcher/ui/dialogs/AboutDialog.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/ui/dialogs/AboutDialog.cpp b/launcher/ui/dialogs/AboutDialog.cpp
index cecda1df5..52d6baef4 100644
--- a/launcher/ui/dialogs/AboutDialog.cpp
+++ b/launcher/ui/dialogs/AboutDialog.cpp
@@ -97,7 +97,7 @@ QString getCreditsHtml()
stream << " \n";
stream << "" << QObject::tr("With thanks to", "About Credits") << " \n";
- stream << QString("Boba %1
\n") .arg(getWebsite("https://cmdplusv.neocities.org/"));
+ stream << QString("Boba %1
\n") .arg(getWebsite("https://bobaonline.neocities.org/"));
stream << QString("Davi Rafael %1
\n") .arg(getWebsite("https://auti.one/"));
stream << QString("Fulmine %1
\n") .arg(getWebsite("https://www.fulmine.xyz/"));
stream << QString("ely %1
\n") .arg(getGitHub("elyrodso"));
From 7f991ed897d0f344166511daddde4aa4994a67b0 Mon Sep 17 00:00:00 2001
From: txtsd
Date: Sat, 29 Oct 2022 19:24:12 +0530
Subject: [PATCH 49/72] feat: Add Repology badge to README
Signed-off-by: txtsd
---
README.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/README.md b/README.md
index db0e2c623..57f1e30a3 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,10 @@ This is a **fork** of the MultiMC Launcher and not endorsed by MultiMC.
## Installation
+
+
+
+
- All downloads and instructions for Prism Launcher can be found [on our website](https://prismlauncher.org/download/).
- Last build status can be found [here](https://github.com/PrismLauncher/PrismLauncher/actions).
From b142a6da5b2ae433ce8164c7be0a3c3870131414 Mon Sep 17 00:00:00 2001
From: fn2006
Date: Sat, 29 Oct 2022 16:10:18 +0100
Subject: [PATCH 50/72] fix hardcoded svg
Signed-off-by: fn2006
---
buildconfig/BuildConfig.cpp.in | 1 +
buildconfig/BuildConfig.h | 1 +
launcher/Application.cpp | 2 +-
program_info/CMakeLists.txt | 1 +
4 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/buildconfig/BuildConfig.cpp.in b/buildconfig/BuildConfig.cpp.in
index b8fa51339..1262ce8e4 100644
--- a/buildconfig/BuildConfig.cpp.in
+++ b/buildconfig/BuildConfig.cpp.in
@@ -49,6 +49,7 @@ Config::Config()
LAUNCHER_CONFIGFILE = "@Launcher_ConfigFile@";
LAUNCHER_GIT = "@Launcher_Git@";
LAUNCHER_DESKTOPFILENAME = "@Launcher_DesktopFileName@";
+ LAUNCHER_SVGFILENAME = "@Launcher_SVGFileName@";
USER_AGENT = "@Launcher_UserAgent@";
USER_AGENT_UNCACHED = USER_AGENT + " (Uncached)";
diff --git a/buildconfig/BuildConfig.h b/buildconfig/BuildConfig.h
index 13ccdaa18..4a3090736 100644
--- a/buildconfig/BuildConfig.h
+++ b/buildconfig/BuildConfig.h
@@ -51,6 +51,7 @@ class Config {
QString LAUNCHER_CONFIGFILE;
QString LAUNCHER_GIT;
QString LAUNCHER_DESKTOPFILENAME;
+ QString LAUNCHER_SVGFILENAME;
/// The major version number.
int VERSION_MAJOR;
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index f6b418502..c6814abf5 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -1177,7 +1177,7 @@ void Application::setIconTheme(const QString& name)
QIcon Application::getThemedIcon(const QString& name)
{
if(name == "logo") {
- return QIcon(":/org.prismlauncher.PrismLauncher.svg"); // FIXME: Make this a BuildConfig variable
+ return QIcon(":/" + BuildConfig.LAUNCHER_SVGFILENAME);
}
return QIcon::fromTheme(name);
}
diff --git a/program_info/CMakeLists.txt b/program_info/CMakeLists.txt
index 61949e137..b0507816b 100644
--- a/program_info/CMakeLists.txt
+++ b/program_info/CMakeLists.txt
@@ -22,6 +22,7 @@ set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_VERSION_NAME}" PARENT_
set(Launcher_ConfigFile "prismlauncher.cfg" PARENT_SCOPE)
set(Launcher_Git "https://github.com/PrismLauncher/PrismLauncher" PARENT_SCOPE)
set(Launcher_DesktopFileName "org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
+set(Launcher_SVGFileName "org.prismlauncher.PrismLauncher.svg" PARENT_SCOPE)
set(Launcher_Desktop "program_info/org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
set(Launcher_MetaInfo "program_info/org.prismlauncher.PrismLauncher.metainfo.xml" PARENT_SCOPE)
From 98891a036dcd96dc7d9bf6b8f11c2a5f2ddd054e Mon Sep 17 00:00:00 2001
From: fn2006
Date: Sat, 29 Oct 2022 17:35:37 +0100
Subject: [PATCH 51/72] use existing variables
Signed-off-by: fn2006
---
program_info/CMakeLists.txt | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/program_info/CMakeLists.txt b/program_info/CMakeLists.txt
index b0507816b..f064e0984 100644
--- a/program_info/CMakeLists.txt
+++ b/program_info/CMakeLists.txt
@@ -21,12 +21,12 @@ set(Launcher_Domain "prismlauncher.org" PARENT_SCOPE)
set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_VERSION_NAME}" PARENT_SCOPE)
set(Launcher_ConfigFile "prismlauncher.cfg" PARENT_SCOPE)
set(Launcher_Git "https://github.com/PrismLauncher/PrismLauncher" PARENT_SCOPE)
-set(Launcher_DesktopFileName "org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
-set(Launcher_SVGFileName "org.prismlauncher.PrismLauncher.svg" PARENT_SCOPE)
+set(Launcher_DesktopFileName "org.prismlauncher.PrismLauncher.desktop")
+set(Launcher_SVGFileName "org.prismlauncher.PrismLauncher.svg")
-set(Launcher_Desktop "program_info/org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
+set(Launcher_Desktop "program_info/${Launcher_DesktopFileName}" PARENT_SCOPE)
set(Launcher_MetaInfo "program_info/org.prismlauncher.PrismLauncher.metainfo.xml" PARENT_SCOPE)
-set(Launcher_SVG "program_info/org.prismlauncher.PrismLauncher.svg" PARENT_SCOPE)
+set(Launcher_SVG "program_info/${Launcher_SVGFileName}" PARENT_SCOPE)
set(Launcher_Branding_ICNS "program_info/prismlauncher.icns" PARENT_SCOPE)
set(Launcher_Branding_ICO "program_info/prismlauncher.ico")
set(Launcher_Branding_ICO "${Launcher_Branding_ICO}" PARENT_SCOPE)
From 19a8d51bf3567950db77d6bc05b16373fd1a0a1d Mon Sep 17 00:00:00 2001
From: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
Date: Sun, 30 Oct 2022 11:52:16 +0800
Subject: [PATCH 52/72] fix: more user friendly Java warning text
Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
---
launcher/minecraft/launch/VerifyJavaInstall.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/launcher/minecraft/launch/VerifyJavaInstall.cpp b/launcher/minecraft/launch/VerifyJavaInstall.cpp
index 99809f828..43f118f44 100644
--- a/launcher/minecraft/launch/VerifyJavaInstall.cpp
+++ b/launcher/minecraft/launch/VerifyJavaInstall.cpp
@@ -71,5 +71,7 @@ void VerifyJavaInstall::executeTask() {
{
emit logLine(tr("Java version %1").arg(major), MessageLevel::Error);
}
+ emit logLine(tr("If you are sure your version will work, go to instance settings and check \"Skip Java compatibility checks\"."), MessageLevel::Error);
+
emitFailed(QString("Incompatible Java major version"));
}
From b4be28b9bb29609212b398a5f46ee4dbc400cf2d Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Sun, 30 Oct 2022 18:37:03 +0100
Subject: [PATCH 53/72] fix: fix disabled trash undo action
Signed-off-by: Sefa Eyeoglu
---
launcher/ui/MainWindow.cpp | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp
index 559ebc316..55f3e4f85 100644
--- a/launcher/ui/MainWindow.cpp
+++ b/launcher/ui/MainWindow.cpp
@@ -1134,11 +1134,6 @@ void MainWindow::showInstanceContextMenu(const QPoint &pos)
connect(actionDeleteGroup, SIGNAL(triggered(bool)), SLOT(deleteGroup()));
actions.append(actionDeleteGroup);
}
-
- QAction *actionUndoTrashInstance = new QAction("Undo last trash instance", this);
- connect(actionUndoTrashInstance, SIGNAL(triggered(bool)), SLOT(undoTrashInstance()));
- actionUndoTrashInstance->setEnabled(APPLICATION->instances()->trashedSomething());
- actions.append(actionUndoTrashInstance);
}
QMenu myMenu;
myMenu.addActions(actions);
@@ -1834,6 +1829,7 @@ void MainWindow::deleteGroup()
void MainWindow::undoTrashInstance()
{
APPLICATION->instances()->undoTrashInstance();
+ ui->actionUndoTrashInstance->setEnabled(APPLICATION->instances()->trashedSomething());
}
void MainWindow::on_actionViewInstanceFolder_triggered()
@@ -1940,6 +1936,7 @@ void MainWindow::on_actionDeleteInstance_triggered()
auto id = m_selectedInstance->id();
if (APPLICATION->instances()->trashInstance(id)) {
+ ui->actionUndoTrashInstance->setEnabled(APPLICATION->instances()->trashedSomething());
return;
}
From fd099166c6a69bf77491cef8aa42cbdf06c78e35 Mon Sep 17 00:00:00 2001
From: TheLastRar
Date: Sun, 30 Oct 2022 20:27:37 +0000
Subject: [PATCH 54/72] Fix: Check if Windows 10 before calling
setDarkWinTitlebar()
Signed-off-by: TheLastRar
---
launcher/Application.cpp | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index c6814abf5..38613280a 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -62,6 +62,7 @@
#ifdef Q_OS_WIN
#include "ui/WinDarkmode.h"
+#include
#endif
#include "ui/setupwizard/SetupWizard.h"
@@ -1154,7 +1155,7 @@ void Application::setApplicationTheme(const QString& name, bool initial)
auto & theme = (*themeIter).second;
theme->apply(initial);
#ifdef Q_OS_WIN
- if (m_mainWindow) {
+ if (m_mainWindow && IsWindows10OrGreater()) {
if (QString::compare(theme->id(), "dark") == 0) {
WinDarkmode::setDarkWinTitlebar(m_mainWindow->winId(), true);
} else {
@@ -1395,10 +1396,13 @@ MainWindow* Application::showMainWindow(bool minimized)
m_mainWindow->restoreState(QByteArray::fromBase64(APPLICATION->settings()->get("MainWindowState").toByteArray()));
m_mainWindow->restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("MainWindowGeometry").toByteArray()));
#ifdef Q_OS_WIN
- if (QString::compare(settings()->get("ApplicationTheme").toString(), "dark") == 0) {
- WinDarkmode::setDarkWinTitlebar(m_mainWindow->winId(), true);
- } else {
- WinDarkmode::setDarkWinTitlebar(m_mainWindow->winId(), false);
+ if (IsWindows10OrGreater())
+ {
+ if (QString::compare(settings()->get("ApplicationTheme").toString(), "dark") == 0) {
+ WinDarkmode::setDarkWinTitlebar(m_mainWindow->winId(), true);
+ } else {
+ WinDarkmode::setDarkWinTitlebar(m_mainWindow->winId(), false);
+ }
}
#endif
if(minimized)
From b7d5fee9956a2fe7801f009eb7905eeae4f09c34 Mon Sep 17 00:00:00 2001
From: Fayne Aldan
Date: Sun, 30 Oct 2022 15:55:15 -0600
Subject: [PATCH 55/72] Change Profiles to Accounts for consistency
Signed-off-by: Fayne Aldan
---
launcher/ui/MainWindow.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp
index 559ebc316..84a789415 100644
--- a/launcher/ui/MainWindow.cpp
+++ b/launcher/ui/MainWindow.cpp
@@ -527,7 +527,7 @@ public:
menuBar->addMenu(foldersMenu);
- profileMenu = menuBar->addMenu(tr("&Profiles"));
+ profileMenu = menuBar->addMenu(tr("&Accounts"));
profileMenu->setSeparatorsCollapsible(false);
profileMenu->addAction(actionManageAccounts);
@@ -1052,7 +1052,7 @@ void MainWindow::retranslateUi()
accountMenuButton->setText(profileLabel);
}
else {
- accountMenuButton->setText(tr("Profiles"));
+ accountMenuButton->setText(tr("Accounts"));
}
if (m_selectedInstance) {
@@ -1395,7 +1395,7 @@ void MainWindow::defaultAccountChanged()
// Set the icon to the "no account" icon.
accountMenuButton->setIcon(APPLICATION->getThemedIcon("noaccount"));
- accountMenuButton->setText(tr("Profiles"));
+ accountMenuButton->setText(tr("Accounts"));
}
bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
From 42350e689d9dba0c9385f15e7d4c4da0a71f200c Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Sun, 30 Oct 2022 23:50:56 +0100
Subject: [PATCH 56/72] chore: improve display names of certain languages
Signed-off-by: Sefa Eyeoglu
---
launcher/translations/TranslationsModel.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/launcher/translations/TranslationsModel.cpp b/launcher/translations/TranslationsModel.cpp
index 2f57de3a9..20aa6d040 100644
--- a/launcher/translations/TranslationsModel.cpp
+++ b/launcher/translations/TranslationsModel.cpp
@@ -83,6 +83,12 @@ struct Language
else if(key == "es_UY") {
result = u8"español de Latinoamérica";
}
+ else if(key == "en@pirate") {
+ result = u8"Tongue of the High Seas";
+ }
+ else if(key == "en@uwu") {
+ result = u8"Cute Engwish";
+ }
else {
result = locale.nativeLanguageName();
}
From 27dfe30fe61055de5591d60c43351c7b2ca22668 Mon Sep 17 00:00:00 2001
From: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
Date: Mon, 31 Oct 2022 14:44:11 +0800
Subject: [PATCH 57/72] Update VerifyJavaInstall.cpp
Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
---
launcher/minecraft/launch/VerifyJavaInstall.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/minecraft/launch/VerifyJavaInstall.cpp b/launcher/minecraft/launch/VerifyJavaInstall.cpp
index 43f118f44..89ece6e59 100644
--- a/launcher/minecraft/launch/VerifyJavaInstall.cpp
+++ b/launcher/minecraft/launch/VerifyJavaInstall.cpp
@@ -71,7 +71,7 @@ void VerifyJavaInstall::executeTask() {
{
emit logLine(tr("Java version %1").arg(major), MessageLevel::Error);
}
- emit logLine(tr("If you are sure your version will work, go to instance settings and check \"Skip Java compatibility checks\"."), MessageLevel::Error);
+ emit logLine(tr(""Go to instance Java settings to change your Java version or disable the Java compatibility check if you know what you're doing."), MessageLevel::Error);
emitFailed(QString("Incompatible Java major version"));
}
From 8467daa0ec71544b86fadae5bbaca9818f21254e Mon Sep 17 00:00:00 2001
From: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
Date: Mon, 31 Oct 2022 14:58:38 +0800
Subject: [PATCH 58/72] oop
Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
---
launcher/minecraft/launch/VerifyJavaInstall.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/minecraft/launch/VerifyJavaInstall.cpp b/launcher/minecraft/launch/VerifyJavaInstall.cpp
index 89ece6e59..6ae666b47 100644
--- a/launcher/minecraft/launch/VerifyJavaInstall.cpp
+++ b/launcher/minecraft/launch/VerifyJavaInstall.cpp
@@ -71,7 +71,7 @@ void VerifyJavaInstall::executeTask() {
{
emit logLine(tr("Java version %1").arg(major), MessageLevel::Error);
}
- emit logLine(tr(""Go to instance Java settings to change your Java version or disable the Java compatibility check if you know what you're doing."), MessageLevel::Error);
+ emit logLine(tr("Go to instance Java settings to change your Java version or disable the Java compatibility check if you know what you're doing."), MessageLevel::Error);
emitFailed(QString("Incompatible Java major version"));
}
From 29d362a6e08f28ac48e737510a17ae7b3b717850 Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Sun, 30 Oct 2022 18:54:52 +0100
Subject: [PATCH 59/72] fix: do not trash instances in Flatpak
Signed-off-by: Sefa Eyeoglu
---
launcher/Application.cpp | 9 ---------
launcher/Application.h | 2 --
launcher/DesktopServices.cpp | 19 ++++++++++++++-----
launcher/DesktopServices.h | 2 ++
launcher/FileSystem.cpp | 4 ++++
launcher/ui/pages/global/LauncherPage.cpp | 3 ++-
6 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index c6814abf5..0c370b42b 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -1136,15 +1136,6 @@ std::vector Application::getValidApplicationThemes()
return ret;
}
-bool Application::isFlatpak()
-{
- #ifdef Q_OS_LINUX
- return QFile::exists("/.flatpak-info");
- #else
- return false;
- #endif
-}
-
void Application::setApplicationTheme(const QString& name, bool initial)
{
auto systemPalette = qApp->palette();
diff --git a/launcher/Application.h b/launcher/Application.h
index c453cc28b..8fa0ab10e 100644
--- a/launcher/Application.h
+++ b/launcher/Application.h
@@ -116,8 +116,6 @@ public:
QIcon getThemedIcon(const QString& name);
- bool isFlatpak();
-
void setIconTheme(const QString& name);
std::vector getValidApplicationThemes();
diff --git a/launcher/DesktopServices.cpp b/launcher/DesktopServices.cpp
index c29cbe7d0..302eaf967 100644
--- a/launcher/DesktopServices.cpp
+++ b/launcher/DesktopServices.cpp
@@ -119,7 +119,7 @@ bool openDirectory(const QString &path, bool ensureExists)
return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath()));
};
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!APPLICATION->isFlatpak())
+ if(!isFlatpak())
{
return IndirectOpen(f);
}
@@ -140,7 +140,7 @@ bool openFile(const QString &path)
return QDesktopServices::openUrl(QUrl::fromLocalFile(path));
};
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!APPLICATION->isFlatpak())
+ if(!isFlatpak())
{
return IndirectOpen(f);
}
@@ -158,7 +158,7 @@ bool openFile(const QString &application, const QString &path, const QString &wo
qDebug() << "Opening file" << path << "using" << application;
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
- if(!APPLICATION->isFlatpak())
+ if(!isFlatpak())
{
return IndirectOpen([&]()
{
@@ -178,7 +178,7 @@ bool run(const QString &application, const QStringList &args, const QString &wor
{
qDebug() << "Running" << application << "with args" << args.join(' ');
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!APPLICATION->isFlatpak())
+ if(!isFlatpak())
{
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
return IndirectOpen([&]()
@@ -203,7 +203,7 @@ bool openUrl(const QUrl &url)
return QDesktopServices::openUrl(url);
};
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!APPLICATION->isFlatpak())
+ if(!isFlatpak())
{
return IndirectOpen(f);
}
@@ -216,4 +216,13 @@ bool openUrl(const QUrl &url)
#endif
}
+bool isFlatpak()
+{
+#ifdef Q_OS_LINUX
+ return QFile::exists("/.flatpak-info");
+#else
+ return false;
+#endif
+}
+
}
diff --git a/launcher/DesktopServices.h b/launcher/DesktopServices.h
index 1c081da41..21c9cae0b 100644
--- a/launcher/DesktopServices.h
+++ b/launcher/DesktopServices.h
@@ -33,4 +33,6 @@ namespace DesktopServices
* Open the URL, most likely in a browser. Maybe.
*/
bool openUrl(const QUrl &url);
+
+ bool isFlatpak();
}
diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp
index 76cfccb0b..aaa75e6f1 100644
--- a/launcher/FileSystem.cpp
+++ b/launcher/FileSystem.cpp
@@ -44,6 +44,7 @@
#include
#include
#include
+#include "DesktopServices.h"
#if defined Q_OS_WIN32
#include
@@ -228,6 +229,9 @@ bool trash(QString path, QString *pathInTrash = nullptr)
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
return false;
#else
+ // FIXME: Figure out trash in Flatpak. Qt seemingly doesn't use the Trash portal
+ if (DesktopServices::isFlatpak())
+ return false;
return QFile::moveToTrash(path, pathInTrash);
#endif
}
diff --git a/launcher/ui/pages/global/LauncherPage.cpp b/launcher/ui/pages/global/LauncherPage.cpp
index 536ab22e1..4ae7509cf 100644
--- a/launcher/ui/pages/global/LauncherPage.cpp
+++ b/launcher/ui/pages/global/LauncherPage.cpp
@@ -49,6 +49,7 @@
#include
#include "Application.h"
#include "BuildConfig.h"
+#include "DesktopServices.h"
#include "ui/themes/ITheme.h"
#include
@@ -143,7 +144,7 @@ void LauncherPage::on_instDirBrowseBtn_clicked()
ui->instDirTextBox->setText(cooked_dir);
}
}
- else if(APPLICATION->isFlatpak() && raw_dir.startsWith("/run/user"))
+ else if(DesktopServices::isFlatpak() && raw_dir.startsWith("/run/user"))
{
QMessageBox warning;
warning.setText(tr("You're trying to specify an instance folder "
From f2d445d27b1052a038cd94a5c514cee807abd894 Mon Sep 17 00:00:00 2001
From: Sefa Eyeoglu
Date: Sun, 30 Oct 2022 19:08:02 +0100
Subject: [PATCH 60/72] fix: fix undo key sequence
Signed-off-by: Sefa Eyeoglu
---
launcher/ui/MainWindow.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp
index 55f3e4f85..3b1779b7a 100644
--- a/launcher/ui/MainWindow.cpp
+++ b/launcher/ui/MainWindow.cpp
@@ -335,11 +335,10 @@ public:
all_actions.append(&actionSettings);
actionUndoTrashInstance = TranslatedAction(MainWindow);
- connect(actionUndoTrashInstance, SIGNAL(triggered(bool)), MainWindow, SLOT(undoTrashInstance()));
actionUndoTrashInstance->setObjectName(QStringLiteral("actionUndoTrashInstance"));
actionUndoTrashInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Undo Last Instance Deletion"));
actionUndoTrashInstance->setEnabled(APPLICATION->instances()->trashedSomething());
- actionUndoTrashInstance->setShortcut(QKeySequence("Ctrl+Z"));
+ actionUndoTrashInstance->setShortcut(QKeySequence::Undo);
all_actions.append(&actionUndoTrashInstance);
actionClearMetadata = TranslatedAction(MainWindow);
@@ -1023,6 +1022,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow
}
}
+ connect(ui->actionUndoTrashInstance.operator->(), &QAction::triggered, this, &MainWindow::undoTrashInstance);
+
setSelectedInstanceById(APPLICATION->settings()->get("SelectedInstance").toString());
// removing this looks stupid
From dfdf739282792ca646bb284b3d83b2d2265a9d55 Mon Sep 17 00:00:00 2001
From: Chrono
Date: Mon, 31 Oct 2022 19:44:55 -0400
Subject: [PATCH 61/72] remove one space
Signed-off-by: Chrono
---
launcher/ui/pages/global/APIPage.ui | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/ui/pages/global/APIPage.ui b/launcher/ui/pages/global/APIPage.ui
index 1ae788c7f..d56a9ef68 100644
--- a/launcher/ui/pages/global/APIPage.ui
+++ b/launcher/ui/pages/global/APIPage.ui
@@ -179,7 +179,7 @@
-