summaryrefslogtreecommitdiffstats
path: root/logic/InstanceLauncher.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-09-07 04:00:58 +0200
committerPetr Mrázek <peterix@gmail.com>2013-09-07 04:00:58 +0200
commit6892c11e9f287dcfb1e698f8f46233a01fb7abb6 (patch)
treeee94607e92bcf39faef7f35842499fafbb2e270f /logic/InstanceLauncher.cpp
parent3f30055afe757637ae865b2adc7cf021edd9b8b5 (diff)
downloadMultiMC-6892c11e9f287dcfb1e698f8f46233a01fb7abb6.tar
MultiMC-6892c11e9f287dcfb1e698f8f46233a01fb7abb6.tar.gz
MultiMC-6892c11e9f287dcfb1e698f8f46233a01fb7abb6.tar.lz
MultiMC-6892c11e9f287dcfb1e698f8f46233a01fb7abb6.tar.xz
MultiMC-6892c11e9f287dcfb1e698f8f46233a01fb7abb6.zip
Move a good chunk of the singleton objects into a new QApplication subclass.
Diffstat (limited to 'logic/InstanceLauncher.cpp')
-rw-r--r--logic/InstanceLauncher.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/logic/InstanceLauncher.cpp b/logic/InstanceLauncher.cpp
new file mode 100644
index 00000000..312f4c69
--- /dev/null
+++ b/logic/InstanceLauncher.cpp
@@ -0,0 +1,74 @@
+#include "InstanceLauncher.h"
+#include "MultiMC.h"
+
+#include <iostream>
+#include "gui/logindialog.h"
+#include "gui/taskdialog.h"
+#include "gui/consolewindow.h"
+#include "logic/tasks/LoginTask.h"
+#include "logic/MinecraftProcess.h"
+#include "lists/InstanceList.h"
+
+
+InstanceLauncher::InstanceLauncher ( QString instId )
+ :QObject(), instId ( instId )
+{}
+
+void InstanceLauncher::onTerminated()
+{
+ std::cout << "Minecraft exited" << std::endl;
+ MMC->quit();
+}
+
+void InstanceLauncher::onLoginComplete()
+{
+ LoginTask * task = ( LoginTask * ) QObject::sender();
+ auto result = task->getResult();
+ auto instance = MMC->instances()->getInstanceById(instId);
+ proc = instance->prepareForLaunch ( result.username, result.sessionID );
+ if ( !proc )
+ {
+ //FIXME: report error
+ return;
+ }
+ console = new ConsoleWindow();
+ console->show();
+
+ connect ( proc, SIGNAL ( ended() ), SLOT ( onTerminated() ) );
+ connect ( proc, SIGNAL ( log ( QString,MessageLevel::Enum ) ), console, SLOT ( write ( QString,MessageLevel::Enum ) ) );
+
+ proc->launch();
+}
+
+void InstanceLauncher::doLogin ( const QString& errorMsg )
+{
+ LoginDialog* loginDlg = new LoginDialog ( nullptr, errorMsg );
+ loginDlg->exec();
+ if ( loginDlg->result() == QDialog::Accepted )
+ {
+ UserInfo uInfo {loginDlg->getUsername(), loginDlg->getPassword() };
+
+ TaskDialog* tDialog = new TaskDialog ( nullptr );
+ LoginTask* loginTask = new LoginTask ( uInfo, tDialog );
+ connect ( loginTask, SIGNAL ( succeeded() ),SLOT ( onLoginComplete() ), Qt::QueuedConnection );
+ connect ( loginTask, SIGNAL ( failed ( QString ) ),SLOT ( doLogin ( QString ) ), Qt::QueuedConnection );
+ tDialog->exec ( loginTask );
+ }
+ //onLoginComplete(LoginResponse("Offline","Offline", 1));
+}
+
+int InstanceLauncher::launch()
+{
+ std::cout << "Launching Instance '" << qPrintable ( instId ) << "'" << std::endl;
+ auto instance = MMC->instances()->getInstanceById(instId);
+ if ( instance.isNull() )
+ {
+ std::cout << "Could not find instance requested. note that you have to specify the ID, not the NAME" << std::endl;
+ return 1;
+ }
+
+ std::cout << "Logging in..." << std::endl;
+ doLogin ( "" );
+
+ return MMC->exec();
+}