From f06d22d6f01e657ebbc0c8ef082739cd468e47b5 Mon Sep 17 00:00:00 2001
From: Isaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com>
Date: Sun, 11 Feb 2024 02:09:18 +0000
Subject: Infra: Capitalisation Consistency (#6296)

* Rename Ryujinx.UI.Common

* Rename Ryujinx.UI.LocaleGenerator

* Update in Files

AboutWindow

* Configuration State

* Rename projects

* Ryujinx/UI

* Fix build

* Main remaining inconsistencies

* HLE.UI Namespace

* HLE.UI Files

* Namespace

* Ryujinx.UI.Common.Configuration.UI

* Ryujinx.UI.Common,Configuration.UI Files

* More instances
---
 src/Ryujinx.UI.Common/DiscordIntegrationModule.cs | 98 +++++++++++++++++++++++
 1 file changed, 98 insertions(+)
 create mode 100644 src/Ryujinx.UI.Common/DiscordIntegrationModule.cs

(limited to 'src/Ryujinx.UI.Common/DiscordIntegrationModule.cs')

diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs
new file mode 100644
index 00000000..0b9439ea
--- /dev/null
+++ b/src/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[]
+                {
+                    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[]
+                {
+                    new Button
+                    {
+                        Label = "Website",
+                        Url = "https://ryujinx.org/",
+                    },
+                },
+            });
+        }
+
+        public static void SwitchToMainMenu()
+        {
+            _discordClient?.SetPresence(_discordPresenceMain);
+        }
+
+        public static void Exit()
+        {
+            _discordClient?.Dispose();
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2