GH-1300 call application quit when direct launch instance quits

This commit is contained in:
Petr Mrázek 2015-10-24 00:57:54 +02:00
parent 8a4fd8c468
commit 895d8ab469
4 changed files with 25 additions and 7 deletions

View File

@ -16,11 +16,11 @@
#include <launch/steps/TextPrint.h>
#include <QStringList>
LaunchController::LaunchController(QObject *parent) : QObject(parent)
LaunchController::LaunchController(QObject *parent) : Task(parent)
{
}
void LaunchController::launch()
void LaunchController::executeTask()
{
login();
}
@ -29,7 +29,10 @@ void LaunchController::launch()
void LaunchController::login()
{
if (!m_instance)
{
emitFailed(tr("No instance specified"));
return;
}
JavaCommon::checkJVMArgs(m_instance->settings()->get("JvmArgs").toString(), m_parentWidget);
@ -70,7 +73,10 @@ void LaunchController::login()
// if no account is selected, we bail
if (!account.get())
{
emitFailed(tr("No account selected for launch"));
return;
}
// we try empty password first :)
QString password;
@ -92,7 +98,9 @@ void LaunchController::login()
// is still logged in.
ProgressDialog progDialog(m_parentWidget);
if (m_online)
{
progDialog.setSkipButton(true, tr("Play Offline"));
}
progDialog.execWithTask(task.get());
if (!task->successful())
{
@ -110,6 +118,7 @@ void LaunchController::login()
{
qCritical() << "Received undetermined session status during login. Bye.";
tryagain = false;
emitFailed(tr("Received undetermined session status during login."));
break;
}
case AuthSession::RequiresPassword:
@ -169,9 +178,11 @@ void LaunchController::login()
{
launchInstance();
tryagain = false;
return;
}
}
}
emitFailed(tr("Failed to launch."));
}
void LaunchController::launchInstance()
@ -182,12 +193,14 @@ void LaunchController::launchInstance()
if(!m_instance->reload())
{
QMessageBox::critical(m_parentWidget, tr("Error"), tr("Couldn't load the instance profile."));
emitFailed(tr("Couldn't load the instance profile."));
return;
}
m_launcher = m_instance->createLaunchTask(m_session);
if (!m_launcher)
{
emitFailed(tr("Couldn't instantiate a launcher."));
return;
}
@ -254,4 +267,5 @@ void LaunchController::instanceEnded()
{
m_parentWidget->show();
}
emitSucceeded();
}

View File

@ -4,10 +4,12 @@
#include <tools/BaseProfiler.h>
class ConsoleWindow;
class LaunchController: public QObject
class LaunchController: public Task
{
Q_OBJECT
public:
virtual void executeTask();
LaunchController(QObject * parent = nullptr);
virtual ~LaunchController(){};
@ -28,8 +30,6 @@ public:
m_parentWidget = widget;
}
void launch();
private:
void login();
void launchInstance();

View File

@ -1498,7 +1498,7 @@ void MainWindow::launch(InstancePtr instance, bool online, BaseProfilerFactory *
m_launchController->setOnline(online);
m_launchController->setParentWidget(this);
m_launchController->setProfiler(profiler);
m_launchController->launch();
m_launchController->start();
}
void MainWindow::taskEnd()

View File

@ -21,7 +21,11 @@ int launchInstance(MultiMC &app, InstancePtr inst)
LaunchController launchController;
launchController.setInstance(inst);
launchController.setOnline(true);
launchController.launch();
QMetaObject::invokeMethod(&launchController, "start", Qt::QueuedConnection);
app.connect(&launchController, &Task::finished, [&app]()
{
app.quit();
});
return app.exec();
}