summaryrefslogtreecommitdiffstats
path: root/logic/JavaChecker.cpp
diff options
context:
space:
mode:
authorSky <git@bunnies.cc>2013-12-11 03:54:39 +0000
committerSky <git@bunnies.cc>2013-12-11 04:54:00 +0000
commitafa5e14e2074343270ff205e042f102c03dface0 (patch)
tree1b72b755c5b7292742b048aec4b4a77af8dec4ac /logic/JavaChecker.cpp
parentab69c1b9e6c25e92ded4a6ac6774e468a2e08b7b (diff)
downloadMultiMC-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.cpp58
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;
}
}