From 0da50fc82253eb3a0233be8620bc605fe2c967d7 Mon Sep 17 00:00:00 2001 From: Bagus Nur Listiyono Date: Tue, 30 Dec 2025 01:25:09 +0700 Subject: [PATCH 1/3] [DiscordRPC] Fix toggle not actually disabling RPC Signed-off-by: Bagus Nur Listiyono --- .../DiscordPresence/DiscordPresenceManager.cs | 34 ++++++++++++++----- .../RegionManagement/RegionManagement.cs | 2 +- .../XAMLs/MainApp/MainPage.xaml.cs | 4 +-- .../XAMLs/MainApp/Pages/SettingsPage.xaml.cs | 13 ++++--- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs b/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs index cbdea80e9..660f0811d 100644 --- a/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs +++ b/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs @@ -37,6 +37,24 @@ public enum ActivityType public sealed partial class DiscordPresenceManager : IDisposable { #region Properties + + [field: NonSerialized] + private bool? _isRpcEnabled; + public bool IsRpcEnabled + { + get => _isRpcEnabled ??= GetAppConfigValue("EnableDiscordRPC").ToBoolNullable() ?? false; + set + { + if (_isRpcEnabled == value) return; + + _isRpcEnabled = value; + + SetAndSaveConfigValue("EnableDiscordRPC", value); + if (value) SetupPresence(); + else DisablePresence(); + } + } + private const string CollapseLogoExt = "https://collapselauncher.com/img/logo@2x.webp"; private DiscordRpcClient? _client; @@ -46,8 +64,8 @@ public sealed partial class DiscordPresenceManager : IDisposable private DateTime? _lastPlayTime; private bool _firstTimeConnect = true; private readonly ActionBlock _presenceUpdateQueue; - - private bool _cachedIsIdleEnabled = true; + + private bool _cachedIsIdleEnabled = true; public bool IdleEnabled { @@ -103,6 +121,7 @@ public void Dispose() private void EnablePresence(ulong applicationId) { + if (!IsRpcEnabled) return; _firstTimeConnect = true; // Flush and dispose the session @@ -168,8 +187,10 @@ public void DisablePresence() public void SetupPresence() { - string? gameCategory = GetAppConfigValue("GameCategory").ToString(); - bool isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool(); + if (!IsRpcEnabled) return; + + var gameCategory = GetAppConfigValue("GameCategory").ToString(); + var isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool(); if (isGameStatusEnabled) { @@ -220,10 +241,7 @@ private bool TryEnablePresenceIfPlugin() public void SetActivity(ActivityType activity, DateTime? activityOffset = null) { - if (!GetAppConfigValue("EnableDiscordRPC").ToBool()) - { - return; - } + if (!IsRpcEnabled) return; //_lastAttemptedActivityType = activity; _activityType = activity; diff --git a/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs b/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs index 0f3ffbb11..a408dce14 100644 --- a/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs +++ b/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs @@ -489,7 +489,7 @@ private async Task LoadRegionRootButton() LogWriteLine($"Region changed to {Preset.ZoneFullname}", LogType.Scheme, true); #if !DISABLEDISCORD - if (GetAppConfigValue("EnableDiscordRPC").ToBool()) + if (AppDiscordPresence.IsRpcEnabled) AppDiscordPresence.SetupPresence(); #endif return true; diff --git a/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs b/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs index 1f85b2483..7f1a15ab7 100644 --- a/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs +++ b/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs @@ -881,8 +881,8 @@ private async void ChangeToActivatedRegion() if (await LoadRegionFromCurrentConfigV2(preset, gameName, gameRegion)) { #if !DISABLEDISCORD - if (GetAppConfigValue("EnableDiscordRPC").ToBool() && !sameRegion) - AppDiscordPresence?.SetupPresence(); + if ((AppDiscordPresence?.IsRpcEnabled ?? false) && !sameRegion) + AppDiscordPresence.SetupPresence(); #endif InvokeLoadingRegionPopup(false); LauncherFrame.BackStack.Clear(); diff --git a/CollapseLauncher/XAMLs/MainApp/Pages/SettingsPage.xaml.cs b/CollapseLauncher/XAMLs/MainApp/Pages/SettingsPage.xaml.cs index 098c87d9b..afab85887 100644 --- a/CollapseLauncher/XAMLs/MainApp/Pages/SettingsPage.xaml.cs +++ b/CollapseLauncher/XAMLs/MainApp/Pages/SettingsPage.xaml.cs @@ -769,9 +769,9 @@ private bool IsDiscordRpcEnabled { get { - bool isEnabled = GetAppConfigValue("EnableDiscordRPC"); - ToggleDiscordGameStatus.IsEnabled = IsEnabled; - if (isEnabled) + var e = AppDiscordPresence.IsRpcEnabled; + ToggleDiscordGameStatus.IsEnabled = e; + if (e) { ToggleDiscordGameStatus.Visibility = Visibility.Visible; ToggleDiscordIdleStatus.Visibility = Visibility.Visible; @@ -781,23 +781,22 @@ private bool IsDiscordRpcEnabled ToggleDiscordGameStatus.Visibility = Visibility.Collapsed; ToggleDiscordIdleStatus.Visibility = Visibility.Collapsed; } - return isEnabled; + return e; } set { if (value) { - AppDiscordPresence.SetupPresence(); ToggleDiscordGameStatus.Visibility = Visibility.Visible; ToggleDiscordIdleStatus.Visibility = Visibility.Visible; } else { - AppDiscordPresence.DisablePresence(); ToggleDiscordGameStatus.Visibility = Visibility.Collapsed; ToggleDiscordIdleStatus.Visibility = Visibility.Collapsed; } - SetAndSaveConfigValue("EnableDiscordRPC", value); + + AppDiscordPresence.IsRpcEnabled = value; ToggleDiscordGameStatus.IsEnabled = value; } } From 47086d063c6d886f83a668188b3241a59192eaa2 Mon Sep 17 00:00:00 2001 From: Bagus Nur Listiyono Date: Tue, 30 Dec 2025 01:26:10 +0700 Subject: [PATCH 2/3] [DiscordRPC] Disable regional QS toggle if global toggle is off Signed-off-by: Bagus Nur Listiyono --- CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml | 1 + CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml.cs | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml b/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml index e31018779..0c71d5fe9 100644 --- a/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml +++ b/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml @@ -2219,6 +2219,7 @@ Style="{ThemeResource BodyStrongTextBlockStyle}" Text="{x:Bind helper:Locale.Lang._HomePage.GameSettings_Panel3RegionRpc}" /> diff --git a/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml.cs b/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml.cs index 8fbba9fdb..8b1adeca0 100644 --- a/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml.cs +++ b/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml.cs @@ -79,6 +79,8 @@ public sealed partial class HomePage private int barWidth; private int consoleWidth; + private readonly bool IsRpcEnabled_QS = AppDiscordPresence?.IsRpcEnabled ?? false; + public static int RefreshRateDefault => 500; public static int RefreshRateSlow => 1000; From 228bc63cc6fbae13539a8dd394e918f0e4b6009a Mon Sep 17 00:00:00 2001 From: Kemal Setya Adhi Date: Sun, 4 Jan 2026 01:38:02 +0700 Subject: [PATCH 3/3] Simplify IsRpcEnabled Use direct assignment to field and use implicit cast instead of ToBoolNullable() as the boolean will return false as default value afterwards. --- .../Classes/DiscordPresence/DiscordPresenceManager.cs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs b/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs index 660f0811d..0f843e4e7 100644 --- a/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs +++ b/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs @@ -38,16 +38,13 @@ public sealed partial class DiscordPresenceManager : IDisposable { #region Properties - [field: NonSerialized] - private bool? _isRpcEnabled; public bool IsRpcEnabled { - get => _isRpcEnabled ??= GetAppConfigValue("EnableDiscordRPC").ToBoolNullable() ?? false; + get => field = GetAppConfigValue("EnableDiscordRPC"); set { - if (_isRpcEnabled == value) return; - - _isRpcEnabled = value; + if (field == value) return; + field = value; SetAndSaveConfigValue("EnableDiscordRPC", value); if (value) SetupPresence();