diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-09-07 04:00:58 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-09-07 04:00:58 +0200 |
commit | 6892c11e9f287dcfb1e698f8f46233a01fb7abb6 (patch) | |
tree | ee94607e92bcf39faef7f35842499fafbb2e270f /logic/InstanceLauncher.cpp | |
parent | 3f30055afe757637ae865b2adc7cf021edd9b8b5 (diff) | |
download | MultiMC-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.cpp | 74 |
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(); +} |