diff options
Diffstat (limited to 'launcher/java')
-rw-r--r-- | launcher/java/JavaChecker.cpp | 12 | ||||
-rw-r--r-- | launcher/java/JavaInstallList.cpp | 4 | ||||
-rw-r--r-- | launcher/java/JavaInstallList.h | 4 | ||||
-rw-r--r-- | launcher/java/JavaUtils.cpp | 18 | ||||
-rw-r--r-- | launcher/java/launch/CheckJava.cpp | 139 | ||||
-rw-r--r-- | launcher/java/launch/CheckJava.h | 45 |
6 files changed, 23 insertions, 199 deletions
diff --git a/launcher/java/JavaChecker.cpp b/launcher/java/JavaChecker.cpp index 81c61ab0..80c599cc 100644 --- a/launcher/java/JavaChecker.cpp +++ b/launcher/java/JavaChecker.cpp @@ -1,14 +1,14 @@ #include "JavaChecker.h" -#include "JavaUtils.h" -#include <FileSystem.h> -#include <Commandline.h> + #include <QFile> #include <QProcess> #include <QMap> -#include <QCoreApplication> #include <QDebug> -#include "Env.h" +#include "JavaUtils.h" +#include "FileSystem.h" +#include "Commandline.h" +#include "Application.h" JavaChecker::JavaChecker(QObject *parent) : QObject(parent) { @@ -16,7 +16,7 @@ JavaChecker::JavaChecker(QObject *parent) : QObject(parent) void JavaChecker::performCheck() { - QString checkerJar = FS::PathCombine(ENV.getJarsPath(), "JavaCheck.jar"); + QString checkerJar = FS::PathCombine(APPLICATION->getJarsPath(), "JavaCheck.jar"); QStringList args; diff --git a/launcher/java/JavaInstallList.cpp b/launcher/java/JavaInstallList.cpp index 0bded03c..07f2bd8c 100644 --- a/launcher/java/JavaInstallList.cpp +++ b/launcher/java/JavaInstallList.cpp @@ -29,13 +29,13 @@ JavaInstallList::JavaInstallList(QObject *parent) : BaseVersionList(parent) { } -shared_qobject_ptr<Task> JavaInstallList::getLoadTask() +Task::Ptr JavaInstallList::getLoadTask() { load(); return getCurrentTask(); } -shared_qobject_ptr<Task> JavaInstallList::getCurrentTask() +Task::Ptr JavaInstallList::getCurrentTask() { if(m_status == Status::InProgress) { diff --git a/launcher/java/JavaInstallList.h b/launcher/java/JavaInstallList.h index e5c72b17..3c237edf 100644 --- a/launcher/java/JavaInstallList.h +++ b/launcher/java/JavaInstallList.h @@ -40,7 +40,7 @@ class JavaInstallList : public BaseVersionList public: explicit JavaInstallList(QObject *parent = 0); - shared_qobject_ptr<Task> getLoadTask() override; + Task::Ptr getLoadTask() override; bool isLoaded() override; const BaseVersionPtr at(int i) const override; int count() const override; @@ -54,7 +54,7 @@ public slots: protected: void load(); - shared_qobject_ptr<Task> getCurrentTask(); + Task::Ptr getCurrentTask(); protected: Status m_status = Status::NotDone; diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp index dff196ce..6b58db37 100644 --- a/launcher/java/JavaUtils.cpp +++ b/launcher/java/JavaUtils.cpp @@ -265,12 +265,18 @@ QList<QString> JavaUtils::FindJavaPaths() QList<JavaInstallPtr> ADOPTOPENJDK64s = this->FindJavaFromRegistryKey( KEY_WOW64_64KEY, "SOFTWARE\\AdoptOpenJDK\\JDK", "Path", "\\hotspot\\MSI"); - // Adoptium (Eclipse) - QList<JavaInstallPtr> ECLIPSEJDK32s = this->FindJavaFromRegistryKey( + // Foundation (Eclipse) + QList<JavaInstallPtr> FOUNDATIONJDK32s = this->FindJavaFromRegistryKey( KEY_WOW64_32KEY, "SOFTWARE\\Eclipse Foundation\\JDK", "Path", "\\hotspot\\MSI"); - QList<JavaInstallPtr> ECLIPSEJDK64s = this->FindJavaFromRegistryKey( + QList<JavaInstallPtr> FOUNDATIONJDK64s = this->FindJavaFromRegistryKey( KEY_WOW64_64KEY, "SOFTWARE\\Eclipse Foundation\\JDK", "Path", "\\hotspot\\MSI"); + // Adoptium (Eclipse) + QList<JavaInstallPtr> ADOPTIUMJDK32s = this->FindJavaFromRegistryKey( + KEY_WOW64_32KEY, "SOFTWARE\\Eclipse Adoptium\\JDK", "Path", "\\hotspot\\MSI"); + QList<JavaInstallPtr> ADOPTIUMJDK64s = this->FindJavaFromRegistryKey( + KEY_WOW64_64KEY, "SOFTWARE\\Eclipse Adoptium\\JDK", "Path", "\\hotspot\\MSI"); + // Microsoft QList<JavaInstallPtr> MICROSOFTJDK64s = this->FindJavaFromRegistryKey( KEY_WOW64_64KEY, "SOFTWARE\\Microsoft\\JDK", "Path", "\\hotspot\\MSI"); @@ -297,7 +303,8 @@ QList<QString> JavaUtils::FindJavaPaths() java_candidates.append(JDK64s); java_candidates.append(NEWJDK64s); java_candidates.append(ADOPTOPENJDK64s); - java_candidates.append(ECLIPSEJDK64s); + java_candidates.append(FOUNDATIONJDK64s); + java_candidates.append(ADOPTIUMJDK64s); java_candidates.append(MICROSOFTJDK64s); java_candidates.append(ZULU64s); java_candidates.append(LIBERICA64s); @@ -311,7 +318,8 @@ QList<QString> JavaUtils::FindJavaPaths() java_candidates.append(JDK32s); java_candidates.append(NEWJDK32s); java_candidates.append(ADOPTOPENJDK32s); - java_candidates.append(ECLIPSEJDK32s); + java_candidates.append(FOUNDATIONJDK32s); + java_candidates.append(ADOPTIUMJDK32s); java_candidates.append(ZULU32s); java_candidates.append(LIBERICA32s); diff --git a/launcher/java/launch/CheckJava.cpp b/launcher/java/launch/CheckJava.cpp deleted file mode 100644 index fb338231..00000000 --- a/launcher/java/launch/CheckJava.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright 2013-2021 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "CheckJava.h" -#include <launch/LaunchTask.h> -#include <FileSystem.h> -#include <QStandardPaths> -#include <QFileInfo> -#include <sys.h> - -void CheckJava::executeTask() -{ - auto instance = m_parent->instance(); - auto settings = instance->settings(); - m_javaPath = FS::ResolveExecutable(settings->get("JavaPath").toString()); - bool perInstance = settings->get("OverrideJava").toBool() || settings->get("OverrideJavaLocation").toBool(); - - auto realJavaPath = QStandardPaths::findExecutable(m_javaPath); - if (realJavaPath.isEmpty()) - { - if (perInstance) - { - emit logLine( - QString("The java binary \"%1\" couldn't be found. Please fix the java path " - "override in the instance's settings or disable it.").arg(m_javaPath), - MessageLevel::Warning); - } - else - { - emit logLine(QString("The java binary \"%1\" couldn't be found. Please set up java in " - "the settings.").arg(m_javaPath), - MessageLevel::Warning); - } - emitFailed(QString("Java path is not valid.")); - return; - } - else - { - emit logLine("Java path is:\n" + m_javaPath + "\n\n", MessageLevel::Launcher); - } - - QFileInfo javaInfo(realJavaPath); - qlonglong javaUnixTime = javaInfo.lastModified().toMSecsSinceEpoch(); - auto storedUnixTime = settings->get("JavaTimestamp").toLongLong(); - auto storedArchitecture = settings->get("JavaArchitecture").toString(); - auto storedVersion = settings->get("JavaVersion").toString(); - auto storedVendor = settings->get("JavaVendor").toString(); - m_javaUnixTime = javaUnixTime; - // if timestamps are not the same, or something is missing, check! - if (javaUnixTime != storedUnixTime || storedVersion.size() == 0 || storedArchitecture.size() == 0 || storedVendor.size() == 0) - { - m_JavaChecker = new JavaChecker(); - emit logLine(QString("Checking Java version..."), MessageLevel::Launcher); - connect(m_JavaChecker.get(), &JavaChecker::checkFinished, this, &CheckJava::checkJavaFinished); - m_JavaChecker->m_path = realJavaPath; - m_JavaChecker->performCheck(); - return; - } - else - { - auto verString = instance->settings()->get("JavaVersion").toString(); - auto archString = instance->settings()->get("JavaArchitecture").toString(); - auto vendorString = instance->settings()->get("JavaVendor").toString(); - printJavaInfo(verString, archString, vendorString); - } - emitSucceeded(); -} - -void CheckJava::checkJavaFinished(JavaCheckResult result) -{ - switch (result.validity) - { - case JavaCheckResult::Validity::Errored: - { - // Error message displayed if java can't start - emit logLine(QString("Could not start java:"), MessageLevel::Error); - emit logLines(result.errorLog.split('\n'), MessageLevel::Error); - emit logLine("\nCheck your MultiMC Java settings.", MessageLevel::Launcher); - printSystemInfo(false, false); - emitFailed(QString("Could not start java!")); - return; - } - case JavaCheckResult::Validity::ReturnedInvalidData: - { - emit logLine(QString("Java checker returned some invalid data MultiMC doesn't understand:"), MessageLevel::Error); - emit logLines(result.outLog.split('\n'), MessageLevel::Warning); - emit logLine("\nMinecraft might not start properly.", MessageLevel::Launcher); - printSystemInfo(false, false); - emitSucceeded(); - return; - } - case JavaCheckResult::Validity::Valid: - { - auto instance = m_parent->instance(); - printJavaInfo(result.javaVersion.toString(), result.mojangPlatform, result.javaVendor); - instance->settings()->set("JavaVersion", result.javaVersion.toString()); - instance->settings()->set("JavaArchitecture", result.mojangPlatform); - instance->settings()->set("JavaVendor", result.javaVendor); - instance->settings()->set("JavaTimestamp", m_javaUnixTime); - emitSucceeded(); - return; - } - } -} - -void CheckJava::printJavaInfo(const QString& version, const QString& architecture, const QString & vendor) -{ - emit logLine(QString("Java is version %1, using %2-bit architecture, from %3.\n\n").arg(version, architecture, vendor), MessageLevel::Launcher); - printSystemInfo(true, architecture == "64"); -} - -void CheckJava::printSystemInfo(bool javaIsKnown, bool javaIs64bit) -{ - auto cpu64 = Sys::isCPU64bit(); - auto system64 = Sys::isSystem64bit(); - if(cpu64 != system64) - { - emit logLine(QString("Your CPU architecture is not matching your system architecture. You might want to install a 64bit Operating System.\n\n"), MessageLevel::Error); - } - if(javaIsKnown) - { - if(javaIs64bit != system64) - { - emit logLine(QString("Your Java architecture is not matching your system architecture. You might want to install a 64bit Java version.\n\n"), MessageLevel::Error); - } - } -} diff --git a/launcher/java/launch/CheckJava.h b/launcher/java/launch/CheckJava.h deleted file mode 100644 index 68cd618b..00000000 --- a/launcher/java/launch/CheckJava.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright 2013-2021 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include <launch/LaunchStep.h> -#include <LoggedProcess.h> -#include <java/JavaChecker.h> - -class CheckJava: public LaunchStep -{ - Q_OBJECT -public: - explicit CheckJava(LaunchTask *parent) :LaunchStep(parent){}; - virtual ~CheckJava() {}; - - virtual void executeTask(); - virtual bool canAbort() const - { - return false; - } -private slots: - void checkJavaFinished(JavaCheckResult result); - -private: - void printJavaInfo(const QString & version, const QString & architecture, const QString & vendor); - void printSystemInfo(bool javaIsKnown, bool javaIs64bit); - -private: - QString m_javaPath; - qlonglong m_javaUnixTime; - JavaCheckerPtr m_JavaChecker; -}; |