Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/java downloader #2069

Open
wants to merge 90 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
f95856d
Add the base of java downloading
timoreo22 Jun 30, 2022
3433c10
Remove old comment and change to piston-meta
timoreo22 Jun 30, 2022
9a4a92d
Clang format
timoreo22 Jul 1, 2022
a97387b
Cherry-pick SysInfo from #680
timoreo22 Jul 1, 2022
98a82cd
Fix MMCZip bugs
timoreo22 Jul 1, 2022
89ce80b
Fix Java downloader bugs + Add a test button in JavaPage
timoreo22 Jul 1, 2022
54ad91c
Anti-scrumped
timoreo22 Jul 1, 2022
53ddba8
Made JavaDownloader a task and added some quick UI
timoreo22 Jul 10, 2022
f946964
Regrab a few changes on SysInfo
timoreo22 Jul 10, 2022
68446c2
Obligatory formatting fix commit
timoreo22 Jul 10, 2022
24dc154
Add download button to more pages + UI fixes
timoreo22 Jul 11, 2022
a902f29
Changed to a temporary file
timoreo22 Sep 12, 2022
dc84a61
Added failed and aborted handlers
timoreo22 Sep 12, 2022
89f1b60
Delete out non-needed functions from SysInfo
timoreo22 Sep 12, 2022
86e3518
Apply most of the suggestions from @flowln
timoreo22 Sep 12, 2022
a65f20a
Fix a tiny formatting issue
timoreo22 Sep 12, 2022
dcbd6cc
More Json:: everywhere !
timoreo22 Sep 12, 2022
6a5db12
Apply some more suggestions from @flowln
timoreo22 Oct 24, 2022
5f37e33
Merge branch 'develop' into feature/java-downloader
TheKodeToad Jul 16, 2023
ce6a36c
Deduplicate fix
TheKodeToad Jul 28, 2023
d4ea9c2
Merge branch 'develop' into feature/java-downloader
TheKodeToad Jul 28, 2023
5538c1d
Fix compilation (actually this time!), incorporating new changes
TheKodeToad Jul 28, 2023
8778313
Merge remote-tracking branch 'upstream/develop' into feature/java-dow…
TheKodeToad Aug 16, 2023
f3baa42
Fix broken tab order
TheKodeToad Aug 16, 2023
2256850
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 Oct 26, 2023
33cf706
formated the code
Trial97 Oct 27, 2023
a0e7729
Started workin on stuff
Trial97 Jan 24, 2024
25bca28
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 Jan 24, 2024
e897032
Added java metadata
Trial97 Jan 25, 2024
f36be3f
Cleanup downloaders
Trial97 Jan 25, 2024
81282bf
Autodetect Java?
Trial97 Jan 25, 2024
4cd236e
missing header
Trial97 Jan 25, 2024
7317105
Code spaghetti and more chaos
Trial97 Jan 27, 2024
5afe75e
Fixed some codeql warnings
Trial97 Jan 30, 2024
6c5bb38
Cleaned some code
Trial97 Jan 31, 2024
3c58fb0
Moving files around
Trial97 Feb 2, 2024
0384e65
Finished up the download dialog
Trial97 Feb 2, 2024
82b1526
preparing java autodownload
Trial97 Feb 2, 2024
ba990e0
Added JavaPath function
Trial97 Feb 8, 2024
3d29da9
Made Java path configurable
Trial97 Feb 8, 2024
b3fc07d
Added extra java search paths
Trial97 Feb 8, 2024
379f1a7
Leave headers alone
Trial97 Feb 8, 2024
0a3303b
Added button to add extra java path to the Java Wizzard
Trial97 Feb 9, 2024
27d662e
Added management for downloaded javas from prism
Trial97 Feb 9, 2024
c0fb053
Added warning for x86 java
Trial97 Feb 9, 2024
2941307
Added basic java auto-detect and auto-download
Trial97 Feb 16, 2024
ea2adf9
Added progeess dialog to autodownload java
Trial97 Feb 17, 2024
5232b3c
Added some logs and fixed natives extraction
Trial97 Feb 17, 2024
a7dad96
Added refresh button on managed java list
Trial97 Feb 18, 2024
4c76f7a
Made auto java checkbox dependent
Trial97 Feb 18, 2024
2f489d1
Added auto java options to the java wizzard page
Trial97 Feb 18, 2024
4aafa98
Improved the message boxes for java wizzard
Trial97 Feb 18, 2024
b4f3a96
Updated strings that are displayed to user
Trial97 Feb 18, 2024
038d3e4
Fixed asan complains
Trial97 Feb 18, 2024
a288779
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 Feb 18, 2024
889f604
Removed JavaExtraSearchPaths
Trial97 Feb 18, 2024
1c96ae5
Fixed java refresh button
Trial97 Feb 18, 2024
da96172
Apply suggestions from code review
Trial97 Feb 26, 2024
24fd078
format code
Trial97 Feb 26, 2024
9120848
Made java downloader as a build option
Trial97 Mar 6, 2024
1322277
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 Mar 17, 2024
ef4e5eb
fixed java build option
Trial97 Mar 18, 2024
09c2c67
Improve UI
Trial97 Mar 19, 2024
5f8269f
Small class rename
Trial97 Mar 19, 2024
703470e
Hopefully fix codeql
Trial97 Mar 20, 2024
1c809f0
Added more logs for auto java install
Trial97 Mar 20, 2024
ab7fc2e
Fixed archive java download
Trial97 Mar 20, 2024
1a6dfd0
Made tar.gz parser
Trial97 Mar 21, 2024
3046822
Fixed buid
Trial97 Mar 21, 2024
a7029a9
Fixed qMin
Trial97 Mar 21, 2024
0b87e4c
Fiexed codeql warning
Trial97 Mar 22, 2024
c0754b8
Add resize to last column
Trial97 Mar 22, 2024
93f6315
Update CMakeLists.txt
Trial97 Mar 27, 2024
45028dd
Added java downloader to CI build
Trial97 Mar 28, 2024
81874f2
Fixed tar extract
Trial97 Mar 28, 2024
7a5348a
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 May 18, 2024
b23b53d
Add missing header
Trial97 May 18, 2024
abb628e
remove OverrideJava
Trial97 May 20, 2024
0e239df
fix crash on first display with java downloader off
Trial97 May 20, 2024
7a42fb2
reverse java version
Trial97 May 20, 2024
f6a7fc2
update java sorting by taking into consideration release time
Trial97 May 21, 2024
8ff53e4
Merge branch 'develop' of github.com:Trial97/PrismLauncher into featu…
Trial97 Jun 6, 2024
ca369ac
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 Jun 9, 2024
11ae169
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 Jun 10, 2024
cfdf4a9
Merge branch 'develop' of github.com:Trial97/PrismLauncher into featu…
Trial97 Jun 14, 2024
d058468
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLaunc…
Trial97 Jun 15, 2024
bbf52e3
renamed dialog and button action
Trial97 Jun 15, 2024
94fd02a
fix java download button
Trial97 Jun 16, 2024
8d3e666
fix java download tasks
Trial97 Jun 16, 2024
2fb3e12
fix auto java install
Trial97 Jun 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -266,23 +266,23 @@ jobs:
- name: Configure CMake (macOS)
if: runner.os == 'macOS' && matrix.qt_ver == 6
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=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -G Ninja
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DENABLE_JAVA_DOWNLOADER=ON -DLauncher_BUILD_PLATFORM=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -G Ninja

