diff --git a/Bloxstrap/App.xaml.cs b/Bloxstrap/App.xaml.cs index 651806d..695a0f1 100644 --- a/Bloxstrap/App.xaml.cs +++ b/Bloxstrap/App.xaml.cs @@ -6,9 +6,6 @@ using System.Windows.Threading; using Microsoft.Win32; using Bloxstrap.Models.SettingTasks.Base; -using Bloxstrap.UI.Elements.About.Pages; -using Bloxstrap.UI.Elements.About; -using System; namespace Bloxstrap { diff --git a/Bloxstrap/Integrations/DiscordRichPresence.cs b/Bloxstrap/Integrations/DiscordRichPresence.cs index c79fe04..7f30aab 100644 --- a/Bloxstrap/Integrations/DiscordRichPresence.cs +++ b/Bloxstrap/Integrations/DiscordRichPresence.cs @@ -9,7 +9,7 @@ namespace Bloxstrap.Integrations private DiscordRPC.RichPresence? _currentPresence; private DiscordRPC.RichPresence? _currentPresenceCopy; - private Message? _stashedRPCMessage; + private Queue _messageQueue = new(); private bool _visible = true; private long _currentUniverseId; @@ -17,7 +17,7 @@ namespace Bloxstrap.Integrations public DiscordRichPresence(ActivityWatcher activityWatcher) { - const string LOG_IDENT = "DiscordRichPresence::DiscordRichPresence"; + const string LOG_IDENT = "DiscordRichPresence"; _activityWatcher = activityWatcher; @@ -47,7 +47,7 @@ namespace Bloxstrap.Integrations _rpcClient.Initialize(); } - public void ProcessRPCMessage(Message message) + public void ProcessRPCMessage(Message message, bool implicitUpdate = true) { const string LOG_IDENT = "DiscordRichPresence::ProcessRPCMessage"; @@ -56,14 +56,8 @@ namespace Bloxstrap.Integrations if (_currentPresence is null || _currentPresenceCopy is null) { - if (_activityWatcher.ActivityInGame) - { - App.Logger.WriteLine(LOG_IDENT, "Presence is not yet set, but is currently in game, stashing presence set request"); - _stashedRPCMessage = message; - return; - } - - App.Logger.WriteLine(LOG_IDENT, "Presence is not set, aborting"); + App.Logger.WriteLine(LOG_IDENT, "Presence is not set, enqueuing message"); + _messageQueue.Enqueue(message); return; } @@ -159,7 +153,8 @@ namespace Bloxstrap.Integrations } } - UpdatePresence(); + if (implicitUpdate) + UpdatePresence(); } public void SetVisibility(bool visible) @@ -183,7 +178,7 @@ namespace Bloxstrap.Integrations App.Logger.WriteLine(LOG_IDENT, "Not in game, clearing presence"); _currentPresence = _currentPresenceCopy = null; - _stashedRPCMessage = null; + _messageQueue.Clear(); UpdatePresence(); return true; @@ -284,17 +279,13 @@ namespace Bloxstrap.Integrations // this is used for configuration from BloxstrapRPC _currentPresenceCopy = _currentPresence.Clone(); - // TODO: use queue for stashing messages - if (_stashedRPCMessage is not null) + if (_messageQueue.Any()) { - App.Logger.WriteLine(LOG_IDENT, "Found stashed RPC message, invoking presence set command now"); - ProcessRPCMessage(_stashedRPCMessage); - _stashedRPCMessage = null; - } - else - { - UpdatePresence(); + App.Logger.WriteLine(LOG_IDENT, "Processing queued messages"); + ProcessRPCMessage(_messageQueue.Dequeue(), false); } + + UpdatePresence(); return true; }