summaryrefslogtreecommitdiffstats
path: root/MultiMC.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-09-23 00:23:50 +0200
committerPetr Mrázek <peterix@gmail.com>2013-09-23 00:29:40 +0200
commit984c36e571aae45cdd55da2fb689538198aadd3c (patch)
treec703bca5c0bc1d3a24e9f11e7e2f788d774461af /MultiMC.cpp
parenteb4ed3734fb4841a9e0b49af912158151f76c93b (diff)
downloadMultiMC-984c36e571aae45cdd55da2fb689538198aadd3c.tar
MultiMC-984c36e571aae45cdd55da2fb689538198aadd3c.tar.gz
MultiMC-984c36e571aae45cdd55da2fb689538198aadd3c.tar.lz
MultiMC-984c36e571aae45cdd55da2fb689538198aadd3c.tar.xz
MultiMC-984c36e571aae45cdd55da2fb689538198aadd3c.zip
Implement basic yggdrasil auth.
No fancy login token saving involved.
Diffstat (limited to 'MultiMC.cpp')
-rw-r--r--MultiMC.cpp158
1 files changed, 81 insertions, 77 deletions
diff --git a/MultiMC.cpp b/MultiMC.cpp
index decc22bf..ee9a9bf8 100644
--- a/MultiMC.cpp
+++ b/MultiMC.cpp
@@ -16,7 +16,6 @@
#include "logic/InstanceLauncher.h"
#include "logic/net/HttpMetaCache.h"
-
#include "pathutils.h"
#include "cmdutils.h"
#include <inisettingsobject.h>
@@ -25,23 +24,22 @@
#include "config.h"
using namespace Util::Commandline;
-MultiMC::MultiMC ( int& argc, char** argv )
- :QApplication ( argc, argv )
+MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv)
{
setOrganizationName("Forkk");
setApplicationName("MultiMC 5");
-
+
initTranslations();
-
+
// Print app header
std::cout << "MultiMC 5" << std::endl;
std::cout << "(c) 2013 MultiMC Contributors" << std::endl << std::endl;
-
+
// Commandline parsing
QHash<QString, QVariant> args;
{
Parser parser(FlagStyle::GNU, ArgumentStyle::SpaceAndEquals);
-
+
// --help
parser.addSwitch("help");
parser.addShortOpt("help", 'h');
@@ -53,33 +51,37 @@ MultiMC::MultiMC ( int& argc, char** argv )
// --dir
parser.addOption("dir", applicationDirPath());
parser.addShortOpt("dir", 'd');
- parser.addDocumentation("dir", "use the supplied directory as MultiMC root instead of the binary location (use '.' for current)");
+ 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>");
+ 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");
+ 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
try
{
args = parser.parse(arguments());
}
- catch(ParsingError e)
+ catch (ParsingError e)
{
std::cerr << "CommandLineError: " << e.what() << std::endl;
- std::cerr << "Try '%1 -h' to get help on MultiMC's command line parameters." << std::endl;
+ std::cerr << "Try '%1 -h' to get help on MultiMC's command line parameters."
+ << std::endl;
m_status = MultiMC::Failed;
return;
}
-
+
// display help and exit
if (args["help"].toBool())
{
@@ -87,27 +89,29 @@ MultiMC::MultiMC ( int& argc, char** argv )
m_status = MultiMC::Succeeded;
return;
}
-
+
// display version and exit
if (args["version"].toBool())
{
std::cout << "Version " << VERSION_STR << std::endl;
std::cout << "Git " << GIT_COMMIT << std::endl;
- std::cout << "Tag: " << JENKINS_BUILD_TAG << " " << (ARCH==x64?"x86_64":"x86") << std::endl;
+ std::cout << "Tag: " << JENKINS_BUILD_TAG << " " << (ARCH == x64 ? "x86_64" : "x86")
+ << std::endl;
m_status = MultiMC::Succeeded;
return;
}
-
+
// update
// Note: cwd is always the current executable path!
if (!args["update"].isNull())
{
- std::cout << "Performing MultiMC update: " << qPrintable(args["update"].toString()) << std::endl;
+ std::cout << "Performing MultiMC update: " << qPrintable(args["update"].toString())
+ << std::endl;
QString cwd = QDir::currentPath();
QDir::setCurrent(applicationDirPath());
QFile file(applicationFilePath());
file.copy(args["update"].toString());
- if(args["quietupdate"].toBool())
+ if (args["quietupdate"].toBool())
{
m_status = MultiMC::Succeeded;
return;
@@ -115,31 +119,31 @@ MultiMC::MultiMC ( int& argc, char** argv )
QDir::setCurrent(cwd);
}
}
-
+
// change directory
QDir::setCurrent(args["dir"].toString());
-
+
// load settings
initGlobalSettings();
-
+
// and instances
- m_instances.reset(new InstanceList(m_settings->get("InstanceDir").toString(),this));
+ m_instances.reset(new InstanceList(m_settings->get("InstanceDir").toString(), this));
std::cout << "Loading Instances..." << std::endl;
m_instances->loadList();
-
+
// init the http meta cache
initHttpMetaCache();
-
+
// create the global network manager
m_qnam.reset(new QNetworkAccessManager(this));
-
+
// Register meta types.
qRegisterMetaType<LoginResponse>("LoginResponse");
-
+
// launch instance, if that's what should be done
if (!args["launch"].isNull())
{
- if(InstanceLauncher(args["launch"].toString()).launch())
+ if (InstanceLauncher(args["launch"].toString()).launch())
m_status = MultiMC::Succeeded;
else
m_status = MultiMC::Failed;
@@ -150,11 +154,11 @@ MultiMC::MultiMC ( int& argc, char** argv )
MultiMC::~MultiMC()
{
- if(m_mmc_translator)
+ if (m_mmc_translator)
{
removeTranslator(m_mmc_translator.data());
}
- if(m_qt_translator)
+ if (m_qt_translator)
{
removeTranslator(m_qt_translator.data());
}
@@ -163,13 +167,12 @@ MultiMC::~MultiMC()
void MultiMC::initTranslations()
{
m_qt_translator.reset(new QTranslator());
- if(m_qt_translator->load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
+ if (m_qt_translator->load("qt_" + QLocale::system().name(),
+ QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
{
- std::cout
- << "Loading Qt Language File for "
- << QLocale::system().name().toLocal8Bit().constData()
- << "...";
- if(!installTranslator(m_qt_translator.data()))
+ std::cout << "Loading Qt Language File for "
+ << QLocale::system().name().toLocal8Bit().constData() << "...";
+ if (!installTranslator(m_qt_translator.data()))
{
std::cout << " failed.";
m_qt_translator.reset();
@@ -182,13 +185,12 @@ void MultiMC::initTranslations()
}
m_mmc_translator.reset(new QTranslator());
- if(m_mmc_translator->load("mmc_" + QLocale::system().name(), QDir("translations").absolutePath()))
+ if (m_mmc_translator->load("mmc_" + QLocale::system().name(),
+ QDir("translations").absolutePath()))
{
- std::cout
- << "Loading MMC Language File for "
- << QLocale::system().name().toLocal8Bit().constData()
- << "...";
- if(!installTranslator(m_mmc_translator.data()))
+ std::cout << "Loading MMC Language File for "
+ << QLocale::system().name().toLocal8Bit().constData() << "...";
+ if (!installTranslator(m_mmc_translator.data()))
{
std::cout << " failed.";
m_mmc_translator.reset();
@@ -201,58 +203,66 @@ void MultiMC::initTranslations()
}
}
-
void MultiMC::initGlobalSettings()
{
m_settings.reset(new INISettingsObject("multimc.cfg", this));
- // Updates
+ // Updates
m_settings->registerSetting(new Setting("UseDevBuilds", false));
m_settings->registerSetting(new Setting("AutoUpdate", true));
-
+
// Folders
m_settings->registerSetting(new Setting("InstanceDir", "instances"));
m_settings->registerSetting(new Setting("CentralModsDir", "mods"));
m_settings->registerSetting(new Setting("LWJGLDir", "lwjgl"));
-
+
// Console
m_settings->registerSetting(new Setting("ShowConsole", true));
m_settings->registerSetting(new Setting("AutoCloseConsole", true));
-
+
// Toolbar settings
m_settings->registerSetting(new Setting("InstanceToolbarVisible", true));
m_settings->registerSetting(new Setting("InstanceToolbarPosition", QPoint()));
-
+
// Console Colors
-// m_settings->registerSetting(new Setting("SysMessageColor", QColor(Qt::blue)));
-// m_settings->registerSetting(new Setting("StdOutColor", QColor(Qt::black)));
-// m_settings->registerSetting(new Setting("StdErrColor", QColor(Qt::red)));
-
+ // m_settings->registerSetting(new Setting("SysMessageColor", QColor(Qt::blue)));
+ // m_settings->registerSetting(new Setting("StdOutColor", QColor(Qt::black)));
+ // m_settings->registerSetting(new Setting("StdErrColor", QColor(Qt::red)));
+
// Window Size
m_settings->registerSetting(new Setting("LaunchMaximized", false));
m_settings->registerSetting(new Setting("MinecraftWinWidth", 854));
m_settings->registerSetting(new Setting("MinecraftWinHeight", 480));
-
+
// Auto login
m_settings->registerSetting(new Setting("AutoLogin", false));
-
+
// Memory
m_settings->registerSetting(new Setting("MinMemAlloc", 512));
m_settings->registerSetting(new Setting("MaxMemAlloc", 1024));
m_settings->registerSetting(new Setting("PermGen", 64));
-
+
// Java Settings
m_settings->registerSetting(new Setting("JavaPath", "java"));
m_settings->registerSetting(new Setting("JvmArgs", ""));
-
+
// Custom Commands
m_settings->registerSetting(new Setting("PreLaunchCommand", ""));
m_settings->registerSetting(new Setting("PostExitCommand", ""));
-
+
// The cat
m_settings->registerSetting(new Setting("TheCat", false));
-
+
// Shall the main window hide on instance launch
m_settings->registerSetting(new Setting("NoHide", false));
+
+ // Persistent value for the client ID
+ m_settings->registerSetting(new Setting("YggdrasilClientToken", ""));
+ QString currentYggID = m_settings->get("YggdrasilClientToken").toString();
+ if (currentYggID.isEmpty())
+ {
+ QUuid uuid = QUuid::createUuid();
+ m_settings->set("YggdrasilClientToken", uuid.toString());
+ }
}
void MultiMC::initHttpMetaCache()
@@ -265,10 +275,9 @@ void MultiMC::initHttpMetaCache()
m_metacache->Load();
}
-
QSharedPointer<IconList> MultiMC::icons()
{
- if ( !m_icons )
+ if (!m_icons)
{
m_icons.reset(new IconList);
}
@@ -277,7 +286,7 @@ QSharedPointer<IconList> MultiMC::icons()
QSharedPointer<LWJGLVersionList> MultiMC::lwjgllist()
{
- if ( !m_lwjgllist )
+ if (!m_lwjgllist)
{
m_lwjgllist.reset(new LWJGLVersionList());
}
@@ -286,7 +295,7 @@ QSharedPointer<LWJGLVersionList> MultiMC::lwjgllist()
QSharedPointer<ForgeVersionList> MultiMC::forgelist()
{
- if ( !m_forgelist )
+ if (!m_forgelist)
{
m_forgelist.reset(new ForgeVersionList());
}
@@ -295,36 +304,31 @@ QSharedPointer<ForgeVersionList> MultiMC::forgelist()
QSharedPointer<MinecraftVersionList> MultiMC::minecraftlist()
{
- if ( !m_minecraftlist )
+ if (!m_minecraftlist)
{
m_minecraftlist.reset(new MinecraftVersionList());
}
return m_minecraftlist;
}
-
int main(int argc, char *argv[])
{
// initialize Qt
MultiMC app(argc, argv);
-
+
// show main window
MainWindow mainWin;
mainWin.show();
-
-
-
- switch(app.status())
+
+ switch (app.status())
{
- case MultiMC::Initialized:
- return app.exec();
- case MultiMC::Failed:
- return 1;
- case MultiMC::Succeeded:
- return 0;
+ case MultiMC::Initialized:
+ return app.exec();
+ case MultiMC::Failed:
+ return 1;
+ case MultiMC::Succeeded:
+ return 0;
}
}
#include "MultiMC.moc"
-
-