summaryrefslogtreecommitdiffstats
path: root/logic/JavaChecker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'logic/JavaChecker.cpp')
-rw-r--r--logic/JavaChecker.cpp75
1 files changed, 54 insertions, 21 deletions
diff --git a/logic/JavaChecker.cpp b/logic/JavaChecker.cpp
index daad7281..2b94fbb6 100644
--- a/logic/JavaChecker.cpp
+++ b/logic/JavaChecker.cpp
@@ -1,6 +1,8 @@
#include "JavaChecker.h"
#include <QFile>
#include <QProcess>
+#include <QMap>
+#include <QTemporaryFile>
#define CHECKER_FILE "JavaChecker.jar"
@@ -8,16 +10,17 @@ JavaChecker::JavaChecker(QObject *parent) : QObject(parent)
{
}
-void JavaChecker::performCheck(QString path)
+void JavaChecker::performCheck()
{
- if(QFile::exists(CHECKER_FILE))
- {
- QFile::remove(CHECKER_FILE);
- }
- // extract the checker
- QFile(":/java/checker.jar").copy(CHECKER_FILE);
+ checkerJar.setFileTemplate("checker_XXXXXX.jar");
+ checkerJar.open();
+ QFile inner(":/java/checker.jar");
+ inner.open(QIODevice::ReadOnly);
+ checkerJar.write(inner.readAll());
+ inner.close();
+ checkerJar.close();
- QStringList args = {"-jar", CHECKER_FILE};
+ QStringList args = {"-jar", checkerJar.fileName()};
process.reset(new QProcess());
process->setArguments(args);
@@ -39,31 +42,55 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status)
killTimer.stop();
QProcessPtr _process;
_process.swap(process);
+ checkerJar.remove();
+
+ 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)
{
- emit checkFinished({});
+ 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(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 +99,13 @@ void JavaChecker::error(QProcess::ProcessError err)
if(err == QProcess::FailedToStart)
{
killTimer.stop();
- emit checkFinished({});
+
+ JavaCheckResult result;
+ {
+ result.path = path;
+ }
+
+ emit checkFinished(result);
return;
}
}