summaryrefslogtreecommitdiffstats
path: root/main.cpp
diff options
context:
space:
mode:
authorOrochimarufan <orochimarufan.x3@gmail.com>2013-02-20 00:07:52 +0100
committerOrochimarufan <orochimarufan.x3@gmail.com>2013-02-20 00:07:52 +0100
commitc523a2c752bb7b071715f6c4eac18f36bcd2c162 (patch)
tree1440f811d161cfd5159d2427d760815021a5485f /main.cpp
parentcf0e78b46dbd740caac9288f3fe5ef5d99ed2ce9 (diff)
downloadMultiMC-c523a2c752bb7b071715f6c4eac18f36bcd2c162.tar
MultiMC-c523a2c752bb7b071715f6c4eac18f36bcd2c162.tar.gz
MultiMC-c523a2c752bb7b071715f6c4eac18f36bcd2c162.tar.lz
MultiMC-c523a2c752bb7b071715f6c4eac18f36bcd2c162.tar.xz
MultiMC-c523a2c752bb7b071715f6c4eac18f36bcd2c162.zip
implement commandline parsing
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp88
1 files changed, 84 insertions, 4 deletions
diff --git a/main.cpp b/main.cpp
index 6e840317..efabc20a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,6 +1,7 @@
-
/* Copyright 2013 MultiMC Contributors
*
+ * Authors: Orochimarufan <orochimarufan.x3@gmail.com>
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -14,26 +15,105 @@
* limitations under the License.
*/
-#include "gui/mainwindow.h"
+#include <iostream>
+
#include <QApplication>
+#include <QDir>
-#include "data/appsettings.h"
+#include "gui/mainwindow.h"
+#include "data/appsettings.h"
#include "data/loginresponse.h"
+#include "util/cmdutils.h"
+
+using namespace Util::Commandline;
+
int main(int argc, char *argv[])
{
+ // initialize Qt
QApplication app(argc, argv);
app.setOrganizationName("Forkk");
app.setApplicationName("MultiMC 5");
-
+
+ // Print app header
+ std::cout << "MultiMC 5" << std::endl;
+ std::cout << "(c) 2013 MultiMC contributors" << std::endl << std::endl;
+
+ // Commandline parsing
+ Parser parser(FlagStyle::GNU, ArgumentStyle::SpaceAndEquals);
+
+ // --help
+ parser.addSwitch("help");
+ parser.addShortOpt("help", 'h');
+ parser.addDocumentation("help", "displays help on command line parameters");
+ // --dir
+ parser.addOption("dir", app.applicationDirPath());
+ parser.addShortOpt("dir", 'd');
+ parser.addDocumentation("dir", "use the supplied directory as MultiMC root instead of the binary location (use '.' for current)");
+ // --update
+ parser.addOption("update");
+ parser.addShortOpt("update", 'u');
+ parser.addDocumentation("update", "replaces the given file with the running executable", "<path>");
+ // --quietupdate
+ parser.addSwitch("quietupdate");
+ parser.addShortOpt("quietupdate", 'U');
+ parser.addDocumentation("quietupdate", "doesn't restart MultiMC after installing updates");
+ // --launch
+ parser.addOption("launch");
+ parser.addShortOpt("launch", 'l');
+ parser.addDocumentation("launch", "tries to launch the given instance", "<inst>");
+
+ // parse the arguments
+ QHash<QString, QVariant> args;
+ try {
+ args = parser.parse(app.arguments());
+ } catch(ParsingError e) {
+ std::cerr << "CommandLineError: " << e.what() << std::endl;
+ return 1;
+ }
+
+ // display help and exit
+ if (args["help"].toBool()) {
+ std::cout << qPrintable(parser.compileHelp(app.arguments()[0]));
+ return 0;
+ }
+
+ // update
+ // Note: cwd is always the current executable path!
+ if (!args["update"].isNull())
+ {
+ std::cout << "Performing MultiMC update: " << qPrintable(args["update"].toString()) << std::endl;
+ QDir::setCurrent(app.applicationDirPath());
+ QFile file(app.applicationFilePath());
+ file.copy(args["update"].toString());
+ if(args["quietupdate"].toBool())
+ return 0;
+ }
+
+ // change directory
+ QDir::setCurrent(args["dir"].toString());
+
+ // launch instance.
+ if (!args["launch"].isNull())
+ {
+ std::cout << "Launching instance: " << qPrintable(args["launch"].toString()) << std::endl;
+ // TODO: make it launch the an instance.
+ // needs the new instance model to be complete
+ std::cerr << "Launching Instances is not implemented yet!" << std::endl;
+ return 255;
+ }
+
+ // load settings
settings = new AppSettings(&app);
// Register meta types.
qRegisterMetaType<LoginResponse>("LoginResponse");
+ // show window
MainWindow mainWin;
mainWin.show();
+ // loop
return app.exec();
}