Show a warning if the instance path contains a '!'
The checks and warnings happen the time MMC loads (via QLOG_INFO), the time the GUI starts (via a dialog) and when the user changes the instance path via the settings window.
This commit is contained in:
parent
e5b393318f
commit
c0254d9a75
39
MultiMC.cpp
39
MultiMC.cpp
@ -54,8 +54,7 @@ static const int APPDATA_BUFFER_SIZE = 1024;
|
|||||||
|
|
||||||
using namespace Util::Commandline;
|
using namespace Util::Commandline;
|
||||||
|
|
||||||
MultiMC::MultiMC(int &argc, char **argv, bool root_override)
|
MultiMC::MultiMC(int &argc, char **argv, bool root_override) : QApplication(argc, argv)
|
||||||
: QApplication(argc, argv)
|
|
||||||
{
|
{
|
||||||
setOrganizationName("MultiMC");
|
setOrganizationName("MultiMC");
|
||||||
setApplicationName("MultiMC5");
|
setApplicationName("MultiMC5");
|
||||||
@ -216,6 +215,15 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override)
|
|||||||
|
|
||||||
// and instances
|
// and instances
|
||||||
auto InstDirSetting = m_settings->getSetting("InstanceDir");
|
auto InstDirSetting = m_settings->getSetting("InstanceDir");
|
||||||
|
// instance path: check for problems with '!' in instance path and warn the user in the log
|
||||||
|
// and rememer that we have to show him a dialog when the gui starts (if it does so)
|
||||||
|
QString instDir = MMC->settings()->get("InstanceDir").toString();
|
||||||
|
QLOG_INFO() << "Instance path : " << instDir;
|
||||||
|
if (checkProblemticPathJava(QDir(instDir)))
|
||||||
|
{
|
||||||
|
QLOG_WARN()
|
||||||
|
<< "Your instance path contains \'!\' and this is known to cause java problems";
|
||||||
|
}
|
||||||
m_instances.reset(new InstanceList(InstDirSetting->get().toString(), this));
|
m_instances.reset(new InstanceList(InstDirSetting->get().toString(), this));
|
||||||
QLOG_INFO() << "Loading Instances...";
|
QLOG_INFO() << "Loading Instances...";
|
||||||
m_instances->loadList();
|
m_instances->loadList();
|
||||||
@ -245,8 +253,7 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override)
|
|||||||
{
|
{
|
||||||
profiler->registerSettings(m_settings.get());
|
profiler->registerSettings(m_settings.get());
|
||||||
}
|
}
|
||||||
m_tools.insert("mcedit",
|
m_tools.insert("mcedit", std::shared_ptr<BaseDetachedToolFactory>(new MCEditFactory()));
|
||||||
std::shared_ptr<BaseDetachedToolFactory>(new MCEditFactory()));
|
|
||||||
for (auto tool : m_tools.values())
|
for (auto tool : m_tools.values())
|
||||||
{
|
{
|
||||||
tool->registerSettings(m_settings.get());
|
tool->registerSettings(m_settings.get());
|
||||||
@ -374,7 +381,9 @@ void MultiMC::initGlobalSettings()
|
|||||||
QString ftbDefault, newFtbDefault, oldFtbDefault;
|
QString ftbDefault, newFtbDefault, oldFtbDefault;
|
||||||
if (!GetEnvironmentVariableW(L"LOCALAPPDATA", newBuf, APPDATA_BUFFER_SIZE))
|
if (!GetEnvironmentVariableW(L"LOCALAPPDATA", newBuf, APPDATA_BUFFER_SIZE))
|
||||||
{
|
{
|
||||||
QLOG_FATAL() << "Your LOCALAPPDATA folder is missing! If you are on windows, this means your system is broken. If you aren't on windows, how the **** are you running the windows build????";
|
QLOG_FATAL() << "Your LOCALAPPDATA folder is missing! If you are on windows, this "
|
||||||
|
"means your system is broken. If you aren't on windows, how the **** "
|
||||||
|
"are you running the windows build????";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -382,7 +391,9 @@ void MultiMC::initGlobalSettings()
|
|||||||
}
|
}
|
||||||
if (!GetEnvironmentVariableW(L"APPDATA", buf, APPDATA_BUFFER_SIZE))
|
if (!GetEnvironmentVariableW(L"APPDATA", buf, APPDATA_BUFFER_SIZE))
|
||||||
{
|
{
|
||||||
QLOG_FATAL() << "Your APPDATA folder is missing! If you are on windows, this means your system is broken. If you aren't on windows, how the **** are you running the windows build????";
|
QLOG_FATAL() << "Your APPDATA folder is missing! If you are on windows, this means "
|
||||||
|
"your system is broken. If you aren't on windows, how the **** are you "
|
||||||
|
"running the windows build????";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -405,10 +416,8 @@ void MultiMC::initGlobalSettings()
|
|||||||
#endif
|
#endif
|
||||||
m_settings->registerSetting("FTBLauncherDataRoot", ftbDataDefault);
|
m_settings->registerSetting("FTBLauncherDataRoot", ftbDataDefault);
|
||||||
m_settings->registerSetting("FTBLauncherRoot", ftbDefault);
|
m_settings->registerSetting("FTBLauncherRoot", ftbDefault);
|
||||||
QLOG_INFO() << "FTB Launcher paths:"
|
QLOG_INFO() << "FTB Launcher paths:" << m_settings->get("FTBLauncherDataRoot").toString()
|
||||||
<< m_settings->get("FTBLauncherDataRoot").toString()
|
<< "and" << m_settings->get("FTBLauncherRoot").toString();
|
||||||
<< "and"
|
|
||||||
<< m_settings->get("FTBLauncherRoot").toString();
|
|
||||||
|
|
||||||
m_settings->registerSetting("FTBRoot");
|
m_settings->registerSetting("FTBRoot");
|
||||||
if (m_settings->get("FTBRoot").isNull())
|
if (m_settings->get("FTBRoot").isNull())
|
||||||
@ -544,11 +553,13 @@ void MultiMC::updateProxySettings()
|
|||||||
// Set the application proxy settings.
|
// Set the application proxy settings.
|
||||||
if (proxyTypeStr == "SOCKS5")
|
if (proxyTypeStr == "SOCKS5")
|
||||||
{
|
{
|
||||||
QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, addr, port, user, pass));
|
QNetworkProxy::setApplicationProxy(
|
||||||
|
QNetworkProxy(QNetworkProxy::Socks5Proxy, addr, port, user, pass));
|
||||||
}
|
}
|
||||||
else if (proxyTypeStr == "HTTP")
|
else if (proxyTypeStr == "HTTP")
|
||||||
{
|
{
|
||||||
QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy, addr, port, user, pass));
|
QNetworkProxy::setApplicationProxy(
|
||||||
|
QNetworkProxy(QNetworkProxy::HttpProxy, addr, port, user, pass));
|
||||||
}
|
}
|
||||||
else if (proxyTypeStr == "None")
|
else if (proxyTypeStr == "None")
|
||||||
{
|
{
|
||||||
@ -563,7 +574,8 @@ void MultiMC::updateProxySettings()
|
|||||||
|
|
||||||
QLOG_INFO() << "Detecting proxy settings...";
|
QLOG_INFO() << "Detecting proxy settings...";
|
||||||
QNetworkProxy proxy = QNetworkProxy::applicationProxy();
|
QNetworkProxy proxy = QNetworkProxy::applicationProxy();
|
||||||
if (m_qnam.get()) m_qnam->setProxy(proxy);
|
if (m_qnam.get())
|
||||||
|
m_qnam->setProxy(proxy);
|
||||||
QString proxyDesc;
|
QString proxyDesc;
|
||||||
if (proxy.type() == QNetworkProxy::NoProxy)
|
if (proxy.type() == QNetworkProxy::NoProxy)
|
||||||
{
|
{
|
||||||
@ -662,7 +674,6 @@ std::shared_ptr<URNResolver> MultiMC::resolver()
|
|||||||
return m_resolver;
|
return m_resolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MultiMC::installUpdates(const QString updateFilesDir, UpdateFlags flags)
|
void MultiMC::installUpdates(const QString updateFilesDir, UpdateFlags flags)
|
||||||
{
|
{
|
||||||
// if we are going to update on exit, save the params now
|
// if we are going to update on exit, save the params now
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
#include "libutil_config.h"
|
#include "libutil_config.h"
|
||||||
|
|
||||||
@ -57,3 +58,6 @@ LIBUTIL_EXPORT void openFileInDefaultProgram(QString filename);
|
|||||||
|
|
||||||
/// Opens the given directory in the default application.
|
/// Opens the given directory in the default application.
|
||||||
LIBUTIL_EXPORT void openDirInDefaultProgram(QString dirpath, bool ensureExists = false);
|
LIBUTIL_EXPORT void openDirInDefaultProgram(QString dirpath, bool ensureExists = false);
|
||||||
|
|
||||||
|
/// Checks if the a given Path contains "!"
|
||||||
|
LIBUTIL_EXPORT bool checkProblemticPathJava(QDir folder);
|
||||||
|
@ -144,3 +144,11 @@ void openFileInDefaultProgram(QString filename)
|
|||||||
{
|
{
|
||||||
QDesktopServices::openUrl(QUrl::fromLocalFile(filename));
|
QDesktopServices::openUrl(QUrl::fromLocalFile(filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Does the directory path contain any '!'? If yes, return true, otherwise false.
|
||||||
|
// (This is a problem for Java)
|
||||||
|
bool checkProblemticPathJava(QDir folder)
|
||||||
|
{
|
||||||
|
QString pathfoldername = folder.absolutePath();
|
||||||
|
return pathfoldername.contains("!", Qt::CaseInsensitive);
|
||||||
|
}
|
||||||
|
@ -1533,3 +1533,21 @@ void MainWindow::checkSetDefaultJava()
|
|||||||
MMC->settings()->set("JavaPath", QString("java"));
|
MMC->settings()->set("JavaPath", QString("java"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::checkInstancePathForProblems()
|
||||||
|
{
|
||||||
|
QString instanceFolder = MMC->settings()->get("InstanceDir").toString();
|
||||||
|
if (checkProblemticPathJava(QDir(instanceFolder)))
|
||||||
|
{
|
||||||
|
QMessageBox warning;
|
||||||
|
warning.setText(tr(
|
||||||
|
"Your instance folder contains \'!\' and this is known to cause Java problems!"));
|
||||||
|
warning.setInformativeText(
|
||||||
|
tr("You have now three options: <br/>"
|
||||||
|
" - ignore this warning <br/>"
|
||||||
|
" - change the instance dir in the settings <br/>"
|
||||||
|
" - move this installation of MultiMC5 to a different folder"));
|
||||||
|
warning.setDefaultButton(QMessageBox::Ok);
|
||||||
|
warning.exec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -52,6 +52,7 @@ public:
|
|||||||
|
|
||||||
void checkSetDefaultJava();
|
void checkSetDefaultJava();
|
||||||
void checkMigrateLegacyAssets();
|
void checkMigrateLegacyAssets();
|
||||||
|
void checkInstancePathForProblems();
|
||||||
|
|
||||||
private
|
private
|
||||||
slots:
|
slots:
|
||||||
|
@ -118,10 +118,31 @@ void MultiMCPage::on_instDirBrowseBtn_clicked()
|
|||||||
|
|
||||||
// do not allow current dir - it's dirty. Do not allow dirs that don't exist
|
// do not allow current dir - it's dirty. Do not allow dirs that don't exist
|
||||||
if (!cooked_dir.isEmpty() && QDir(cooked_dir).exists())
|
if (!cooked_dir.isEmpty() && QDir(cooked_dir).exists())
|
||||||
|
{
|
||||||
|
if (checkProblemticPathJava(QDir(cooked_dir)))
|
||||||
|
{
|
||||||
|
QMessageBox warning;
|
||||||
|
warning.setText(tr("You're trying to specify an instance folder which\'s path "
|
||||||
|
"contains at least one \'!\'. "
|
||||||
|
"Java is known to cause problems if that is the case, your "
|
||||||
|
"instances (probably) won't start!"));
|
||||||
|
warning.setInformativeText(
|
||||||
|
tr("Do you really want to use this path? "
|
||||||
|
"Selecting \"No\" will close this and not alter your instance path."));
|
||||||
|
warning.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||||
|
int result = warning.exec();
|
||||||
|
if (result == QMessageBox::Yes)
|
||||||
{
|
{
|
||||||
ui->instDirTextBox->setText(cooked_dir);
|
ui->instDirTextBox->setText(cooked_dir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->instDirTextBox->setText(cooked_dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MultiMCPage::on_iconsDirBrowseBtn_clicked()
|
void MultiMCPage::on_iconsDirBrowseBtn_clicked()
|
||||||
{
|
{
|
||||||
QString raw_dir = QFileDialog::getExistingDirectory(this, tr("Icons Directory"),
|
QString raw_dir = QFileDialog::getExistingDirectory(this, tr("Icons Directory"),
|
||||||
|
1
main.cpp
1
main.cpp
@ -17,6 +17,7 @@ int main_gui(MultiMC &app)
|
|||||||
mainWin.show();
|
mainWin.show();
|
||||||
mainWin.checkMigrateLegacyAssets();
|
mainWin.checkMigrateLegacyAssets();
|
||||||
mainWin.checkSetDefaultJava();
|
mainWin.checkSetDefaultJava();
|
||||||
|
mainWin.checkInstancePathForProblems();
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user