summaryrefslogtreecommitdiffstats
path: root/logic/InstanceLauncher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'logic/InstanceLauncher.cpp')
-rw-r--r--logic/InstanceLauncher.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/logic/InstanceLauncher.cpp b/logic/InstanceLauncher.cpp
new file mode 100644
index 00000000..c0079d80
--- /dev/null
+++ b/logic/InstanceLauncher.cpp
@@ -0,0 +1,94 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+
+#include "InstanceLauncher.h"
+#include "MultiMC.h"
+
+#include "gui/ConsoleWindow.h"
+#include "gui/dialogs/ProgressDialog.h"
+
+#include "logic/MinecraftProcess.h"
+#include "logic/lists/InstanceList.h"
+
+InstanceLauncher::InstanceLauncher(QString instId) : QObject(), instId(instId)
+{
+}
+
+void InstanceLauncher::onTerminated()
+{
+ std::cout << "Minecraft exited" << std::endl;
+ MMC->quit();
+}
+
+void InstanceLauncher::onLoginComplete()
+{
+ // TODO: Fix this.
+ /*
+ LoginTask *task = (LoginTask *)QObject::sender();
+ auto result = task->getResult();
+ auto instance = MMC->instances()->getInstanceById(instId);
+ proc = instance->prepareForLaunch(result);
+ if (!proc)
+ {
+ // FIXME: report error
+ return;
+ }
+ console = new ConsoleWindow(proc);
+ connect(console, SIGNAL(isClosing()), this, SLOT(onTerminated()));
+
+ proc->setLogin(result.username, result.session_id);
+ proc->launch();
+ */
+}
+
+void InstanceLauncher::doLogin(const QString &errorMsg)
+{
+ // FIXME: Use new account system here...
+ /*
+ LoginDialog *loginDlg = new LoginDialog(nullptr, errorMsg);
+ loginDlg->exec();
+ if (loginDlg->result() == QDialog::Accepted)
+ {
+ PasswordLogin uInfo{loginDlg->getUsername(), loginDlg->getPassword()};
+
+ ProgressDialog *tDialog = new ProgressDialog(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)
+ {
+ 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();
+}