Better (but unsorted) Java detection
This commit is contained in:
@ -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);
|
||||
|
||||
if (status == QProcess::CrashExit || exitcode == 1)
|
||||
{
|
||||
emit checkFinished({});
|
||||
return;
|
||||
}
|
||||
|
||||
QString p_stdout = _process->readAllStandardOutput();
|
||||
auto parts = p_stdout.split('=', QString::SkipEmptyParts);
|
||||
if (parts.size() != 2 || parts[0] != "os.arch")
|
||||
{
|
||||
emit checkFinished({});
|
||||
return;
|
||||
}
|
||||
|
||||
auto os_arch = parts[1].remove('\n').remove('\r');
|
||||
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.path = path;
|
||||
}
|
||||
|
||||
if (status == QProcess::CrashExit || exitcode == 1)
|
||||
{
|
||||
emit checkFinished(result);
|
||||
return;
|
||||
}
|
||||
|
||||
bool success = true;
|
||||
QString p_stdout = _process->readAllStandardOutput();
|
||||
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(result);
|
||||
return;
|
||||
}
|
||||
|
||||
auto os_arch = results["os.arch"];
|
||||
auto java_version = results["java.version"];
|
||||
bool is_64 = os_arch == "x86_64" || os_arch == "amd64";
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user