aboutsummaryrefslogtreecommitdiff
path: root/launcher/Application.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/Application.cpp')
-rw-r--r--launcher/Application.cpp110
1 files changed, 21 insertions, 89 deletions
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index 0d1db11c..e08ea7f4 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -78,6 +78,7 @@
#include <iostream>
#include <QAccessible>
+#include <QCommandLineParser>
#include <QDir>
#include <QFileInfo>
#include <QNetworkAccessManager>
@@ -110,7 +111,6 @@
#include "translations/TranslationsModel.h"
#include "meta/Index.h"
-#include <Commandline.h>
#include <FileSystem.h>
#include <DesktopServices.h>
#include <LocalPeer.h>
@@ -136,12 +136,6 @@
static const QLatin1String liveCheckFile("live.check");
-using namespace Commandline;
-
-#define MACOS_HINT "If you are on macOS Sierra, you might have to move the app to your /Applications or ~/Applications folder. "\
- "This usually fixes the problem and you can move the application elsewhere afterwards.\n"\
- "\n"
-
namespace {
void appDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
@@ -242,80 +236,27 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
this->setQuitOnLastWindowClosed(false);
// Commandline parsing
- QHash<QString, QVariant> args;
- {
- Parser parser(FlagStyle::GNU, ArgumentStyle::SpaceAndEquals);
-
- // --help
- parser.addSwitch("help");
- parser.addShortOpt("help", 'h');
- parser.addDocumentation("help", "Display this help and exit.");
- // --version
- parser.addSwitch("version");
- parser.addShortOpt("version", 'V');
- parser.addDocumentation("version", "Display program version and exit.");
- // --dir
- parser.addOption("dir");
- parser.addShortOpt("dir", 'd');
- parser.addDocumentation("dir", "Use the supplied folder as application root instead of the binary location (use '.' for current)");
- // --launch
- parser.addOption("launch");
- parser.addShortOpt("launch", 'l');
- parser.addDocumentation("launch", "Launch the specified instance (by instance ID)");
- // --server
- parser.addOption("server");
- parser.addShortOpt("server", 's');
- parser.addDocumentation("server", "Join the specified server on launch (only valid in combination with --launch)");
- // --profile
- parser.addOption("profile");
- parser.addShortOpt("profile", 'a');
- parser.addDocumentation("profile", "Use the account specified by its profile name (only valid in combination with --launch)");
- // --alive
- parser.addSwitch("alive");
- parser.addDocumentation("alive", "Write a small '" + liveCheckFile + "' file after the launcher starts");
- // --import
- parser.addOption("import");
- parser.addShortOpt("import", 'I');
- parser.addDocumentation("import", "Import instance from specified zip (local path or URL)");
-
- // parse the arguments
- try
- {
- args = parser.parse(arguments());
- }
- catch (const ParsingError &e)
- {
- std::cerr << "CommandLineError: " << e.what() << std::endl;
- if(argc > 0)
- std::cerr << "Try '" << argv[0] << " -h' to get help on command line parameters."
- << std::endl;
- m_status = Application::Failed;
- return;
- }
-
- // display help and exit
- if (args["help"].toBool())
- {
- std::cout << qPrintable(parser.compileHelp(arguments()[0]));
- m_status = Application::Succeeded;
- return;
- }
+ QCommandLineParser parser;
+ parser.setApplicationDescription(BuildConfig.LAUNCHER_NAME);
+
+ parser.addOptions({
+ {{"d", "dir"}, "Use a custom path as application root (use '.' for current directory)", "directory"},
+ {{"l", "launch"}, "Launch the specified instance (by instance ID)", "instance"},
+ {{"s", "server"}, "Join the specified server on launch (only valid in combination with --launch)", "address"},
+ {{"a", "profile"}, "Use the account specified by its profile name (only valid in combination with --launch)", "profile"},
+ {"alive", "Write a small '" + liveCheckFile + "' file after the launcher starts"},
+ {{"I", "import"}, "Import instance from specified zip (local path or URL)", "file"}
+ });
+ parser.addHelpOption();
+ parser.addVersionOption();
- // display version and exit
- if (args["version"].toBool())
- {
- std::cout << "Version " << BuildConfig.printableVersionString().toStdString() << std::endl;
- std::cout << "Git " << BuildConfig.GIT_COMMIT.toStdString() << std::endl;
- m_status = Application::Succeeded;
- return;
- }
- }
+ parser.process(arguments());
- m_instanceIdToLaunch = args["launch"].toString();
- m_serverToJoin = args["server"].toString();
- m_profileToUse = args["profile"].toString();
- m_liveCheck = args["alive"].toBool();
- m_zipToImport = args["import"].toUrl();
+ m_instanceIdToLaunch = parser.value("launch");
+ m_serverToJoin = parser.value("server");
+ m_profileToUse = parser.value("profile");
+ m_liveCheck = parser.isSet("alive");
+ m_zipToImport = parser.value("import");
// error if --launch is missing with --server or --profile
if((!m_serverToJoin.isEmpty() || !m_profileToUse.isEmpty()) && m_instanceIdToLaunch.isEmpty())
@@ -346,7 +287,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
QString adjustedBy;
QString dataPath;
// change folder
- QString dirParam = args["dir"].toString();
+ QString dirParam = parser.value("dir");
if (!dirParam.isEmpty())
{
// the dir param. it makes multimc data path point to whatever the user specified
@@ -385,9 +326,6 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
QString(
"The launcher data folder could not be created.\n"
"\n"
-#if defined(Q_OS_MAC)
- MACOS_HINT
-#endif
"Make sure you have the right permissions to the launcher data folder and any folder needed to access it.\n"
"(%1)\n"
"\n"
@@ -403,9 +341,6 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
QString(
"The launcher data folder could not be opened.\n"
"\n"
-#if defined(Q_OS_MAC)
- MACOS_HINT
-#endif
"Make sure you have the right permissions to the launcher data folder.\n"
"(%1)\n"
"\n"
@@ -486,9 +421,6 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
QString(
"The launcher couldn't create a log file - the data folder is not writable.\n"
"\n"
- #if defined(Q_OS_MAC)
- MACOS_HINT
- #endif
"Make sure you have write permissions to the data folder.\n"
"(%1)\n"
"\n"