summaryrefslogtreecommitdiffstats
path: root/logic/InstanceLauncher.cpp
diff options
context:
space:
mode:
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();
+}