aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2014-01-27 03:00:49 +0100
committerPetr Mrázek <peterix@gmail.com>2014-01-27 03:00:49 +0100
commitffbc5bb62c0cd771b26cb1d9b5afdccef77075b4 (patch)
tree78b10cee3dc25acba02954aaf4f0e44ee4c295de
parentd7113de3bd3cb43b1bc68792cd27a716b012f2b5 (diff)
downloadPrismLauncher-ffbc5bb62c0cd771b26cb1d9b5afdccef77075b4.tar.gz
PrismLauncher-ffbc5bb62c0cd771b26cb1d9b5afdccef77075b4.tar.bz2
PrismLauncher-ffbc5bb62c0cd771b26cb1d9b5afdccef77075b4.zip
Offline mode can be used even when online.
Allow the user to pick a player name for offline mode. Big auth refactor. Now using session objects instead of the accounts themselves. Sessions only last for one instance start and hold all the auth and player data.
-rw-r--r--CMakeLists.txt2
-rw-r--r--gui/MainWindow.cpp204
-rw-r--r--gui/MainWindow.h15
-rw-r--r--gui/MainWindow.ui60
-rw-r--r--gui/dialogs/AccountListDialog.cpp2
-rw-r--r--logic/BaseInstance.h4
-rw-r--r--logic/LegacyInstance.cpp15
-rw-r--r--logic/LegacyInstance.h4
-rw-r--r--logic/LegacyUpdate.cpp12
-rw-r--r--logic/LegacyUpdate.h3
-rw-r--r--logic/MinecraftProcess.cpp26
-rw-r--r--logic/MinecraftProcess.h6
-rw-r--r--logic/OneSixFTBInstance.cpp6
-rw-r--r--logic/OneSixFTBInstance.h2
-rw-r--r--logic/OneSixInstance.cpp39
-rw-r--r--logic/OneSixInstance.h6
-rw-r--r--logic/OneSixUpdate.cpp52
-rw-r--r--logic/OneSixUpdate.h6
-rw-r--r--logic/auth/AuthSession.cpp30
-rw-r--r--logic/auth/AuthSession.h49
-rw-r--r--logic/auth/MojangAccount.cpp82
-rw-r--r--logic/auth/MojangAccount.h38
-rw-r--r--logic/auth/YggdrasilTask.h17
-rw-r--r--logic/auth/flows/RefreshTask.cpp4
-rw-r--r--logic/auth/flows/RefreshTask.h3
-rw-r--r--logic/net/NetJob.cpp2
-rw-r--r--logic/net/NetJob.h2
27 files changed, 415 insertions, 276 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 047b9edf..5dd7dfb5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -365,6 +365,8 @@ logic/net/PasteUpload.cpp
logic/net/URLConstants.h
# Yggdrasil login stuff
+logic/auth/AuthSession.h
+logic/auth/AuthSession.cpp
logic/auth/MojangAccountList.h
logic/auth/MojangAccountList.cpp
logic/auth/MojangAccount.h
diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp
index ee9c3fad..9977dc75 100644
--- a/gui/MainWindow.cpp
+++ b/gui/MainWindow.cpp
@@ -71,7 +71,6 @@
#include "logic/auth/flows/AuthenticateTask.h"
#include "logic/auth/flows/RefreshTask.h"
-#include "logic/auth/flows/ValidateTask.h"
#include "logic/updater/DownloadUpdateTask.h"
@@ -132,8 +131,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
newsLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
newsLabel->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
ui->newsToolBar->insertWidget(ui->actionMoreNews, newsLabel);
- QObject::connect(newsLabel, &QAbstractButton::clicked, this, &MainWindow::newsButtonClicked);
- QObject::connect(MMC->newsChecker().get(), &NewsChecker::newsLoaded, this, &MainWindow::updateNewsLabel);
+ QObject::connect(newsLabel, &QAbstractButton::clicked, this,
+ &MainWindow::newsButtonClicked);
+ QObject::connect(MMC->newsChecker().get(), &NewsChecker::newsLoaded, this,
+ &MainWindow::updateNewsLabel);
updateNewsLabel();
}
@@ -173,8 +174,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
view->setModel(proxymodel);
view->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(view, SIGNAL(customContextMenuRequested(const QPoint&)),
- this, SLOT(showInstanceContextMenu(const QPoint&)));
+ connect(view, SIGNAL(customContextMenuRequested(const QPoint &)), this,
+ SLOT(showInstanceContextMenu(const QPoint &)));
ui->horizontalLayout->addWidget(view);
}
@@ -213,8 +214,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
// Start status checker
{
- connect(MMC->statusChecker().get(), &StatusChecker::statusLoaded, this, &MainWindow::updateStatusUI);
- connect(MMC->statusChecker().get(), &StatusChecker::statusLoadingFailed, this, &MainWindow::updateStatusFailedUI);
+ connect(MMC->statusChecker().get(), &StatusChecker::statusLoaded, this,
+ &MainWindow::updateStatusUI);
+ connect(MMC->statusChecker().get(), &StatusChecker::statusLoadingFailed, this,
+ &MainWindow::updateStatusFailedUI);
connect(m_statusRefresh, &QAbstractButton::clicked, this, &MainWindow::reloadStatus);
connect(&statusTimer, &QTimer::timeout, this, &MainWindow::reloadStatus);
@@ -313,8 +316,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
if (MMC->settings()->get("AutoUpdate").toBool())
on_actionCheckUpdate_triggered();
- connect(MMC->notificationChecker().get(), &NotificationChecker::notificationCheckFinished,
- this, &MainWindow::notificationsChanged);
+ connect(MMC->notificationChecker().get(),
+ &NotificationChecker::notificationCheckFinished, this,
+ &MainWindow::notificationsChanged);
}
setSelectedInstanceById(MMC->settings()->get("SelectedInstance").toString());
@@ -330,9 +334,9 @@ MainWindow::~MainWindow()
delete drawer;
}
-void MainWindow::showInstanceContextMenu(const QPoint& pos)
+void MainWindow::showInstanceContextMenu(const QPoint &pos)
{
- if(!view->indexAt(pos).isValid())
+ if (!view->indexAt(pos).isValid())
{
return;
}
@@ -522,9 +526,12 @@ static QString convertStatus(const QString &status)
{
QString ret = "?";
- if(status == "green") ret = "↑";
- else if(status == "yellow") ret = "-";
- else if(status == "red") ret="↓";
+ if (status == "green")
+ ret = "↑";
+ else if (status == "yellow")
+ ret = "-";
+ else if (status == "red")
+ ret = "↓";
return "<span style=\"font-size:11pt; font-weight:600;\">" + ret + "</span>";
}
@@ -533,7 +540,7 @@ void MainWindow::reloadStatus()
{
m_statusRefresh->setChecked(true);
MMC->statusChecker()->reloadStatus();
- //updateStatusUI();
+ // updateStatusUI();
}
static QString makeStatusString(const QMap<QString, QString> statuses)
@@ -632,7 +639,8 @@ void MainWindow::notificationsChanged()
}
QMessageBox box(icon, tr("Notification"), entry.message, QMessageBox::Close, this);
- QPushButton *dontShowAgainButton = box.addButton(tr("Don't show again"), QMessageBox::AcceptRole);
+ QPushButton *dontShowAgainButton =
+ box.addButton(tr("Don't show again"), QMessageBox::AcceptRole);
box.setDefaultButton(QMessageBox::Close);
box.exec();
if (box.clickedButton() == dontShowAgainButton)
@@ -657,9 +665,9 @@ void MainWindow::downloadUpdates(QString repo, int versionId, bool installOnExit
if (updateDlg.exec(&updateTask))
{
UpdateFlags baseFlags = None;
- #ifdef MultiMC_UPDATER_DRY_RUN
- baseFlags |= DryRun;
- #endif
+#ifdef MultiMC_UPDATER_DRY_RUN
+ baseFlags |= DryRun;
+#endif
if (installOnExit)
MMC->installUpdates(updateTask.updateFilesDir(), baseFlags | OnExit);
else
@@ -751,7 +759,7 @@ void MainWindow::on_actionAddInstance_triggered()
if (MMC->accounts()->anyAccountIsValid())
{
ProgressDialog loadDialog(this);
- auto update = newInstance->doUpdate(false);
+ auto update = newInstance->doUpdate();
connect(update.get(), &Task::failed, [this](QString reason)
{
QString error = QString("Instance load failed: %1").arg(reason);
@@ -837,7 +845,7 @@ void MainWindow::on_actionChangeInstIcon_triggered()
void MainWindow::iconUpdated(QString icon)
{
- if(icon == m_currentInstIcon)
+ if (icon == m_currentInstIcon)
{
ui->actionChangeInstIcon->setIcon(MMC->icons()->getBigIcon(m_currentInstIcon));
}
@@ -860,7 +868,8 @@ void MainWindow::setSelectedInstanceById(const QString &id)
selectionIndex = proxymodel->mapFromSource(index);
}
}
- view->selectionModel()->setCurrentIndex(selectionIndex, QItemSelectionModel::ClearAndSelect);
+ view->selectionModel()->setCurrentIndex(selectionIndex,
+ QItemSelectionModel::ClearAndSelect);
}
void MainWindow::on_actionChangeInstGroup_triggered()
@@ -1060,7 +1069,16 @@ void MainWindow::on_actionLaunchInstance_triggered()
}
}
-void MainWindow::doLaunch()
+void MainWindow::on_actionLaunchInstanceOffline_triggered()
+{
+ if (m_selectedInstance)
+ {
+ NagUtils::checkJVMArgs(m_selectedInstance->settings().get("JvmArgs").toString(), this);
+ doLaunch(false);
+ }
+}
+
+void MainWindow::doLaunch(bool online)
{
if (!m_selectedInstance)
return;
@@ -1104,89 +1122,111 @@ void MainWindow::doLaunch()
if (!account.get())
return;
+ // we try empty password first :)
+ QString password;
+ // we loop until the user succeeds in logging in or gives up
+ bool tryagain = true;
+ // the failure. the default failure.
QString failReason = tr("Your account is currently not logged in. Please enter "
"your password to log in again.");
- // do the login. if the account has an access token, try to refresh it first.
- if (account->accountStatus() != NotVerified)
+
+ while (tryagain)
{
- // We'll need to validate the access token to make sure the account is still logged in.
- ProgressDialog progDialog(this);
- progDialog.setSkipButton(true, tr("Play Offline"));
- auto task = account->login();
- progDialog.exec(task.get());
-
- auto status = account->accountStatus();
- if (status != NotVerified)
- {
- updateInstance(m_selectedInstance, account);
- }
- else
+ AuthSessionPtr session(new AuthSession());
+ session->wants_online = online;
+ auto task = account->login(session, password);
+ if (task)
{
+ // We'll need to validate the access token to make sure the account
+ // is still logged in.
+ ProgressDialog progDialog(this);
+ if (online)
+ progDialog.setSkipButton(true, tr("Play Offline"));
+ progDialog.exec(task.get());
if (!task->successful())
{
failReason = task->failReason();
}
- if (loginWithPassword(account, failReason))
- updateInstance(m_selectedInstance, account);
}
- // in any case, revert from online to verified.
- account->downgrade();
- }
- else
- {
- if (loginWithPassword(account, failReason))
+ switch (session->status)
{
- updateInstance(m_selectedInstance, account);
- account->downgrade();
+ case AuthSession::Undetermined:
+ {
+ QLOG_ERROR() << "Received undetermined session status during login. Bye.";
+ tryagain = false;
+ break;
}
- // in any case, revert from online to verified.
- account->downgrade();
- }
-}
-
-bool MainWindow::loginWithPassword(MojangAccountPtr account, const QString &errorMsg)
-{
- EditAccountDialog passDialog(errorMsg, this, EditAccountDialog::PasswordField);
- if (passDialog.exec() == QDialog::Accepted)
- {
- // To refresh the token, we just create an authenticate task with the given account and
- // the user's password.
- ProgressDialog progDialog(this);
- auto task = account->login(passDialog.password());
- progDialog.exec(task.get());
- if (task->successful())
- return true;
- else
+ case AuthSession::RequiresPassword:
{
- // If the authentication task failed, recurse with the task's error message.
- return loginWithPassword(account, task->failReason());
+ EditAccountDialog passDialog(failReason, this, EditAccountDialog::PasswordField);
+ if (passDialog.exec() == QDialog::Accepted)
+ {
+ password = passDialog.password();
+ }
+ else
+ {
+ tryagain = false;
+ }
+ break;
+ }
+ case AuthSession::PlayableOffline:
+ {
+ // we ask the user for a player name
+ bool ok = false;
+ QString usedname = session->player_name;
+ QString name = QInputDialog::getText(this, tr("Player name"),
+ tr("Choose your offline mode player name."),
+ QLineEdit::Normal, session->player_name, &ok);
+ if (!ok)
+ {
+ tryagain = false;
+ break;
+ }
+ if (name.length())
+ {
+ usedname = name;
+ }
+ session->MakeOffline(usedname);
+ // offline flavored game from here :3
+ }
+ case AuthSession::PlayableOnline:
+ {
+ // update first if the server actually responded
+ if (session->auth_server_online)
+ {
+ updateInstance(m_selectedInstance, session);
+ }
+ else
+ {
+ launchInstance(m_selectedInstance, session);
+ }
+ tryagain = false;
+ }
}
}
- return false;
}
-void MainWindow::updateInstance(BaseInstance *instance, MojangAccountPtr account)
+void MainWindow::updateInstance(BaseInstance *instance, AuthSessionPtr session)
{
- bool only_prepare = account->accountStatus() != Online;
- auto updateTask = instance->doUpdate(only_prepare);
+ auto updateTask = instance->doUpdate();
if (!updateTask)
{
- launchInstance(instance, account);
+ launchInstance(instance, session);
return;
}
ProgressDialog tDialog(this);
- connect(updateTask.get(), &Task::succeeded, [this, instance, account]
- { launchInstance(instance, account); });
+ connect(updateTask.get(), &Task::succeeded, [this, instance, session]
+ { launchInstance(instance, session); });
connect(updateTask.get(), SIGNAL(failed(QString)), SLOT(onGameUpdateError(QString)));
tDialog.exec(updateTask.get());
}
-void MainWindow::launchInstance(BaseInstance *instance, MojangAccountPtr account)
+void MainWindow::launchInstance(BaseInstance *instance, AuthSessionPtr session)
{
Q_ASSERT_X(instance != NULL, "launchInstance", "instance is NULL");
- Q_ASSERT_X(account.get() != nullptr, "launchInstance", "account is NULL");
+ Q_ASSERT_X(session.get() != nullptr, "launchInstance", "session is NULL");
- proc = instance->prepareForLaunch(account);
+ proc = instance->prepareForLaunch(session);
if (!proc)
return;
@@ -1195,7 +1235,7 @@ void MainWindow::launchInstance(BaseInstance *instance, MojangAccountPtr account
console = new ConsoleWindow(proc);
connect(console, SIGNAL(isClosing()), this, SLOT(instanceEnded()));
- proc->setLogin(account);
+ proc->setLogin(session);
proc->launch();
}
@@ -1258,7 +1298,7 @@ void MainWindow::on_actionChangeInstMCVersion_triggered()
VersionSelectDialog vselect(m_selectedInstance->versionList().get(),
tr("Change Minecraft version"), this);
vselect.setFilter(1, "OneSix");
- if(!vselect.exec() || !vselect.selectedVersion())
+ if (!vselect.exec() || !vselect.selectedVersion())
return;
if (!MMC->accounts()->anyAccountIsValid())
@@ -1276,7 +1316,7 @@ void MainWindow::on_actionChangeInstMCVersion_triggered()
auto result = CustomMessageBox::selectable(
this, tr("Are you sure?"),
tr("This will remove any library/version customization you did previously. "
- "This includes things like Forge install and similar."),
+ "This includes things like Forge install and similar."),
QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Abort,
QMessageBox::Abort)->exec();
@@ -1285,7 +1325,7 @@ void MainWindow::on_actionChangeInstMCVersion_triggered()
}
m_selectedInstance->setIntendedVersionId(vselect.selectedVersion()->descriptor());
- auto updateTask = m_selectedInstance->doUpdate(false);
+ auto updateTask = m_selectedInstance->doUpdate();
if (!updateTask)
{
return;
@@ -1384,7 +1424,7 @@ void MainWindow::instanceEnded()
void MainWindow::checkMigrateLegacyAssets()
{
int legacyAssets = AssetsUtils::findLegacyAssets();
- if(legacyAssets > 0)
+ if (legacyAssets > 0)
{
ProgressDialog migrateDlg(this);
AssetsMigrateTask migrateTask(legacyAssets, &migrateDlg);
diff --git a/gui/MainWindow.h b/gui/MainWindow.h
index eb478776..eeba2c26 100644
--- a/gui/MainWindow.h
+++ b/gui/MainWindow.h
@@ -96,6 +96,8 @@ slots:
void on_actionLaunchInstance_triggered();
+ void on_actionLaunchInstanceOffline_triggered();
+
void on_actionDeleteInstance_triggered();
void on_actionRenameInstance_triggered();
@@ -112,25 +114,18 @@ slots:
* Launches the currently selected instance with the default account.
* If no default account is selected, prompts the user to pick an account.
*/
- void doLaunch();
-
- /*!
- * Opens an input dialog, allowing the user to input their password and refresh its access token.
- * This function will execute the proper Yggdrasil task to refresh the access token.
- * Returns true if successful. False if the user cancelled.
- */
- bool loginWithPassword(MojangAccountPtr account, const QString& errorMsg="");
+ void doLaunch(bool online = true);
/*!
* Launches the given instance with the given account.
* This function assumes that the given account has a valid, usable access token.
*/
- void launchInstance(BaseInstance* instance, MojangAccountPtr account);
+ void launchInstance(BaseInstance *instance, AuthSessionPtr session);
/*!
* Prepares the given instance for launch with the given account.
*/
- void updateInstance(BaseInstance* instance, MojangAccountPtr account);
+ void updateInstance(BaseInstance *instance, AuthSessionPtr account);
void onGameUpdateError(QString error);
diff --git a/gui/MainWindow.ui b/gui/MainWindow.ui
index 25af6f60..8cf26d18 100644
--- a/gui/MainWindow.ui
+++ b/gui/MainWindow.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>688</width>
- <height>460</height>
+ <width>694</width>
+ <height>563</height>
</rect>
</property>
<property name="windowTitle">
@@ -107,6 +107,7 @@
</attribute>
<addaction name="actionChangeInstIcon"/>
<addaction name="actionLaunchInstance"/>
+ <addaction name="actionLaunchInstanceOffline"/>
<addaction name="separator"/>
<addaction name="actionEditInstNotes"/>
<addaction name="actionChangeInstGroup"/>
@@ -152,7 +153,9 @@
</widget>
<action name="actionAddInstance">
<property name="icon">
- <iconset theme="new"/>
+ <iconset theme="new">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>Add Instance</string>
@@ -166,7 +169,9 @@
</action>
<action name="actionViewInstanceFolder">
<property name="icon">
- <iconset theme="viewfolder"/>
+ <iconset theme="viewfolder">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>View Instance Folder</string>
@@ -180,7 +185,9 @@
</action>
<action name="actionRefresh">
<property name="icon">
- <iconset theme="refresh"/>
+ <iconset theme="refresh">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>Refresh</string>
@@ -194,7 +201,9 @@
</action>
<action name="actionViewCentralModsFolder">
<property name="icon">
- <iconset theme="centralmods"/>
+ <iconset theme="centralmods">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>View Central Mods Folder</string>
@@ -208,7 +217,9 @@
</action>
<action name="actionCheckUpdate">
<property name="icon">
- <iconset theme="checkupdate"/>
+ <iconset theme="checkupdate">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>Check for Updates</string>
@@ -222,7 +233,9 @@
</action>
<action name="actionSettings">
<property name="icon">
- <iconset theme="settings"/>
+ <iconset theme="settings">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>Settings</string>
@@ -239,7 +252,9 @@
</action>
<action name="actionReportBug">
<property name="icon">
- <iconset theme="bug"/>
+ <iconset theme="bug">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>Report a Bug</string>
@@ -253,7 +268,9 @@
</action>
<action name="actionMoreNews">
<property name="icon">
- <iconset theme="news"/>
+ <iconset theme="news">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>More News</string>
@@ -270,7 +287,9 @@
</action>
<action name="actionAbout">
<property name="icon">
- <iconset theme="about"/>
+ <iconset theme="about">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>About MultiMC</string>
@@ -463,7 +482,9 @@
<bool>true</bool>
</property>
<property name="icon">
- <iconset theme="cat"/>
+ <iconset theme="cat">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>Meow</string>
@@ -474,7 +495,9 @@
</action>
<action name="actionCopyInstance">
<property name="icon">
- <iconset theme="copy"/>
+ <iconset theme="copy">
+ <normaloff/>
+ </iconset>
</property>
<property name="text">
<string>Copy Instance</string>
@@ -494,6 +517,17 @@
<string>Manage your Mojang or Minecraft accounts.</string>
</property>
</action>
+ <action name="actionLaunchInstanceOffline">
+ <property name="text">
+ <string>Play Offline</string>
+ </property>
+ <property name="toolTip">
+ <string>Launch the selected instance in offline mode.</string>
+ </property>
+ <property name="statusTip">
+ <string>Launch the selected instance.</string>
+ </property>
+ </action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
diff --git a/gui/dialogs/AccountListDialog.cpp b/gui/dialogs/AccountListDialog.cpp
index 1712e352..a38035a6 100644
--- a/gui/dialogs/AccountListDialog.cpp
+++ b/gui/dialogs/AccountListDialog.cpp
@@ -126,7 +126,7 @@ void AccountListDialog::addAccount(const QString& errMsg)
MojangAccountPtr account = MojangAccount::createFromUsername(username);
ProgressDialog progDialog(this);
- auto task = account->login(password);
+ auto task = account->login(nullptr, password);
progDialog.exec(task.get());
if(task->successful())
{
diff --git a/logic/BaseInstance.h b/logic/BaseInstance.h
index a861e9b2..cd49f99b 100644
--- a/logic/BaseInstance.h
+++ b/logic/BaseInstance.h
@@ -155,10 +155,10 @@ public:
virtual SettingsObject &settings() const;
/// returns a valid update task
- virtual std::shared_ptr<Task> doUpdate(bool only_prepare) = 0;
+ virtual std::shared_ptr<Task> doUpdate() = 0;
/// returns a valid minecraft process, ready for launch with the given account.
- virtual MinecraftProcess *prepareForLaunch(MojangAccountPtr account) = 0;
+ virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr account) = 0;
/// do any necessary cleanups after the instance finishes. also runs before
/// 'prepareForLaunch'
diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp
index 2828bcbf..a9f0d112 100644
--- a/logic/LegacyInstance.cpp
+++ b/logic/LegacyInstance.cpp
@@ -42,15 +42,15 @@ LegacyInstance::LegacyInstance(const QString &rootDir, SettingsObject *settings,
settings->registerSetting("IntendedJarVersion", "");
}
-std::shared_ptr<Task> LegacyInstance::doUpdate(bool only_prepare)
+std::shared_ptr<Task> LegacyInstance::doUpdate()
{
// make sure the jar mods list is initialized by asking for it.
auto list = jarModList();
// create an update task
- return std::shared_ptr<Task>(new LegacyUpdate(this, only_prepare, this));
+ return std::shared_ptr<Task>(new LegacyUpdate(this, this));
}
-MinecraftProcess *LegacyInstance::prepareForLaunch(MojangAccountPtr account)
+MinecraftProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account)
{
MinecraftProcess *proc = new MinecraftProcess(this);
@@ -66,13 +66,14 @@ MinecraftProcess *LegacyInstance::prepareForLaunch(MojangAccountPtr account)
if (settings().get("LaunchMaximized").toBool())
windowParams = "max";
else
- windowParams = QString("%1x%2").arg(settings().get("MinecraftWinWidth").toInt()).arg(
- settings().get("MinecraftWinHeight").toInt());
+ windowParams = QString("%1x%2")
+ .arg(settings().get("MinecraftWinWidth").toInt())
+ .arg(settings().get("MinecraftWinHeight").toInt());
QString lwjgl = QDir(MMC->settings()->get("LWJGLDir").toString() + "/" + lwjglVersion())
.absolutePath();
- launchScript += "userName " + account->currentProfile()->name + "\n";
- launchScript += "sessionId " + account->sessionId() + "\n";
+ launchScript += "userName " + account->player_name + "\n";
+ launchScript += "sessionId " + account->session + "\n";
launchScript += "windowTitle " + windowTitle() + "\n";
launchScript += "windowParams " + windowParams + "\n";
launchScript += "lwjgl " + lwjgl + "\n";
diff --git a/logic/LegacyInstance.h b/logic/LegacyInstance.h
index 1e7d9eb6..636addeb 100644
--- a/logic/LegacyInstance.h
+++ b/logic/LegacyInstance.h
@@ -76,9 +76,9 @@ public:
virtual bool shouldUpdate() const override;
virtual void setShouldUpdate(bool val) override;
- virtual std::shared_ptr<Task> doUpdate(bool only_prepare) override;
+ virtual std::shared_ptr<Task> doUpdate() override;
- virtual MinecraftProcess *prepareForLaunch(MojangAccountPtr account) override;
+ virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr account) override;
virtual void cleanupAfterRun() override;
virtual QDialog *createModEditDialog(QWidget *parent) override;
diff --git a/logic/LegacyUpdate.cpp b/logic/LegacyUpdate.cpp
index cb3598a7..5d82a76b 100644
--- a/logic/LegacyUpdate.cpp
+++ b/logic/LegacyUpdate.cpp
@@ -27,13 +27,13 @@
#include "logger/QsLog.h"
#include "logic/net/URLConstants.h"
-LegacyUpdate::LegacyUpdate(BaseInstance *inst, bool only_prepare, QObject *parent)
- : Task(parent), m_inst(inst), m_only_prepare(only_prepare)
+LegacyUpdate::LegacyUpdate(BaseInstance *inst, QObject *parent) : Task(parent), m_inst(inst)
{
}
void LegacyUpdate::executeTask()
{
+ /*
if(m_only_prepare)
{
// FIXME: think this through some more.
@@ -49,8 +49,9 @@ void LegacyUpdate::executeTask()
}
else
{
- lwjglStart();
- }
+ */
+ lwjglStart();
+ //}
}
void LegacyUpdate::lwjglStart()
@@ -268,7 +269,6 @@ void LegacyUpdate::jarStart()
auto dljob = new NetJob("Minecraft.jar for version " + version_id);
-
auto metacache = MMC->metacache();
auto entry = metacache->resolveEntry("versions", localPath);
dljob->addNetAction(CacheDownload::make(QUrl(urlstr), entry));
@@ -425,7 +425,7 @@ void LegacyUpdate::ModTheJar()
auto &mod = modList->operator[](i);
// do not merge disabled mods.
- if(!mod.enabled())
+ if (!mod.enabled())
continue;
if (mod.type() == Mod::MOD_ZIPFILE)
diff --git a/logic/LegacyUpdate.h b/logic/LegacyUpdate.h
index 0b573ca5..613eb1f9 100644
--- a/logic/LegacyUpdate.h
+++ b/logic/LegacyUpdate.h
@@ -31,7 +31,7 @@ class LegacyUpdate : public Task
{
Q_OBJECT
public:
- explicit LegacyUpdate(BaseInstance *inst, bool only_prepare, QObject *parent = 0);
+ explicit LegacyUpdate(BaseInstance *inst, QObject *parent = 0);
virtual void executeTask();
private
@@ -72,5 +72,4 @@ private:
private:
NetJobPtr legacyDownloadJob;
BaseInstance *m_inst = nullptr;
- bool m_only_prepare = false;
};
diff --git a/logic/MinecraftProcess.cpp b/logic/MinecraftProcess.cpp
index 84610021..9c0a7074 100644
--- a/logic/MinecraftProcess.cpp
+++ b/logic/MinecraftProcess.cpp
@@ -79,26 +79,18 @@ void MinecraftProcess::setWorkdir(QString path)
QString MinecraftProcess::censorPrivateInfo(QString in)
{
- if(!m_account)
+ if(!m_session)
return in;
- QString sessionId = m_account->sessionId();
- QString accessToken = m_account->accessToken();
- QString clientToken = m_account->clientToken();
- in.replace(sessionId, "<SESSION ID>");
- in.replace(accessToken, "<ACCESS TOKEN>");
- in.replace(clientToken, "<CLIENT TOKEN>");
- auto profile = m_account->currentProfile();
- if(profile)
- {
- QString profileId = profile->id;
- QString profileName = profile->name;
- in.replace(profileId, "<PROFILE ID>");
- in.replace(profileName, "<PROFILE NAME>");
- }
+ if(m_session->session != "-")
+ in.replace(m_session->session, "<SESSION ID>");
+ in.replace(m_session->access_token, "<ACCESS TOKEN>");
+ in.replace(m_session->client_token, "<CLIENT TOKEN>");
+ in.replace(m_session->uuid, "<PROFILE ID>");
+ in.replace(m_session->player_name, "<PROFILE NAME>");
- auto i = m_account->user().properties.begin();
- while (i != m_account->user().properties.end())
+ auto i = m_session->u.properties.begin();
+ while (i != m_session->u.properties.end())
{
in.replace(i.value(), "<" + i.key().toUpper() + ">");
++i;
diff --git a/logic/MinecraftProcess.h b/logic/MinecraftProcess.h
index 70e5df52..26214026 100644
--- a/logic/MinecraftProcess.h
+++ b/logic/MinecraftProcess.h
@@ -78,9 +78,9 @@ public:
void killMinecraft();
- inline void setLogin(MojangAccountPtr account)
+ inline void set