aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Ui.Common/DiscordIntegrationModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Ui.Common/DiscordIntegrationModule.cs')
-rw-r--r--Ryujinx.Ui.Common/DiscordIntegrationModule.cs98
1 files changed, 98 insertions, 0 deletions
diff --git a/Ryujinx.Ui.Common/DiscordIntegrationModule.cs b/Ryujinx.Ui.Common/DiscordIntegrationModule.cs
new file mode 100644
index 00000000..5ae886ac
--- /dev/null
+++ b/Ryujinx.Ui.Common/DiscordIntegrationModule.cs
@@ -0,0 +1,98 @@
+using DiscordRPC;
+using Ryujinx.Common;
+using Ryujinx.Ui.Common.Configuration;
+
+namespace Ryujinx.Ui.Common
+{
+ public static class DiscordIntegrationModule
+ {
+ private const string Description = "A simple, experimental Nintendo Switch emulator.";
+ private const string CliendId = "568815339807309834";
+
+ private static DiscordRpcClient _discordClient;
+ private static RichPresence _discordPresenceMain;
+
+ public static void Initialize()
+ {
+ _discordPresenceMain = new RichPresence
+ {
+ Assets = new Assets
+ {
+ LargeImageKey = "ryujinx",
+ LargeImageText = Description
+ },
+ Details = "Main Menu",
+ State = "Idling",
+ Timestamps = Timestamps.Now,
+ Buttons = new Button[]
+ {
+ new Button()
+ {
+ Label = "Website",
+ Url = "https://ryujinx.org/"
+ }
+ }
+ };
+
+ ConfigurationState.Instance.EnableDiscordIntegration.Event += Update;
+ }
+
+ private static void Update(object sender, ReactiveEventArgs<bool> evnt)
+ {
+ if (evnt.OldValue != evnt.NewValue)
+ {
+ // If the integration was active, disable it and unload everything
+ if (evnt.OldValue)
+ {
+ _discordClient?.Dispose();
+
+ _discordClient = null;
+ }
+
+ // If we need to activate it and the client isn't active, initialize it
+ if (evnt.NewValue && _discordClient == null)
+ {
+ _discordClient = new DiscordRpcClient(CliendId);
+
+ _discordClient.Initialize();
+ _discordClient.SetPresence(_discordPresenceMain);
+ }
+ }
+ }
+
+ public static void SwitchToPlayingState(string titleId, string titleName)
+ {
+ _discordClient?.SetPresence(new RichPresence
+ {
+ Assets = new Assets
+ {
+ LargeImageKey = "game",
+ LargeImageText = titleName,
+ SmallImageKey = "ryujinx",
+ SmallImageText = Description,
+ },
+ Details = $"Playing {titleName}",
+ State = (titleId == "0000000000000000") ? "Homebrew" : titleId.ToUpper(),
+ Timestamps = Timestamps.Now,
+ Buttons = new Button[]
+ {
+ new Button()
+ {
+ Label = "Website",
+ Url = "https://ryujinx.org/"
+ }
+ }
+ });
+ }
+
+ public static void SwitchToMainMenu()
+ {
+ _discordClient?.SetPresence(_discordPresenceMain);
+ }
+
+ public static void Exit()
+ {
+ _discordClient?.Dispose();
+ }
+ }
+} \ No newline at end of file