- name: Configure CMake (macOS-Legacy)
if: runner.os == 'macOS' && matrix.qt_ver == 5
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=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DMACOSX_SPARKLE_UPDATE_PUBLIC_KEY="" -DMACOSX_SPARKLE_UPDATE_FEED_URL="" -G Ninja
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DENABLE_JAVA_DOWNLOADER=ON -DLauncher_BUILD_PLATFORM=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DMACOSX_SPARKLE_UPDATE_PUBLIC_KEY="" -DMACOSX_SPARKLE_UPDATE_FEED_URL="" -G Ninja

- name: Configure CMake (Windows MinGW-w64)
if: runner.os == 'Windows' && matrix.msystem != ''
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=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=6 -DCMAKE_OBJDUMP=/mingw64/bin/objdump.exe -DLauncher_BUILD_ARTIFACT=${{ matrix.name }}-Qt${{ 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 -DENABLE_JAVA_DOWNLOADER=ON -DLauncher_BUILD_PLATFORM=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=6 -DCMAKE_OBJDUMP=/mingw64/bin/objdump.exe -DLauncher_BUILD_ARTIFACT=${{ matrix.name }}-Qt${{ matrix.qt_ver }} -G Ninja

- name: Configure CMake (Windows MSVC)
if: runner.os == 'Windows' && matrix.msystem == ''
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=official -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreadedDLL" -A${{ matrix.architecture}} -DLauncher_FORCE_BUNDLED_LIBS=ON -DLauncher_BUILD_ARTIFACT=${{ matrix.name }}-Qt${{ matrix.qt_ver }}
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DENABLE_JAVA_DOWNLOADER=ON -DLauncher_BUILD_PLATFORM=official -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreadedDLL" -A${{ matrix.architecture}} -DLauncher_FORCE_BUNDLED_LIBS=ON -DLauncher_BUILD_ARTIFACT=${{ matrix.name }}-Qt${{ matrix.qt_ver }}
# https://github.com/ccache/ccache/wiki/MS-Visual-Studio (I coudn't figure out the compiler prefix)
if ("${{ env.CCACHE_VAR }}")
{
Expand All @@ -297,7 +297,7 @@ jobs:
- 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=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DLauncher_BUILD_ARTIFACT=Linux-Qt${{ matrix.qt_ver }} -G Ninja
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DENABLE_JAVA_DOWNLOADER=ON -DLauncher_BUILD_PLATFORM=official -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DLauncher_BUILD_ARTIFACT=Linux-Qt${{ matrix.qt_ver }} -G Ninja

##
# BUILD
Expand Down
13 changes: 13 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,19 @@ set(Launcher_SUBREDDIT_URL "https://prismlauncher.org/reddit" CACHE STRING "URL
set(Launcher_FORCE_BUNDLED_LIBS OFF CACHE BOOL "Prevent using system libraries, if they are available as submodules")
set(Launcher_QT_VERSION_MAJOR "6" CACHE STRING "Major Qt version to build against")

# Java downloader
set(ENABLE_JAVA_DOWNLOADER_DEFAULT ON)

# Although we recommend enabling this, we cannot guarantee binary compatibility on
# differing Linux/BSD/etc distributions. Downstream packagers should be explicitly opt-ing into this
# feature if they know it will work with their distribution.
if(UNIX AND NOT APPLE)
set(ENABLE_JAVA_DOWNLOADER_DEFAULT OFF)
endif()

# Java downloader
option(ENABLE_JAVA_DOWNLOADER "Build the java downloader feature" ${ENABLE_JAVA_DOWNLOADER_DEFAULT})

# Native libraries
if(UNIX AND APPLE)
set(Launcher_GLFW_LIBRARY_NAME "libglfw.dylib" CACHE STRING "Name of native glfw library")
Expand Down
3 changes: 3 additions & 0 deletions buildconfig/BuildConfig.cpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ Config::Config()
UPDATER_ENABLED = true;
}

#cmakedefine01 ENABLE_JAVA_DOWNLOADER
JAVA_DOWNLOADER_ENABLED = ENABLE_JAVA_DOWNLOADER;

GIT_COMMIT = "@Launcher_GIT_COMMIT@";
GIT_TAG = "@Launcher_GIT_TAG@";
GIT_REFSPEC = "@Launcher_GIT_REFSPEC@";
Expand Down
1 change: 1 addition & 0 deletions buildconfig/BuildConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ class Config {
QString VERSION_CHANNEL;

bool UPDATER_ENABLED = false;
bool JAVA_DOWNLOADER_ENABLED = false;

/// A short string identifying this build's platform or distribution.
QString BUILD_PLATFORM;
Expand Down
26 changes: 11 additions & 15 deletions launcher/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "BuildConfig.h"

#include "DataMigrationTask.h"
#include "java/JavaInstallList.h"
#include "net/PasteUpload.h"
#include "pathmatcher/MultiMatcher.h"
#include "pathmatcher/SimplePrefixMatcher.h"
Expand Down Expand Up @@ -126,6 +127,7 @@

#include <stdlib.h>
#include <sys.h>
#include "SysInfo.h"

#ifdef Q_OS_LINUX
#include <dlfcn.h>
Expand Down Expand Up @@ -589,6 +591,7 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_settings->registerSetting("DownloadsDir", QStandardPaths::writableLocation(QStandardPaths::DownloadLocation));
m_settings->registerSetting("DownloadsDirWatchRecursive", false);
m_settings->registerSetting("SkinsDir", "skins");
m_settings->registerSetting("JavaDir", "java");

// Editors
m_settings->registerSetting("JsonEditor", QString());
Expand Down Expand Up @@ -617,7 +620,7 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)

// Memory
m_settings->registerSetting({ "MinMemAlloc", "MinMemoryAlloc" }, 512);
m_settings->registerSetting({ "MaxMemAlloc", "MaxMemoryAlloc" }, suitableMaxMem());
m_settings->registerSetting({ "MaxMemAlloc", "MaxMemoryAlloc" }, SysInfo::suitableMaxMem());
m_settings->registerSetting("PermGen", 128);

// Java Settings
Expand All @@ -631,6 +634,8 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_settings->registerSetting("JvmArgs", "");
m_settings->registerSetting("IgnoreJavaCompatibility", false);
m_settings->registerSetting("IgnoreJavaWizard", false);
m_settings->registerSetting("AutomaticJavaSwitch", false);
m_settings->registerSetting("AutomaticJavaDownload", false);

// Legacy settings
m_settings->registerSetting("OnlineFixes", false);
Expand Down Expand Up @@ -866,6 +871,7 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_metacache->addBase("translations", QDir("translations").absolutePath());
m_metacache->addBase("icons", QDir("cache/icons").absolutePath());
m_metacache->addBase("meta", QDir("meta").absolutePath());
m_metacache->addBase("java", QDir("cache/java").absolutePath());
m_metacache->Load();
qDebug() << "<> Cache initialized.";
}
Expand Down Expand Up @@ -1735,20 +1741,6 @@ QString Application::getUserAgentUncached()
return BuildConfig.USER_AGENT_UNCACHED;
}

int Application::suitableMaxMem()
{
float totalRAM = (float)Sys::getSystemRam() / (float)Sys::mebibyte;
int maxMemoryAlloc;

// If totalRAM < 6GB, use (totalRAM / 1.5), else 4GB
if (totalRAM < (4096 * 1.5))
maxMemoryAlloc = (int)(totalRAM / 1.5);
else
maxMemoryAlloc = 4096;

return maxMemoryAlloc;
}

bool Application::handleDataMigration(const QString& currentData,
const QString& oldData,
const QString& name,
Expand Down Expand Up @@ -1855,3 +1847,7 @@ QUrl Application::normalizeImportUrl(QString const& url)
return QUrl::fromUserInput(url);
}
}
const QString Application::javaPath()
{
return m_settings->get("JavaDir").toString();
}
5 changes: 3 additions & 2 deletions launcher/Application.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,9 @@ class Application : public QApplication {
/// the data path the application is using
const QString& dataRoot() { return m_dataPath; }

/// the java installed path the application is using
const QString javaPath();

bool isPortable() { return m_portable; }

const Capabilities capabilities() { return m_capabilities; }
Expand All @@ -180,8 +183,6 @@ class Application : public QApplication {

void ShowGlobalSettings(class QWidget* parent, QString open_page = QString());

int suitableMaxMem();

bool updaterEnabled();
QString updaterBinaryName();

Expand Down
12 changes: 11 additions & 1 deletion launcher/BaseVersionList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,14 @@ QVariant BaseVersionList::data(const QModelIndex& index, int role) const
case TypeRole:
return version->typeString();

case JavaMajorRole: {
auto major = version->name();
if (major.startsWith("java")) {
major = "Java " + major.mid(4);
}
return major;
}

default:
return QVariant();
}
Expand Down Expand Up @@ -110,6 +118,8 @@ QHash<int, QByteArray> BaseVersionList::roleNames() const
roles.insert(TypeRole, "type");
roles.insert(BranchRole, "branch");
roles.insert(PathRole, "path");
roles.insert(ArchitectureRole, "architecture");
roles.insert(JavaNameRole, "javaName");
roles.insert(CPUArchitectureRole, "architecture");
roles.insert(JavaMajorRole, "javaMajor");
return roles;
}
4 changes: 3 additions & 1 deletion launcher/BaseVersionList.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ class BaseVersionList : public QAbstractListModel {
TypeRole,
BranchRole,
PathRole,
ArchitectureRole,
JavaNameRole,
JavaMajorRole,
CPUArchitectureRole,
SortRole
};
using RoleList = QList<int>;
Expand Down
20 changes: 18 additions & 2 deletions launcher/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ set(CORE_SOURCES
NullInstance.h
MMCZip.h
MMCZip.cpp
Untar.h
Untar.cpp
StringUtils.h
StringUtils.cpp
QVariantUtils.h
Expand Down Expand Up @@ -271,6 +273,8 @@ set(MINECRAFT_SOURCES
minecraft/launch/ScanModFolders.h
minecraft/launch/VerifyJavaInstall.cpp
minecraft/launch/VerifyJavaInstall.h
minecraft/launch/AutoInstallJava.cpp
minecraft/launch/AutoInstallJava.h

minecraft/GradleSpecifier.h
minecraft/MinecraftInstance.cpp
Expand Down Expand Up @@ -416,8 +420,6 @@ set(SETTINGS_SOURCES
set(JAVA_SOURCES
java/JavaChecker.h
java/JavaChecker.cpp
java/JavaCheckerJob.h
java/JavaCheckerJob.cpp
java/JavaInstall.h
java/JavaInstall.cpp
java/JavaInstallList.h
Expand All @@ -426,6 +428,18 @@ set(JAVA_SOURCES
java/JavaUtils.cpp
java/JavaVersion.h
java/JavaVersion.cpp

java/JavaMetadata.h
java/JavaMetadata.cpp
java/download/ArchiveDownloadTask.cpp
java/download/ArchiveDownloadTask.h
java/download/ManifestDownloadTask.cpp
java/download/ManifestDownloadTask.h

ui/java/InstallJavaDialog.h
ui/java/InstallJavaDialog.cpp
ui/java/VersionList.h
ui/java/VersionList.cpp
)

set(TRANSLATIONS_SOURCES
Expand Down Expand Up @@ -745,6 +759,8 @@ SET(LAUNCHER_SOURCES
DataMigrationTask.cpp
ApplicationMessage.h
ApplicationMessage.cpp
SysInfo.h
SysInfo.cpp

# GUI - general utilities
DesktopServices.h
Expand Down
3 changes: 3 additions & 0 deletions launcher/FileSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,9 @@ bool ensureFolderPathExists(const QFileInfo folderPath)
{
QDir dir;
QString ensuredPath = folderPath.filePath();
if (folderPath.exists())
return true;

bool success = dir.mkpath(ensuredPath);
return success;
}
Expand Down
30 changes: 11 additions & 19 deletions launcher/JavaCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ bool JavaCommon::checkJVMArgs(QString jvmargs, QWidget* parent)
return true;
}

void JavaCommon::javaWasOk(QWidget* parent, const JavaCheckResult& result)
void JavaCommon::javaWasOk(QWidget* parent, const JavaChecker::Result& result)
{
QString text;
text += QObject::tr(
Expand All @@ -79,7 +79,7 @@ void JavaCommon::javaWasOk(QWidget* parent, const JavaCheckResult& result)
CustomMessageBox::selectable(parent, QObject::tr("Java test success"), text, QMessageBox::Information)->show();
}

void JavaCommon::javaArgsWereBad(QWidget* parent, const JavaCheckResult& result)
void JavaCommon::javaArgsWereBad(QWidget* parent, const JavaChecker::Result& result)
{
auto htmlError = result.errorLog;
QString text;
Expand All @@ -89,7 +89,7 @@ void JavaCommon::javaArgsWereBad(QWidget* parent, const JavaCheckResult& result)
CustomMessageBox::selectable(parent, QObject::tr("Java test failure"), text, QMessageBox::Warning)->show();
}

void JavaCommon::javaBinaryWasBad(QWidget* parent, const JavaCheckResult& result)
void JavaCommon::javaBinaryWasBad(QWidget* parent, const JavaChecker::Result& result)
{
QString text;
text += QObject::tr(
Expand All @@ -116,34 +116,26 @@ void JavaCommon::TestCheck::run()
emit finished();
return;
}
checker.reset(new JavaChecker());
checker.reset(new JavaChecker(m_path, "", 0, 0, 0, 0, this));
connect(checker.get(), &JavaChecker::checkFinished, this, &JavaCommon::TestCheck::checkFinished);
checker->m_path = m_path;
checker->performCheck();
checker->start();
}

void JavaCommon::TestCheck::checkFinished(JavaCheckResult result)
void JavaCommon::TestCheck::checkFinished(const JavaChecker::Result& result)
{
if (result.validity != JavaCheckResult::Validity::Valid) {
if (result.validity != JavaChecker::Result::Validity::Valid) {
javaBinaryWasBad(m_parent, result);
emit finished();
return;
}
checker.reset(new JavaChecker());
checker.reset(new JavaChecker(m_path, m_args, m_maxMem, m_maxMem, result.javaVersion.requiresPermGen() ? m_permGen : 0, 0, this));
connect(checker.get(), &JavaChecker::checkFinished, this, &JavaCommon::TestCheck::checkFinishedWithArgs);
checker->m_path = m_path;
checker->m_args = m_args;
checker->m_minMem = m_minMem;
checker->m_maxMem = m_maxMem;
if (result.javaVersion.requiresPermGen()) {
checker->m_permGen = m_permGen;
}
checker->performCheck();
checker->start();
}

void JavaCommon::TestCheck::checkFinishedWithArgs(JavaCheckResult result)
void JavaCommon::TestCheck::checkFinishedWithArgs(const JavaChecker::Result& result)
{
if (result.validity == JavaCheckResult::Validity::Valid) {
if (result.validity == JavaChecker::Result::Validity::Valid) {
javaWasOk(m_parent, result);
emit finished();
return;
Expand Down
12 changes: 6 additions & 6 deletions launcher/JavaCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ namespace JavaCommon {
bool checkJVMArgs(QString args, QWidget* parent);

// Show a dialog saying that the Java binary was usable
void javaWasOk(QWidget* parent, const JavaCheckResult& result);
void javaWasOk(QWidget* parent, const JavaChecker::Result& result);
// Show a dialog saying that the Java binary was not usable because of bad options
void javaArgsWereBad(QWidget* parent, const JavaCheckResult& result);
void javaArgsWereBad(QWidget* parent, const JavaChecker::Result& result);
// Show a dialog saying that the Java binary was not usable
void javaBinaryWasBad(QWidget* parent, const JavaCheckResult& result);
void javaBinaryWasBad(QWidget* parent, const JavaChecker::Result& result);
// Show a dialog if we couldn't find Java Checker
void javaCheckNotFound(QWidget* parent);

Expand All @@ -32,11 +32,11 @@ class TestCheck : public QObject {
void finished();

private slots:
void checkFinished(JavaCheckResult result);
void checkFinishedWithArgs(JavaCheckResult result);
void checkFinished(const JavaChecker::Result& result);
void checkFinishedWithArgs(const JavaChecker::Result& result);

private:
std::shared_ptr<JavaChecker> checker;
JavaChecker::Ptr checker;
QWidget* m_parent = nullptr;
QString m_path;
QString m_args;
Expand Down
6 changes: 5 additions & 1 deletion launcher/MMCZip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/*
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
* Copyright (c) 2023 Trial97 <alexandru.tripon97@gmail.com>
* Copyright (c) 2023-2024 Trial97 <alexandru.tripon97@gmail.com>
*
* 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
Expand Down Expand Up @@ -525,6 +525,10 @@ bool ExportToZipTask::abort()

void ExtractZipTask::executeTask()
{
if (!m_input->isOpen() && !m_input->open(QuaZip::mdUnzip)) {
emitFailed(tr("Unable to open supplied zip file."));
return;
}
m_zip_future = QtConcurrent::run(QThreadPool::globalInstance(), [this]() { return extractZip(); });
connect(&m_zip_watcher, &QFutureWatcher<ZipResult>::finished, this, &ExtractZipTask::finish);
m_zip_watcher.setFuture(m_zip_future);
Expand Down