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; -}; | 
