From c4ec6bc0f552fe7af693d52826c82f1e7db908de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 7 Jan 2017 06:52:09 +0100 Subject: NOISSUE polish the java setup wizard page * Added a button to check why Java failed * It will now avoid automatically scanning binaries that do not have 'java' in their filename * Fixed some crashes related to running too many Java checks (it only does one at a time now) * It can now distinguish between more Java failure states (not there at all, crashing, returning nonsense) * Changed '...' button to Browse button to match the wizard page subtitle * Changing minimum and maximum memory will no longer trigger a java check twice --- api/logic/java/JavaChecker.cpp | 7 +++--- api/logic/java/JavaChecker.h | 8 ++++++- api/logic/java/JavaInstallList.cpp | 2 +- api/logic/java/launch/CheckJava.cpp | 46 ++++++++++++++++++++++++------------- 4 files changed, 42 insertions(+), 21 deletions(-) (limited to 'api/logic/java') diff --git a/api/logic/java/JavaChecker.cpp b/api/logic/java/JavaChecker.cpp index 54d552a9..daf375ad 100644 --- a/api/logic/java/JavaChecker.cpp +++ b/api/logic/java/JavaChecker.cpp @@ -80,13 +80,14 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status) result.id = m_id; } result.errorLog = m_stderr; + result.outLog = m_stdout; qDebug() << "STDOUT" << m_stdout; qWarning() << "STDERR" << m_stderr; qDebug() << "Java checker finished with status " << status << " exit code " << exitcode; if (status == QProcess::CrashExit || exitcode == 1) { - qDebug() << "Java checker failed!"; + result.validity = JavaCheckResult::Validity::Errored; emit checkFinished(result); return; } @@ -112,7 +113,7 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status) if(!results.contains("os.arch") || !results.contains("java.version") || !success) { - qDebug() << "Java checker failed - couldn't extract required information."; + result.validity = JavaCheckResult::Validity::ReturnedInvalidData; emit checkFinished(result); return; } @@ -122,7 +123,7 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status) bool is_64 = os_arch == "x86_64" || os_arch == "amd64"; - result.valid = true; + result.validity = JavaCheckResult::Validity::Valid; result.is_64bit = is_64; result.mojangPlatform = is_64 ? "64" : "32"; result.realPlatform = os_arch; diff --git a/api/logic/java/JavaChecker.h b/api/logic/java/JavaChecker.h index 650e7ce3..c6bd697c 100644 --- a/api/logic/java/JavaChecker.h +++ b/api/logic/java/JavaChecker.h @@ -15,10 +15,16 @@ struct MULTIMC_LOGIC_EXPORT JavaCheckResult QString mojangPlatform; QString realPlatform; JavaVersion javaVersion; + QString outLog; QString errorLog; - bool valid = false; bool is_64bit = false; int id; + enum class Validity + { + Errored, + ReturnedInvalidData, + Valid + } validity = Validity::Errored; }; typedef std::shared_ptr QProcessPtr; diff --git a/api/logic/java/JavaInstallList.cpp b/api/logic/java/JavaInstallList.cpp index c0729227..d9204ba3 100644 --- a/api/logic/java/JavaInstallList.cpp +++ b/api/logic/java/JavaInstallList.cpp @@ -156,7 +156,7 @@ void JavaListLoadTask::javaCheckerFinished(QList results) qDebug() << "Found the following valid Java installations:"; for(JavaCheckResult result : results) { - if(result.valid) + if(result.validity == JavaCheckResult::Validity::Valid) { JavaInstallPtr javaVersion(new JavaInstall()); diff --git a/api/logic/java/launch/CheckJava.cpp b/api/logic/java/launch/CheckJava.cpp index 717fad49..0dc10822 100644 --- a/api/logic/java/launch/CheckJava.cpp +++ b/api/logic/java/launch/CheckJava.cpp @@ -78,23 +78,37 @@ void CheckJava::executeTask() void CheckJava::checkJavaFinished(JavaCheckResult result) { - if (!result.valid) + switch (result.validity) { - // Error message displayed if java can't start - emit logLine(tr("Could not start java:"), MessageLevel::Error); - emit logLines(result.errorLog.split('\n'), MessageLevel::Error); - emit logLine("\nCheck your MultiMC Java settings.", MessageLevel::MultiMC); - printSystemInfo(false, false); - emitFailed(tr("Could not start java!")); - } - else - { - auto instance = m_parent->instance(); - printJavaInfo(result.javaVersion.toString(), result.mojangPlatform); - instance->settings()->set("JavaVersion", result.javaVersion.toString()); - instance->settings()->set("JavaArchitecture", result.mojangPlatform); - instance->settings()->set("JavaTimestamp", m_javaUnixTime); - emitSucceeded(); + case JavaCheckResult::Validity::Errored: + { + // Error message displayed if java can't start + emit logLine(tr("Could not start java:"), MessageLevel::Error); + emit logLines(result.errorLog.split('\n'), MessageLevel::Error); + emit logLine("\nCheck your MultiMC Java settings.", MessageLevel::MultiMC); + printSystemInfo(false, false); + emitFailed(tr("Could not start java!")); + return; + } + case JavaCheckResult::Validity::ReturnedInvalidData: + { + emit logLine(tr("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::MultiMC); + printSystemInfo(false, false); + emitSucceeded(); + return; + } + case JavaCheckResult::Validity::Valid: + { + auto instance = m_parent->instance(); + printJavaInfo(result.javaVersion.toString(), result.mojangPlatform); + instance->settings()->set("JavaVersion", result.javaVersion.toString()); + instance->settings()->set("JavaArchitecture", result.mojangPlatform); + instance->settings()->set("JavaTimestamp", m_javaUnixTime); + emitSucceeded(); + return; + } } } -- cgit v1.2.3