From f7deeb0db47d09f412c1961509e7ad3418c3f0a9 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Wed, 28 Jan 2026 17:06:23 +0500 Subject: [PATCH] no recursion Signed-off-by: Octol1ttle --- launcher/LaunchController.cpp | 20 ++++++++++++-------- launcher/LaunchController.h | 4 +++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/launcher/LaunchController.cpp b/launcher/LaunchController.cpp index 78da7cad6..c4123038a 100644 --- a/launcher/LaunchController.cpp +++ b/launcher/LaunchController.cpp @@ -127,11 +127,11 @@ void LaunchController::decideAccount() } } -bool LaunchController::decideLaunchMode() +LaunchDecision LaunchController::decideLaunchMode() { if (!m_accountToUse || m_wantedLaunchMode == LaunchMode::Demo) { m_actualLaunchMode = LaunchMode::Demo; - return true; + return LaunchDecision::Continue; } if (m_wantedLaunchMode == LaunchMode::Normal) { @@ -160,7 +160,7 @@ bool LaunchController::decideLaunchMode() if (!accountToCheck) { m_actualLaunchMode = LaunchMode::Demo; - return true; + return LaunchDecision::Continue; } auto state = accountToCheck->accountState(); @@ -178,7 +178,7 @@ bool LaunchController::decideLaunchMode() progDialog.execWithTask(task.get()); if (task->getState() == State::AbortedByUser) { - return false; + return LaunchDecision::Abort; } state = accountToCheck->accountState(); @@ -199,14 +199,14 @@ bool LaunchController::decideLaunchMode() default: m_actualLaunchMode = state == AccountState::Online && m_wantedLaunchMode == LaunchMode::Normal ? LaunchMode::Normal : LaunchMode::Offline; - return true; // All good to go + return LaunchDecision::Continue; // All good to go } if (reauthenticateAccount(accountToCheck, reauthReason)) { - return decideLaunchMode(); + return LaunchDecision::Undecided; } - return false; + return LaunchDecision::Abort; } bool LaunchController::askPlayDemo() @@ -270,7 +270,11 @@ void LaunchController::login() { decideAccount(); - if (!decideLaunchMode()) { + LaunchDecision decision = decideLaunchMode(); + while (decision == LaunchDecision::Undecided) { + decision = decideLaunchMode(); + } + if (decision == LaunchDecision::Abort) { emitAborted(); return; } diff --git a/launcher/LaunchController.h b/launcher/LaunchController.h index f0e1dd03c..3966cc545 100644 --- a/launcher/LaunchController.h +++ b/launcher/LaunchController.h @@ -42,6 +42,8 @@ class InstanceWindow; +enum class LaunchDecision { Undecided, Continue, Abort }; + class LaunchController : public Task { Q_OBJECT public: @@ -74,7 +76,7 @@ class LaunchController : public Task { void login(); void launchInstance(); void decideAccount(); - bool decideLaunchMode(); + LaunchDecision decideLaunchMode(); bool askPlayDemo(); QString askOfflineName(QString playerName, bool* ok = nullptr); bool reauthenticateAccount(MinecraftAccountPtr account, QString reason);