Skip to content

Commit 7f98f67

Browse files
authored
[DiscordRPC] Fix non-functioning global toggle (#849)
# Main Goal Fix global RPC toggle not actually disabling RPC. Also disable RPC regional setting when global toggle is set to disabled. Closes #806 ## PR Status : - Overall Status : Done - Commits : Done - Synced to base (Collapse:main) : Yes - Build status : OK - Crashing : No - Bug found caused by PR : 0 ### Templates <details> <summary>Changelog Prefixes</summary> ``` **[New]** **[Imp]** **[Fix]** **[Loc]** **[Doc]** ``` </details>
2 parents cbba343 + 228bc63 commit 7f98f67

File tree

6 files changed

+35
-18
lines changed

6 files changed

+35
-18
lines changed

CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,21 @@ public enum ActivityType
3737
public sealed partial class DiscordPresenceManager : IDisposable
3838
{
3939
#region Properties
40+
41+
public bool IsRpcEnabled
42+
{
43+
get => field = GetAppConfigValue("EnableDiscordRPC");
44+
set
45+
{
46+
if (field == value) return;
47+
field = value;
48+
49+
SetAndSaveConfigValue("EnableDiscordRPC", value);
50+
if (value) SetupPresence();
51+
else DisablePresence();
52+
}
53+
}
54+
4055
private const string CollapseLogoExt = "https://collapselauncher.com/img/logo@2x.webp";
4156

4257
private DiscordRpcClient? _client;
@@ -46,8 +61,8 @@ public sealed partial class DiscordPresenceManager : IDisposable
4661
private DateTime? _lastPlayTime;
4762
private bool _firstTimeConnect = true;
4863
private readonly ActionBlock<RichPresence?> _presenceUpdateQueue;
49-
50-
private bool _cachedIsIdleEnabled = true;
64+
65+
private bool _cachedIsIdleEnabled = true;
5166

5267
public bool IdleEnabled
5368
{
@@ -103,6 +118,7 @@ public void Dispose()
103118

104119
private void EnablePresence(ulong applicationId)
105120
{
121+
if (!IsRpcEnabled) return;
106122
_firstTimeConnect = true;
107123

108124
// Flush and dispose the session
@@ -168,8 +184,10 @@ public void DisablePresence()
168184

169185
public void SetupPresence()
170186
{
171-
string? gameCategory = GetAppConfigValue("GameCategory").ToString();
172-
bool isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool();
187+
if (!IsRpcEnabled) return;
188+
189+
var gameCategory = GetAppConfigValue("GameCategory").ToString();
190+
var isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool();
173191

174192
if (isGameStatusEnabled)
175193
{
@@ -220,10 +238,7 @@ private bool TryEnablePresenceIfPlugin()
220238

221239
public void SetActivity(ActivityType activity, DateTime? activityOffset = null)
222240
{
223-
if (!GetAppConfigValue("EnableDiscordRPC").ToBool())
224-
{
225-
return;
226-
}
241+
if (!IsRpcEnabled) return;
227242

228243
//_lastAttemptedActivityType = activity;
229244
_activityType = activity;

CollapseLauncher/Classes/RegionManagement/RegionManagement.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ private async Task<bool> LoadRegionRootButton()
489489

490490
LogWriteLine($"Region changed to {Preset.ZoneFullname}", LogType.Scheme, true);
491491
#if !DISABLEDISCORD
492-
if (GetAppConfigValue("EnableDiscordRPC").ToBool())
492+
if (AppDiscordPresence.IsRpcEnabled)
493493
AppDiscordPresence.SetupPresence();
494494
#endif
495495
return true;

CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -881,8 +881,8 @@ private async void ChangeToActivatedRegion()
881881
if (await LoadRegionFromCurrentConfigV2(preset, gameName, gameRegion))
882882
{
883883
#if !DISABLEDISCORD
884-
if (GetAppConfigValue("EnableDiscordRPC").ToBool() && !sameRegion)
885-
AppDiscordPresence?.SetupPresence();
884+
if ((AppDiscordPresence?.IsRpcEnabled ?? false) && !sameRegion)
885+
AppDiscordPresence.SetupPresence();
886886
#endif
887887
InvokeLoadingRegionPopup(false);
888888
LauncherFrame.BackStack.Clear();

CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2219,6 +2219,7 @@
22192219
Style="{ThemeResource BodyStrongTextBlockStyle}"
22202220
Text="{x:Bind helper:Locale.Lang._HomePage.GameSettings_Panel3RegionRpc}" />
22212221
<ToggleSwitch x:Name="RegionRpcToggle"
2222+
IsEnabled="{x:Bind IsRpcEnabled_QS}"
22222223
IsOn="{x:Bind ToggleRegionPlayingRpc, Mode=TwoWay}"
22232224
OffContent="{x:Bind helper:Locale.Lang._Misc.Disabled}"
22242225
OnContent="{x:Bind helper:Locale.Lang._Misc.Enabled}" />

CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ public sealed partial class HomePage
7979
private int barWidth;
8080
private int consoleWidth;
8181

82+
private readonly bool IsRpcEnabled_QS = AppDiscordPresence?.IsRpcEnabled ?? false;
83+
8284
public static int RefreshRateDefault => 500;
8385
public static int RefreshRateSlow => 1000;
8486

CollapseLauncher/XAMLs/MainApp/Pages/SettingsPage.xaml.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -769,9 +769,9 @@ private bool IsDiscordRpcEnabled
769769
{
770770
get
771771
{
772-
bool isEnabled = GetAppConfigValue("EnableDiscordRPC");
773-
ToggleDiscordGameStatus.IsEnabled = IsEnabled;
774-
if (isEnabled)
772+
var e = AppDiscordPresence.IsRpcEnabled;
773+
ToggleDiscordGameStatus.IsEnabled = e;
774+
if (e)
775775
{
776776
ToggleDiscordGameStatus.Visibility = Visibility.Visible;
777777
ToggleDiscordIdleStatus.Visibility = Visibility.Visible;
@@ -781,23 +781,22 @@ private bool IsDiscordRpcEnabled
781781
ToggleDiscordGameStatus.Visibility = Visibility.Collapsed;
782782
ToggleDiscordIdleStatus.Visibility = Visibility.Collapsed;
783783
}
784-
return isEnabled;
784+
return e;
785785
}
786786
set
787787
{
788788
if (value)
789789
{
790-
AppDiscordPresence.SetupPresence();
791790
ToggleDiscordGameStatus.Visibility = Visibility.Visible;
792791
ToggleDiscordIdleStatus.Visibility = Visibility.Visible;
793792
}
794793
else
795794
{
796-
AppDiscordPresence.DisablePresence();
797795
ToggleDiscordGameStatus.Visibility = Visibility.Collapsed;
798796
ToggleDiscordIdleStatus.Visibility = Visibility.Collapsed;
799797
}
800-
SetAndSaveConfigValue("EnableDiscordRPC", value);
798+
799+
AppDiscordPresence.IsRpcEnabled = value;
801800
ToggleDiscordGameStatus.IsEnabled = value;
802801
}
803802
}

0 commit comments

Comments
 (0)