GH-1262 fix relative paths for java binaries
This commit is contained in:
parent
cf0308c970
commit
477a1a88c6
@ -1677,17 +1677,8 @@ void MainWindow::checkSetDefaultJava()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
QString currentJavaPath = MMC->settings()->get("JavaPath").toString();
|
QString currentJavaPath = MMC->settings()->get("JavaPath").toString();
|
||||||
if (currentJavaPath.isEmpty())
|
QString actualPath = ResolveExecutable(currentJavaPath);
|
||||||
{
|
if (currentJavaPath.isNull())
|
||||||
askForJava = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(!currentJavaPath.contains('/'))
|
|
||||||
{
|
|
||||||
currentJavaPath = QStandardPaths::findExecutable(currentJavaPath);
|
|
||||||
}
|
|
||||||
QFile currentJavaBin(currentJavaPath);
|
|
||||||
if(!currentJavaBin.exists())
|
|
||||||
{
|
{
|
||||||
askForJava = true;
|
askForJava = true;
|
||||||
break;
|
break;
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "MultiMC.h"
|
#include "MultiMC.h"
|
||||||
|
|
||||||
#include <java/JavaVersionList.h>
|
#include <java/JavaVersionList.h>
|
||||||
|
#include <pathutils.h>
|
||||||
|
|
||||||
InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent)
|
InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent)
|
||||||
: QWidget(parent), ui(new Ui::InstanceSettingsPage), m_instance(inst)
|
: QWidget(parent), ui(new Ui::InstanceSettingsPage), m_instance(inst)
|
||||||
@ -184,11 +185,21 @@ void InstanceSettingsPage::on_javaDetectBtn_clicked()
|
|||||||
|
|
||||||
void InstanceSettingsPage::on_javaBrowseBtn_clicked()
|
void InstanceSettingsPage::on_javaBrowseBtn_clicked()
|
||||||
{
|
{
|
||||||
QString dir = QFileDialog::getOpenFileName(this, tr("Find Java executable"));
|
QString raw_path = QFileDialog::getOpenFileName(this, tr("Find Java executable"));
|
||||||
if (!dir.isNull())
|
QString cooked_path = NormalizePath(raw_path);
|
||||||
|
|
||||||
|
// do not allow current dir - it's dirty. Do not allow dirs that don't exist
|
||||||
|
if(cooked_path.isEmpty())
|
||||||
{
|
{
|
||||||
ui->javaPathTextBox->setText(dir);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QFileInfo javaInfo(cooked_path);;
|
||||||
|
if(!javaInfo.exists() || !javaInfo.isExecutable())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ui->javaPathTextBox->setText(cooked_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstanceSettingsPage::on_javaTestBtn_clicked()
|
void InstanceSettingsPage::on_javaTestBtn_clicked()
|
||||||
|
@ -105,13 +105,24 @@ void JavaPage::on_javaDetectBtn_clicked()
|
|||||||
ui->javaPathTextBox->setText(java->path);
|
ui->javaPathTextBox->setText(java->path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JavaPage::on_javaBrowseBtn_clicked()
|
void JavaPage::on_javaBrowseBtn_clicked()
|
||||||
{
|
{
|
||||||
QString dir = QFileDialog::getOpenFileName(this, tr("Find Java executable"));
|
QString raw_path = QFileDialog::getOpenFileName(this, tr("Find Java executable"));
|
||||||
if (!dir.isNull())
|
QString cooked_path = NormalizePath(raw_path);
|
||||||
|
|
||||||
|
// do not allow current dir - it's dirty. Do not allow dirs that don't exist
|
||||||
|
if(cooked_path.isEmpty())
|
||||||
{
|
{
|
||||||
ui->javaPathTextBox->setText(dir);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QFileInfo javaInfo(cooked_path);;
|
||||||
|
if(!javaInfo.exists() || !javaInfo.isExecutable())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ui->javaPathTextBox->setText(cooked_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JavaPage::on_javaTestBtn_clicked()
|
void JavaPage::on_javaTestBtn_clicked()
|
||||||
|
@ -25,6 +25,18 @@ MULTIMC_UTIL_EXPORT QString PathCombine(QString path1, QString path2, QString pa
|
|||||||
|
|
||||||
MULTIMC_UTIL_EXPORT QString AbsolutePath(QString path);
|
MULTIMC_UTIL_EXPORT QString AbsolutePath(QString path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolve an executable
|
||||||
|
*
|
||||||
|
* Will resolve:
|
||||||
|
* single executable (by name)
|
||||||
|
* relative path
|
||||||
|
* absolute path
|
||||||
|
*
|
||||||
|
* @return absolute path to executable or null string
|
||||||
|
*/
|
||||||
|
MULTIMC_UTIL_EXPORT QString ResolveExecutable(QString path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalize path
|
* Normalize path
|
||||||
*
|
*
|
||||||
@ -33,7 +45,7 @@ MULTIMC_UTIL_EXPORT QString AbsolutePath(QString path);
|
|||||||
*
|
*
|
||||||
* Returns false if the path logic somehow filed (and normalizedPath in invalid)
|
* Returns false if the path logic somehow filed (and normalizedPath in invalid)
|
||||||
*/
|
*/
|
||||||
QString NormalizePath(QString path);
|
MULTIMC_UTIL_EXPORT QString NormalizePath(QString path);
|
||||||
|
|
||||||
MULTIMC_UTIL_EXPORT QString RemoveInvalidFilenameChars(QString string, QChar replaceWith = '-');
|
MULTIMC_UTIL_EXPORT QString RemoveInvalidFilenameChars(QString string, QChar replaceWith = '-');
|
||||||
|
|
||||||
|
@ -40,6 +40,24 @@ QString AbsolutePath(QString path)
|
|||||||
return QFileInfo(path).absolutePath();
|
return QFileInfo(path).absolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString ResolveExecutable(QString path)
|
||||||
|
{
|
||||||
|
if (path.isEmpty())
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
if(!path.contains('/'))
|
||||||
|
{
|
||||||
|
path = QStandardPaths::findExecutable(path);
|
||||||
|
}
|
||||||
|
QFileInfo pathInfo(path);
|
||||||
|
if(!pathInfo.exists() || !pathInfo.isExecutable())
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
return pathInfo.absoluteFilePath();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalize path
|
* Normalize path
|
||||||
*
|
*
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include "CheckJava.h"
|
#include "CheckJava.h"
|
||||||
#include <launch/LaunchTask.h>
|
#include <launch/LaunchTask.h>
|
||||||
|
#include <pathutils.h>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ void CheckJava::executeTask()
|
|||||||
{
|
{
|
||||||
auto instance = m_parent->instance();
|
auto instance = m_parent->instance();
|
||||||
auto settings = instance->settings();
|
auto settings = instance->settings();
|
||||||
m_javaPath = settings->get("JavaPath").toString();
|
m_javaPath = ResolveExecutable(settings->get("JavaPath").toString());
|
||||||
bool perInstance = settings->get("OverrideJava").toBool() || settings->get("OverrideJavaLocation").toBool();
|
bool perInstance = settings->get("OverrideJava").toBool() || settings->get("OverrideJavaLocation").toBool();
|
||||||
|
|
||||||
auto realJavaPath = QStandardPaths::findExecutable(m_javaPath);
|
auto realJavaPath = QStandardPaths::findExecutable(m_javaPath);
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "LaunchMinecraft.h"
|
#include "LaunchMinecraft.h"
|
||||||
#include <launch/LaunchTask.h>
|
#include <launch/LaunchTask.h>
|
||||||
#include <minecraft/OneSixInstance.h>
|
#include <minecraft/OneSixInstance.h>
|
||||||
|
#include <pathutils.h>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
|
||||||
LaunchMinecraft::LaunchMinecraft(LaunchTask *parent) : LaunchStep(parent)
|
LaunchMinecraft::LaunchMinecraft(LaunchTask *parent) : LaunchStep(parent)
|
||||||
@ -33,7 +34,7 @@ void LaunchMinecraft::executeTask()
|
|||||||
QString allArgs = args.join(", ");
|
QString allArgs = args.join(", ");
|
||||||
emit logLine("Java Arguments:\n[" + m_parent->censorPrivateInfo(allArgs) + "]\n\n", MessageLevel::MultiMC);
|
emit logLine("Java Arguments:\n[" + m_parent->censorPrivateInfo(allArgs) + "]\n\n", MessageLevel::MultiMC);
|
||||||
|
|
||||||
auto javaPath = instance->settings()->get("JavaPath").toString();
|
auto javaPath = ResolveExecutable(instance->settings()->get("JavaPath").toString());
|
||||||
|
|
||||||
m_process.setProcessEnvironment(instance->createEnvironment());
|
m_process.setProcessEnvironment(instance->createEnvironment());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user