From afa5e14e2074343270ff205e042f102c03dface0 Mon Sep 17 00:00:00 2001 From: Sky Date: Wed, 11 Dec 2013 03:54:39 +0000 Subject: Better (but unsorted) Java detection --- logic/JavaChecker.cpp | 58 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 14 deletions(-) (limited to 'logic/JavaChecker.cpp') diff --git a/logic/JavaChecker.cpp b/logic/JavaChecker.cpp index daad7281..38bbf700 100644 --- a/logic/JavaChecker.cpp +++ b/logic/JavaChecker.cpp @@ -1,6 +1,7 @@ #include "JavaChecker.h" #include #include +#include #define CHECKER_FILE "JavaChecker.jar" @@ -8,7 +9,7 @@ JavaChecker::JavaChecker(QObject *parent) : QObject(parent) { } -void JavaChecker::performCheck(QString path) +void JavaChecker::performCheck() { if(QFile::exists(CHECKER_FILE)) { @@ -40,30 +41,53 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status) QProcessPtr _process; _process.swap(process); + JavaCheckResult result; + { + result.path = path; + } + if (status == QProcess::CrashExit || exitcode == 1) { - emit checkFinished({}); + emit checkFinished(result); return; } + bool success = true; QString p_stdout = _process->readAllStandardOutput(); - auto parts = p_stdout.split('=', QString::SkipEmptyParts); - if (parts.size() != 2 || parts[0] != "os.arch") + QMap results; + QStringList lines = p_stdout.split("\n", QString::SkipEmptyParts); + for(QString line : lines) + { + line = line.trimmed(); + + auto parts = line.split('=', QString::SkipEmptyParts); + if(parts.size() != 2 || parts[0].isEmpty() || parts[1].isEmpty()) + { + success = false; + } + else + { + results.insert(parts[0], parts[1]); + } + } + + if(!results.contains("os.arch") || !results.contains("java.version") || !success) { - emit checkFinished({}); + emit checkFinished(result); return; } - auto os_arch = parts[1].remove('\n').remove('\r'); + auto os_arch = results["os.arch"]; + auto java_version = results["java.version"]; bool is_64 = os_arch == "x86_64" || os_arch == "amd64"; - JavaCheckResult result; - { - result.valid = true; - result.is_64bit = is_64; - result.mojangPlatform = is_64 ? "64" : "32"; - result.realPlatform = os_arch; - } + + result.valid = true; + result.is_64bit = is_64; + result.mojangPlatform = is_64 ? "64" : "32"; + result.realPlatform = os_arch; + result.javaVersion = java_version; + emit checkFinished(result); } @@ -72,7 +96,13 @@ void JavaChecker::error(QProcess::ProcessError err) if(err == QProcess::FailedToStart) { killTimer.stop(); - emit checkFinished({}); + + JavaCheckResult result; + { + result.path = path; + } + + emit checkFinished(result); return; } } -- cgit v1.2.3