Make FTB instances behave better
* Do not re-create on every reload * Use the version.json/custom.json logic properly * Should be offline-friendly * FTB instances can be copied, turn into normal instances
This commit is contained in:
parent
82c87aa06f
commit
74b5b5f535
5 changed files with 214 additions and 131 deletions
130
MultiMC.cpp
130
MultiMC.cpp
|
@ -34,8 +34,9 @@
|
|||
#include "config.h"
|
||||
using namespace Util::Commandline;
|
||||
|
||||
MultiMC::MultiMC(int &argc, char **argv, const QString &root) : QApplication(argc, argv),
|
||||
m_version{VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_CHANNEL, VERSION_BUILD_TYPE}
|
||||
MultiMC::MultiMC(int &argc, char **argv, const QString &root)
|
||||
: QApplication(argc, argv), m_version{VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD,
|
||||
VERSION_CHANNEL, VERSION_BUILD_TYPE}
|
||||
{
|
||||
setOrganizationName("MultiMC");
|
||||
setApplicationName("MultiMC5");
|
||||
|
@ -135,9 +136,10 @@ MultiMC::MultiMC(int &argc, char **argv, const QString &root) : QApplication(arg
|
|||
}
|
||||
|
||||
// change directory
|
||||
QDir::setCurrent(args["dir"].toString().isEmpty() ?
|
||||
(root.isEmpty() ? QDir::currentPath() : QDir::current().absoluteFilePath(root))
|
||||
: args["dir"].toString());
|
||||
QDir::setCurrent(
|
||||
args["dir"].toString().isEmpty()
|
||||
? (root.isEmpty() ? QDir::currentPath() : QDir::current().absoluteFilePath(root))
|
||||
: args["dir"].toString());
|
||||
|
||||
// init the logger
|
||||
initLogger();
|
||||
|
@ -174,42 +176,43 @@ MultiMC::MultiMC(int &argc, char **argv, const QString &root) : QApplication(arg
|
|||
{
|
||||
QLOG_INFO() << "No proxy found.";
|
||||
}
|
||||
else for (auto proxy : proxies)
|
||||
{
|
||||
QString proxyDesc;
|
||||
if (proxy.type() == QNetworkProxy::NoProxy)
|
||||
else
|
||||
for (auto proxy : proxies)
|
||||
{
|
||||
QLOG_INFO() << "Using no proxy is an option!";
|
||||
continue;
|
||||
QString proxyDesc;
|
||||
if (proxy.type() == QNetworkProxy::NoProxy)
|
||||
{
|
||||
QLOG_INFO() << "Using no proxy is an option!";
|
||||
continue;
|
||||
}
|
||||
switch (proxy.type())
|
||||
{
|
||||
case QNetworkProxy::DefaultProxy:
|
||||
proxyDesc = "Default proxy: ";
|
||||
break;
|
||||
case QNetworkProxy::Socks5Proxy:
|
||||
proxyDesc = "Socks5 proxy: ";
|
||||
break;
|
||||
case QNetworkProxy::HttpProxy:
|
||||
proxyDesc = "HTTP proxy: ";
|
||||
break;
|
||||
case QNetworkProxy::HttpCachingProxy:
|
||||
proxyDesc = "HTTP caching: ";
|
||||
break;
|
||||
case QNetworkProxy::FtpCachingProxy:
|
||||
proxyDesc = "FTP caching: ";
|
||||
break;
|
||||
default:
|
||||
proxyDesc = "DERP proxy: ";
|
||||
break;
|
||||
}
|
||||
proxyDesc += QString("%3@%1:%2 pass %4")
|
||||
.arg(proxy.hostName())
|
||||
.arg(proxy.port())
|
||||
.arg(proxy.user())
|
||||
.arg(proxy.password());
|
||||
QLOG_INFO() << proxyDesc;
|
||||
}
|
||||
switch (proxy.type())
|
||||
{
|
||||
case QNetworkProxy::DefaultProxy:
|
||||
proxyDesc = "Default proxy: ";
|
||||
break;
|
||||
case QNetworkProxy::Socks5Proxy:
|
||||
proxyDesc = "Socks5 proxy: ";
|
||||
break;
|
||||
case QNetworkProxy::HttpProxy:
|
||||
proxyDesc = "HTTP proxy: ";
|
||||
break;
|
||||
case QNetworkProxy::HttpCachingProxy:
|
||||
proxyDesc = "HTTP caching: ";
|
||||
break;
|
||||
case QNetworkProxy::FtpCachingProxy:
|
||||
proxyDesc = "FTP caching: ";
|
||||
break;
|
||||
default:
|
||||
proxyDesc = "DERP proxy: ";
|
||||
break;
|
||||
}
|
||||
proxyDesc += QString("%3@%1:%2 pass %4")
|
||||
.arg(proxy.hostName())
|
||||
.arg(proxy.port())
|
||||
.arg(proxy.user())
|
||||
.arg(proxy.password());
|
||||
QLOG_INFO() << proxyDesc;
|
||||
}
|
||||
|
||||
// create the global network manager
|
||||
m_qnam.reset(new QNetworkAccessManager(this));
|
||||
|
@ -315,21 +318,23 @@ void MultiMC::initGlobalSettings()
|
|||
|
||||
// FTB
|
||||
m_settings->registerSetting(new Setting("TrackFTBInstances", false));
|
||||
m_settings->registerSetting(new Setting("FTBLauncherRoot",
|
||||
#ifdef Q_OS_LINUX
|
||||
QDir::home().absoluteFilePath(".ftblauncher")
|
||||
#elif defined(Q_OS_WIN32)
|
||||
PathCombine(QDir::homePath(), "AppData/Roaming/ftblauncher")
|
||||
#elif defined(Q_OS_MAC)
|
||||
PathCombine(QDir::homePath(), "Library/Application Support/ftblauncher")
|
||||
#endif
|
||||
));
|
||||
m_settings->registerSetting(new Setting(
|
||||
"FTBLauncherRoot",
|
||||
#ifdef Q_OS_LINUX
|
||||
QDir::home().absoluteFilePath(".ftblauncher")
|
||||
#elif defined(Q_OS_WIN32)
|
||||
PathCombine(QDir::homePath(), "AppData/Roaming/ftblauncher")
|
||||
#elif defined(Q_OS_MAC)
|
||||
PathCombine(QDir::homePath(), "Library/Application Support/ftblauncher")
|
||||
#endif
|
||||
));
|
||||
|
||||
m_settings->registerSetting(new Setting("FTBRoot"));
|
||||
if (m_settings->get("FTBRoot").isNull())
|
||||
{
|
||||
QString ftbRoot;
|
||||
QFile f(QDir(m_settings->get("FTBLauncherRoot").toString()).absoluteFilePath("ftblaunch.cfg"));
|
||||
QFile f(QDir(m_settings->get("FTBLauncherRoot").toString())
|
||||
.absoluteFilePath("ftblaunch.cfg"));
|
||||
QLOG_INFO() << "Attempting to read" << f.fileName();
|
||||
if (f.open(QFile::ReadOnly))
|
||||
{
|
||||
|
@ -398,7 +403,6 @@ void MultiMC::initGlobalSettings()
|
|||
// The cat
|
||||
m_settings->registerSetting(new Setting("TheCat", false));
|
||||
|
||||
|
||||
m_settings->registerSetting(new Setting("InstSortMode", "Name"));
|
||||
m_settings->registerSetting(new Setting("SelectedInstance", QString()));
|
||||
|
||||
|
@ -486,17 +490,20 @@ std::shared_ptr<JavaVersionList> MultiMC::javalist()
|
|||
#error Unsupported operating system.
|
||||
#endif
|
||||
|
||||
void MultiMC::installUpdates(const QString& updateFilesDir, bool restartOnFinish)
|
||||
void MultiMC::installUpdates(const QString &updateFilesDir, bool restartOnFinish)
|
||||
{
|
||||
QLOG_INFO() << "Installing updates.";
|
||||
#if LINUX
|
||||
// On Linux, the MultiMC executable file is actually in the bin folder inside the installation directory.
|
||||
// On Linux, the MultiMC executable file is actually in the bin folder inside the
|
||||
// installation directory.
|
||||
// This means that MultiMC's *actual* install path is the parent folder.
|
||||
// We need to tell the updater to run with this directory as the install path, rather than the bin folder where the executable is.
|
||||
// We need to tell the updater to run with this directory as the install path, rather than
|
||||
// the bin folder where the executable is.
|
||||
// On other operating systems, we'll just use the path to the executable.
|
||||
QString appDir = QFileInfo(MMC->applicationDirPath()).dir().path();
|
||||
|
||||
// On Linux, we also need to set the finish command to the launch script, rather than the binary.
|
||||
// On Linux, we also need to set the finish command to the launch script, rather than the
|
||||
// binary.
|
||||
QString finishCmd = PathCombine(appDir, "MultiMC");
|
||||
#else
|
||||
QString appDir = MMC->applicationDirPath();
|
||||
|
@ -504,18 +511,20 @@ void MultiMC::installUpdates(const QString& updateFilesDir, bool restartOnFinish
|
|||
#endif
|
||||
|
||||
// Build the command we'll use to run the updater.
|
||||
// Note, the above comment about the app dir path on Linux is irrelevant here because the updater binary is always in the
|
||||
// Note, the above comment about the app dir path on Linux is irrelevant here because the
|
||||
// updater binary is always in the
|
||||
// same folder as the main binary.
|
||||
QString updaterBinary = PathCombine(MMC->applicationDirPath(), UPDATER_BIN);
|
||||
QStringList args;
|
||||
// ./updater --install-dir $INSTALL_DIR --package-dir $UPDATEFILES_DIR --script $UPDATEFILES_DIR/file_list.xml --wait $PID --mode main
|
||||
// ./updater --install-dir $INSTALL_DIR --package-dir $UPDATEFILES_DIR --script
|
||||
// $UPDATEFILES_DIR/file_list.xml --wait $PID --mode main
|
||||
args << "--install-dir" << appDir;
|
||||
args << "--package-dir" << updateFilesDir;
|
||||
args << "--script" << PathCombine(updateFilesDir, "file_list.xml");
|
||||
args << "--wait" << QString::number(MMC->applicationPid());
|
||||
args << "--script" << PathCombine(updateFilesDir, "file_list.xml");
|
||||
args << "--wait" << QString::number(MMC->applicationPid());
|
||||
|
||||
if (restartOnFinish)
|
||||
args << "--finish-cmd" << finishCmd;
|
||||
args << "--finish-cmd" << finishCmd;
|
||||
|
||||
QLOG_INFO() << "Running updater with command" << updaterBinary << args.join(" ");
|
||||
|
||||
|
@ -525,7 +534,7 @@ void MultiMC::installUpdates(const QString& updateFilesDir, bool restartOnFinish
|
|||
MMC->quit();
|
||||
}
|
||||
|
||||
void MultiMC::setUpdateOnExit(const QString& updateFilesDir)
|
||||
void MultiMC::setUpdateOnExit(const QString &updateFilesDir)
|
||||
{
|
||||
m_updateOnExitPath = updateFilesDir;
|
||||
}
|
||||
|
@ -535,5 +544,4 @@ QString MultiMC::getExitUpdatePath() const
|
|||
return m_updateOnExitPath;
|
||||
}
|
||||
|
||||
|
||||
#include "MultiMC.moc"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue