diff options
author | Sky <git@bunnies.cc> | 2013-12-11 03:54:39 +0000 |
---|---|---|
committer | Sky <git@bunnies.cc> | 2013-12-11 04:54:00 +0000 |
commit | afa5e14e2074343270ff205e042f102c03dface0 (patch) | |
tree | 1b72b755c5b7292742b048aec4b4a77af8dec4ac /logic/JavaChecker.cpp | |
parent | ab69c1b9e6c25e92ded4a6ac6774e468a2e08b7b (diff) | |
download | MultiMC-afa5e14e2074343270ff205e042f102c03dface0.tar MultiMC-afa5e14e2074343270ff205e042f102c03dface0.tar.gz MultiMC-afa5e14e2074343270ff205e042f102c03dface0.tar.lz MultiMC-afa5e14e2074343270ff205e042f102c03dface0.tar.xz MultiMC-afa5e14e2074343270ff205e042f102c03dface0.zip |
Better (but unsorted) Java detection
Diffstat (limited to 'logic/JavaChecker.cpp')
-rw-r--r-- | logic/JavaChecker.cpp | 58 |
1 files changed, 44 insertions, 14 deletions
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 <QFile> #include <QProcess> +#include <QMap> #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<QString, QString> 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; } } |