diff options
author | Ac_K <Acoustik666@gmail.com> | 2021-01-08 09:14:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-08 09:14:13 +0100 |
commit | a9cb31e75fe269519f6be71ae83627ee21d1bc1f (patch) | |
tree | d078b6adea185e6bab72bdb79db37b061ca3bcdf /Ryujinx/Modules/DiscordIntegrationModule.cs | |
parent | 72e94bb089a0f2fef862acee1960dd05083a735b (diff) |
gui: Refactoring Part 1 (#1859)
* gui: Refactoring Part 1
* Fix ProfileDialog.glade path
* Fix Application.Quit assert
* Fix TitleUpdateWindow parent
* Fix TitleUpdate selected item
* Remove extra line in TitleUpdateWindow
* Fix empty assign of Enum.TryParse
* Add Patrons list in the About Window
* update about error messages
Diffstat (limited to 'Ryujinx/Modules/DiscordIntegrationModule.cs')
-rw-r--r-- | Ryujinx/Modules/DiscordIntegrationModule.cs | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/Ryujinx/Modules/DiscordIntegrationModule.cs b/Ryujinx/Modules/DiscordIntegrationModule.cs new file mode 100644 index 00000000..3a91cf53 --- /dev/null +++ b/Ryujinx/Modules/DiscordIntegrationModule.cs @@ -0,0 +1,173 @@ +using DiscordRPC; +using Ryujinx.Common; +using Ryujinx.Configuration; +using System; +using System.Linq; + +namespace Ryujinx.Modules +{ + static class DiscordIntegrationModule + { + private static DiscordRpcClient _discordClient; + + private const string LargeDescription = "Ryujinx is a Nintendo Switch emulator."; + + public static RichPresence DiscordPresence { get; private set; } + + public static void Initialize() + { + DiscordPresence = new RichPresence + { + Assets = new Assets + { + LargeImageKey = "ryujinx", + LargeImageText = LargeDescription + }, + Details = "Main Menu", + State = "Idling", + Timestamps = new Timestamps(DateTime.UtcNow) + }; + + ConfigurationState.Instance.EnableDiscordIntegration.Event += Update; + } + + private static void Update(object sender, ReactiveEventArgs<bool> e) + { + if (e.OldValue != e.NewValue) + { + // If the integration was active, disable it and unload everything + if (e.OldValue) + { + _discordClient?.Dispose(); + + _discordClient = null; + } + + // If we need to activate it and the client isn't active, initialize it + if (e.NewValue && _discordClient == null) + { + _discordClient = new DiscordRpcClient("568815339807309834"); + + _discordClient.Initialize(); + _discordClient.SetPresence(DiscordPresence); + } + } + } + + public static void SwitchToPlayingState(string titleId, string titleName) + { + if (SupportedTitles.Contains(titleId)) + { + DiscordPresence.Assets.LargeImageKey = titleId; + } + + string state = titleId; + + if (state == null) + { + state = "Ryujinx"; + } + else + { + state = state.ToUpper(); + } + + string details = "Idling"; + + if (titleName != null) + { + details = $"Playing {titleName}"; + } + + DiscordPresence.Details = details; + DiscordPresence.State = state; + DiscordPresence.Assets.LargeImageText = titleName; + DiscordPresence.Assets.SmallImageKey = "ryujinx"; + DiscordPresence.Assets.SmallImageText = LargeDescription; + DiscordPresence.Timestamps = new Timestamps(DateTime.UtcNow); + + _discordClient?.SetPresence(DiscordPresence); + } + + public static void SwitchToMainMenu() + { + DiscordPresence.Details = "Main Menu"; + DiscordPresence.State = "Idling"; + DiscordPresence.Assets.LargeImageKey = "ryujinx"; + DiscordPresence.Assets.LargeImageText = LargeDescription; + DiscordPresence.Assets.SmallImageKey = null; + DiscordPresence.Assets.SmallImageText = null; + DiscordPresence.Timestamps = new Timestamps(DateTime.UtcNow); + + _discordClient?.SetPresence(DiscordPresence); + } + + public static void Exit() + { + _discordClient?.Dispose(); + } + + private static readonly string[] SupportedTitles = + { + "0100000000010000", // Super Mario Odyssey™ + "01000b900d8b0000", // Cadence of Hyrule – Crypt of the NecroDancer Featuring The Legend of Zelda + "01000d200ac0c000", // Bud Spencer & Terence Hill - Slaps And Beans + "01000d700be88000", // My Girlfriend is a Mermaid!? + "01000dc007e90000", // Sparkle Unleashed + "01000e2003fa0000", // MIGHTY GUNVOLT BURST + "0100225000fee000", // Blaster Master Zero + "010028d0045ce000", // Sparkle 2 + "01002b30028f6000", // Celeste + "01002fc00c6d0000", // Witch Thief + "010034e005c9c000", // Code of Princess EX + "010036b0034e4000", // Super Mario Party™ + "01003d200baa2000", // Pokémon Mystery Dungeon™: Rescue Team DX + "01004f8006a78000", // Super Meat Boy + "010051f00ac5e000", // SEGA AGES Sonic The Hedgehog + "010055d009f78000", // Fire Emblem™: Three Houses + "010056e00853a000", // A Hat in Time + "0100574009f9e000", // 嘘つき姫と盲目王子 + "01005d700e742000", // DOOM 64 + "0100628004bce000", // Nights of Azure 2: Bride of the New Moon + "0100633007d48000", // Hollow Knight + "010065500b218000", // メモリーズオフ -Innocent Fille- + "010068f00aa78000", // FINAL FANTASY XV POCKET EDITION HD + "01006bb00c6f0000", // The Legend of Zelda™: Link’s Awakening + "01006f8002326000", // Animal Crossing™: New Horizons + "01006a800016e000", // Super Smash Bros.™ Ultimate + "010072800cbe8000", // PC Building Simulator + "01007300020fa000", // ASTRAL CHAIN + "01007330027ee000", // Ultra Street Fighter® II: The Final Challengers + "0100749009844000", // 20XX + "01007a4008486000", // Enchanting Mahjong Match + "01007ef00011e000", // The Legend of Zelda™: Breath of the Wild + "010080b00ad66000", // Undertale + "010082400bcc6000", // Untitled Goose Game + "01008db008c2c000", // Pokémon™ Shield + "010094e00b52e000", // Capcom Beat 'Em Up Bundle + "01009aa000faa000", // Sonic Mania + "01009b90006dc000", // Super Mario Maker™ 2 + "01009cc00c97c000", // DEAD OR ALIVE Xtreme 3 Scarlet 基本無料版 + "0100ea80032ea000", // New Super Mario Bros.™ U Deluxe + "0100a4200a284000", // LUMINES REMASTERED + "0100a5c00d162000", // Cuphead + "0100abf008968000", // Pokémon™ Sword + "0100ae000aebc000", // Angels of Death + "0100b3f000be2000", // Pokkén Tournament™ DX + "0100bc2004ff4000", // Owlboy + "0100cf3007578000", // Atari Flashback Classics + "0100d5d00c6be000", // Our World Is Ended. + "0100d6b00cd88000", // YUMENIKKI -DREAM DIARY- + "0100d870045b6000", // Nintendo Entertainment System™ - Nintendo Switch Online + "0100e0c00adac000", // SENRAN KAGURA Reflexions + "0100e46006708000", // Terraria + "0100e7200b272000", // Lanota + "0100e9f00b882000", // null + "0100eab00605c000", // Poly Bridge + "0100efd00a4fa000", // Shantae and the Pirate's Curse + "0100f6a00a684000", // ひぐらしのなく頃に奉 + "0100f9f00c696000", // Crash™ Team Racing Nitro-Fueled + "051337133769a000", // RGB-Seizure + }; + } +}
\ No newline at end of file |