aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml30
-rw-r--r--.github/workflows/trigger_release.yml6
-rw-r--r--CMakeLists.txt9
-rw-r--r--launcher/Application.cpp51
-rw-r--r--launcher/Application.h1
-rw-r--r--launcher/CMakeLists.txt3
-rw-r--r--launcher/InstanceImportTask.cpp1
-rw-r--r--launcher/meta/BaseEntity.cpp11
-rw-r--r--launcher/minecraft/AssetsUtils.cpp42
-rw-r--r--launcher/minecraft/MinecraftInstance.cpp6
-rw-r--r--launcher/minecraft/PackProfile.cpp31
-rw-r--r--launcher/minecraft/PackProfile.h2
-rw-r--r--launcher/minecraft/VersionFile.cpp3
-rw-r--r--launcher/modplatform/ModAPI.h15
-rw-r--r--launcher/modplatform/flame/FileResolvingTask.cpp16
-rw-r--r--launcher/modplatform/flame/FlameAPI.h17
-rw-r--r--launcher/modplatform/flame/FlameModIndex.cpp9
-rw-r--r--launcher/modplatform/flame/FlamePackIndex.cpp10
-rw-r--r--launcher/modplatform/flame/FlamePackIndex.h1
-rw-r--r--launcher/modplatform/flame/PackManifest.cpp15
-rw-r--r--launcher/modplatform/modrinth/ModrinthAPI.h35
-rw-r--r--launcher/net/ByteArraySink.h95
-rw-r--r--launcher/net/ChecksumValidator.h83
-rw-r--r--launcher/net/Download.cpp152
-rw-r--r--launcher/net/Download.h101
-rw-r--r--launcher/net/FileSink.cpp122
-rw-r--r--launcher/net/FileSink.h77
-rw-r--r--launcher/net/HttpMetaCache.cpp224
-rw-r--r--launcher/net/HttpMetaCache.h148
-rw-r--r--launcher/net/MetaCacheSink.cpp57
-rw-r--r--launcher/net/MetaCacheSink.h62
-rw-r--r--launcher/net/Mode.h9
-rw-r--r--launcher/net/NetAction.h134
-rw-r--r--launcher/net/NetJob.cpp274
-rw-r--r--launcher/net/NetJob.h110
-rw-r--r--launcher/net/PasteUpload.cpp201
-rw-r--r--launcher/net/PasteUpload.h64
-rw-r--r--launcher/net/Sink.h102
-rw-r--r--launcher/net/Validator.h34
-rw-r--r--launcher/resources/multimc/128x128/instances/flame.pngbin3375 -> 6226 bytes
-rw-r--r--launcher/resources/multimc/32x32/instances/flame.pngbin849 -> 0 bytes
-rw-r--r--launcher/resources/multimc/multimc.qrc4
-rw-r--r--launcher/screenshots/ImgurAlbumCreation.cpp60
-rw-r--r--launcher/screenshots/ImgurAlbumCreation.h49
-rw-r--r--launcher/screenshots/ImgurUpload.cpp60
-rw-r--r--launcher/screenshots/ImgurUpload.h39
-rw-r--r--launcher/tasks/Task.cpp42
-rw-r--r--launcher/tasks/Task.h55
-rw-r--r--launcher/translations/TranslationsModel.cpp37
-rw-r--r--launcher/ui/GuiUtil.cpp40
-rw-r--r--launcher/ui/MainWindow.cpp3
-rw-r--r--launcher/ui/pages/global/APIPage.cpp97
-rw-r--r--launcher/ui/pages/global/APIPage.h5
-rw-r--r--launcher/ui/pages/global/APIPage.ui142
-rw-r--r--launcher/ui/pages/instance/ModFolderPage.cpp2
-rw-r--r--launcher/ui/pages/modplatform/ModModel.cpp4
-rw-r--r--launcher/ui/pages/modplatform/ModPage.cpp2
-rw-r--r--launcher/ui/pages/modplatform/ModPage.h2
-rw-r--r--launcher/ui/pages/modplatform/flame/FlameModPage.cpp4
-rw-r--r--launcher/ui/pages/modplatform/flame/FlameModPage.h2
-rw-r--r--launcher/ui/pages/modplatform/flame/FlamePage.ui192
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthModPage.cpp4
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthModPage.h2
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthPage.ui7
-rw-r--r--launcher/ui/setupwizard/PasteWizardPage.cpp42
-rw-r--r--launcher/ui/setupwizard/PasteWizardPage.h27
-rw-r--r--launcher/ui/setupwizard/PasteWizardPage.ui80
-rw-r--r--libraries/launcher/CMakeLists.txt15
-rw-r--r--libraries/launcher/net/minecraft/Launcher.java112
-rw-r--r--libraries/launcher/org/multimc/EntryPoint.java105
-rw-r--r--libraries/launcher/org/multimc/Launcher.java7
-rw-r--r--libraries/launcher/org/multimc/LauncherFactory.java63
-rw-r--r--libraries/launcher/org/multimc/LegacyFrame.java176
-rw-r--r--libraries/launcher/org/multimc/Utils.java86
-rw-r--r--libraries/launcher/org/multimc/applet/LegacyFrame.java162
-rw-r--r--libraries/launcher/org/multimc/exception/ParameterNotFoundException.java (renamed from libraries/launcher/org/multimc/NotFoundException.java)10
-rw-r--r--libraries/launcher/org/multimc/exception/ParseException.java (renamed from libraries/launcher/org/multimc/ParseException.java)8
-rw-r--r--libraries/launcher/org/multimc/impl/OneSixLauncher.java189
-rw-r--r--libraries/launcher/org/multimc/onesix/OneSixLauncher.java256
-rw-r--r--libraries/launcher/org/multimc/utils/Parameters.java (renamed from libraries/launcher/org/multimc/ParamBucket.java)47
-rw-r--r--libraries/launcher/org/multimc/utils/Utils.java49
-rw-r--r--program_info/win_install.nsi233
82 files changed, 3135 insertions, 1749 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 0590b348..5b70256a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -39,6 +39,7 @@ jobs:
INSTALL_PORTABLE_DIR: "install-portable"
INSTALL_APPIMAGE_DIR: "install-appdir"
BUILD_DIR: "build"
+ CCACHE_VAR: ""
steps:
##
@@ -63,6 +64,7 @@ jobs:
ninja:p
qt5:p
ccache:p
+ nsis:p
- name: Setup ccache
if: runner.os != 'Windows' && inputs.build_type == 'Debug'
@@ -80,6 +82,12 @@ jobs:
ccache -p # Show config
ccache -z # Zero stats
+ - name: Use ccache on Debug builds only
+ if: inputs.build_type == 'Debug'
+ shell: bash
+ run: |
+ echo "CCACHE_VAR=ccache" >> $GITHUB_ENV
+
- name: Retrieve ccache cache (Windows)
if: runner.os == 'Windows' && inputs.build_type == 'Debug'
uses: actions/cache@v3.0.2
@@ -100,7 +108,7 @@ jobs:
run: |
brew update
brew install qt@5 ninja
-
+
- name: Update Qt (AppImage)
if: runner.os == 'Linux' && matrix.appimage == true
run: |
@@ -128,18 +136,18 @@ jobs:
- name: Configure CMake (macOS)
if: runner.os == 'macOS'
run: |
- cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DQt5_DIR=/usr/local/opt/qt@5 -DCMAKE_PREFIX_PATH=/usr/local/opt/qt@5 -DLauncher_BUILD_PLATFORM=macOS -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -G Ninja
+ cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DQt5_DIR=/usr/local/opt/qt@5 -DCMAKE_PREFIX_PATH=/usr/local/opt/qt@5 -DLauncher_BUILD_PLATFORM=macOS -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -G Ninja
- name: Configure CMake (Windows)
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=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -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 }} -G Ninja
- name: Configure CMake (Linux)
if: runner.os == 'Linux'
run: |
- cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=Linux -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -G Ninja
+ cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=Linux -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -G Ninja
##
# BUILD
@@ -190,6 +198,13 @@ jobs:
cp -r ${{ env.INSTALL_DIR }} ${{ env.INSTALL_PORTABLE_DIR }} # cmake install on Windows is slow, let's just copy instead
cmake --install ${{ env.BUILD_DIR }} --prefix ${{ env.INSTALL_PORTABLE_DIR }} --component portable
+ - name: Package (Windows, installer)
+ if: runner.os == 'Windows'
+ shell: msys2 {0}
+ run: |
+ cd ${{ env.INSTALL_DIR }}
+ makensis -NOCD "-DVERSION=${{ env.VERSION }}" "-DMUI_ICON=${{ github.workspace }}/program_info/polymc.ico" "-XOutFile ${{ github.workspace }}/PolyMC-Setup.exe" "${{ github.workspace }}/program_info/win_install.nsi"
+
- name: Package (Linux)
if: runner.os == 'Linux' && matrix.appimage != true
run: |
@@ -257,6 +272,13 @@ jobs:
name: PolyMC-${{ matrix.name }}-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
path: ${{ env.INSTALL_PORTABLE_DIR }}/**
+ - name: Upload installer (Windows)
+ if: runner.os == 'Windows'
+ uses: actions/upload-artifact@v3
+ with:
+ name: PolyMC-${{ matrix.name }}-Setup-${{ env.VERSION }}-${{ inputs.build_type }}
+ path: PolyMC-Setup.exe
+
- name: Upload binary tarball (Linux)
if: runner.os == 'Linux' && matrix.appimage != true
uses: actions/upload-artifact@v3
diff --git a/.github/workflows/trigger_release.yml b/.github/workflows/trigger_release.yml
index ff0d2b3f..91cd0474 100644
--- a/.github/workflows/trigger_release.yml
+++ b/.github/workflows/trigger_release.yml
@@ -43,10 +43,12 @@ jobs:
for d in PolyMC-Windows-*; do
cd "${d}" || continue
ARCH="$(echo -n ${d} | cut -d '-' -f 3)"
+ INST="$(echo -n ${d} | grep -o Setup || true)"
PORT="$(echo -n ${d} | grep -o Portable || true)"
NAME="PolyMC-Windows-${ARCH}"
test -z "${PORT}" || NAME="${NAME}-Portable"
- zip -r -9 "../${NAME}-${{ env.VERSION }}.zip" *
+ test -z "${INST}" || mv PolyMC-*.exe ../${NAME}-Setup-${{ env.VERSION }}.exe
+ test -n "${INST}" || zip -r -9 "../${NAME}-${{ env.VERSION }}.zip" *
cd ..
done
@@ -66,7 +68,9 @@ jobs:
PolyMC-Linux-${{ env.VERSION }}-x86_64.AppImage
PolyMC-Windows-i686-${{ env.VERSION }}.zip
PolyMC-Windows-i686-Portable-${{ env.VERSION }}.zip
+ PolyMC-Windows-i686-Setup-${{ env.VERSION }}.exe
PolyMC-Windows-x86_64-${{ env.VERSION }}.zip
PolyMC-Windows-x86_64-Portable-${{ env.VERSION }}.zip
+ PolyMC-Windows-x86_64-Setup-${{ env.VERSION }}.exe
PolyMC-macOS-${{ env.VERSION }}.tar.gz
PolyMC-${{ env.VERSION }}.tar.gz
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e07d2aa6..a8c28e99 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,17 +34,20 @@ set(CMAKE_C_STANDARD_REQUIRED true)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 11)
include(GenerateExportHeader)
-set(CMAKE_CXX_FLAGS " -Wall -pedantic -Werror -Wno-deprecated-declarations -D_GLIBCXX_USE_CXX11_ABI=0 -fstack-protector-strong --param=ssp-buffer-size=4 -O3 -D_FORTIFY_SOURCE=2 ${CMAKE_CXX_FLAGS}")
+set(CMAKE_CXX_FLAGS "-Wall -pedantic -Werror -Wno-deprecated-declarations -D_GLIBCXX_USE_CXX11_ABI=0 -fstack-protector-strong --param=ssp-buffer-size=4 ${CMAKE_CXX_FLAGS}")
if(UNIX AND APPLE)
- set(CMAKE_CXX_FLAGS " -stdlib=libc++ ${CMAKE_CXX_FLAGS}")
+ set(CMAKE_CXX_FLAGS "-stdlib=libc++ ${CMAKE_CXX_FLAGS}")
endif()
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror=return-type")
# Fix build with Qt 5.13
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEPRECATED_WARNINGS=Y")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_DISABLE_DEPRECATED_BEFORE=0x050C00")
+# set CXXFLAGS for build targets
+set(CMAKE_CXX_FLAGS_DEBUG "-O2 -D_FORTIFY_SOURCE=2 ${CMAKE_CXX_FLAGS}")
+set(CMAKE_CXX_FLAGS_RELEASE "-O2 -D_FORTIFY_SOURCE=2 ${CMAKE_CXX_FLAGS}")
+
option(ENABLE_LTO "Enable Link Time Optimization" off)
if(ENABLE_LTO)
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index dc8a7b0d..ba4096b6 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -2,6 +2,7 @@
/*
* PolyMC - Minecraft Launcher
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
+ * Copyright (C) 2022 Lenny McLennington <lenny@sneed.church>
*
* 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
@@ -36,6 +37,7 @@
#include "Application.h"
#include "BuildConfig.h"
+#include "net/PasteUpload.h"
#include "ui/MainWindow.h"
#include "ui/InstanceWindow.h"
@@ -61,6 +63,7 @@
#include "ui/setupwizard/SetupWizard.h"
#include "ui/setupwizard/LanguageWizardPage.h"
#include "ui/setupwizard/JavaWizardPage.h"
+#include "ui/setupwizard/PasteWizardPage.h"
#include "ui/dialogs/CustomMessageBox.h"
@@ -671,14 +674,40 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_settings->registerSetting("UpdateDialogGeometry", "");
- // pastebin URL
- m_settings->registerSetting("PastebinURL", "https://0x0.st");
+ // HACK: This code feels so stupid is there a less stupid way of doing this?
+ {
+ m_settings->registerSetting("PastebinURL", "");
+ m_settings->registerSetting("PastebinType", PasteUpload::PasteType::Mclogs);
+ m_settings->registerSetting("PastebinCustomAPIBase", "");
+
+ QString pastebinURL = m_settings->get("PastebinURL").toString();
+
+ bool userHadDefaultPastebin = pastebinURL == "https://0x0.st";
+ if (!pastebinURL.isEmpty() && !userHadDefaultPastebin)
+ {
+ m_settings->set("PastebinType", PasteUpload::PasteType::NullPointer);
+ m_settings->set("PastebinCustomAPIBase", pastebinURL);
+ m_settings->reset("PastebinURL");
+ }
+
+ bool ok;
+ int pasteType = m_settings->get("PastebinType").toInt(&ok);
+ // If PastebinType is invalid then reset the related settings.
+ if (!ok || !(PasteUpload::PasteType::First <= pasteType && pasteType <= PasteUpload::PasteType::Last))
+ {
+ m_settings->reset("PastebinType");
+ m_settings->reset("PastebinCustomAPIBase");
+ }
+ }
+ // meta URL
+ m_settings->registerSetting("MetaURLOverride", "");
m_settings->registerSetting("CloseAfterLaunch", false);
m_settings->registerSetting("QuitAfterGameStop", false);
// Custom MSA credentials
m_settings->registerSetting("MSAClientIDOverride", "");
+ m_settings->registerSetting("CFKeyOverride", "");
// Init page provider
{
@@ -898,7 +927,8 @@ bool Application::createSetupWizard()
return true;
return false;
}();
- bool wizardRequired = javaRequired || languageRequired;
+ bool pasteInterventionRequired = settings()->get("PastebinURL") != "";
+ bool wizardRequired = javaRequired || languageRequired || pasteInterventionRequired;
if(wizardRequired)
{
@@ -912,6 +942,11 @@ bool Application::createSetupWizard()
{
m_setupWizard->addPage(new JavaWizardPage(m_setupWizard));
}
+
+ if (pasteInterventionRequired)
+ {
+ m_setupWizard->addPage(new PasteWizardPage(m_setupWizard));
+ }
connect(m_setupWizard, &QDialog::finished, this, &Application::setupWizardFinished);
m_setupWizard->show();
return true;
@@ -1508,3 +1543,13 @@ QString Application::getMSAClientID()
return BuildConfig.MSA_CLIENT_ID;
}
+
+QString Application::getCurseKey()
+{
+ QString keyOverride = m_settings->get("CFKeyOverride").toString();
+ if (!keyOverride.isEmpty()) {
+ return keyOverride;
+ }
+
+ return BuildConfig.CURSEFORGE_API_KEY;
+}
diff --git a/launcher/Application.h b/launcher/Application.h
index 172321c0..3129b4fb 100644
--- a/launcher/Application.h
+++ b/launcher/Application.h
@@ -155,6 +155,7 @@ public:
QString getJarsPath();
QString getMSAClientID();
+ QString getCurseKey();
/// this is the root of the 'installation'. Used for automatic updates
const QString &root() {
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 8e75be20..15534c71 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -661,6 +661,8 @@ SET(LAUNCHER_SOURCES
ui/setupwizard/JavaWizardPage.h
ui/setupwizard/LanguageWizardPage.cpp
ui/setupwizard/LanguageWizardPage.h
+ ui/setupwizard/PasteWizardPage.cpp
+ ui/setupwizard/PasteWizardPage.h
# GUI - themes
ui/themes/FusionTheme.cpp
@@ -890,6 +892,7 @@ SET(LAUNCHER_SOURCES
)
qt5_wrap_ui(LAUNCHER_UI
+ ui/setupwizard/PasteWizardPage.ui
ui/pages/global/AccountListPage.ui
ui