diff --git a/3rdParty/3rdParty.csproj b/3rdParty/3rdParty.csproj
new file mode 100644
index 0000000..8ac2d17
--- /dev/null
+++ b/3rdParty/3rdParty.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ _3rdParty
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/ScePSX/Core/DiscordRPC/RPCManager.cs b/3rdParty/DiscordRPC/RPCManager.cs
similarity index 85%
rename from ScePSX/Core/DiscordRPC/RPCManager.cs
rename to 3rdParty/DiscordRPC/RPCManager.cs
index a6b25c7..52f6ab7 100644
--- a/ScePSX/Core/DiscordRPC/RPCManager.cs
+++ b/3rdParty/DiscordRPC/RPCManager.cs
@@ -4,7 +4,7 @@
using DiscordRPC;
using DiscordRPC.Logging;
-namespace ScePSX.Core.DiscordRPC
+namespace ScePSX.ThirdParty.DiscordRPC
{
public class RPCManager : IDisposable
{
@@ -21,7 +21,7 @@ public class RPCManager : IDisposable
private Stopwatch _playTimeStopwatch;
private string _platformName = "";
- private const string APP_ID = "1342671514892259388";
+ private const string APP_ID = "1482446005763834111"; //test id, change in prod
public void Initialize()
{
@@ -54,6 +54,7 @@ public void Initialize()
_client.Initialize();
_playTimeStopwatch = new Stopwatch();
_initialized = true;
+ UpdatePresence();
Console.WriteLine("[DiscordRPC] Initialized successfully on {0}", _platformName);
}
catch (Exception ex)
@@ -73,7 +74,7 @@ private string GetPlatformName()
if (OperatingSystem.IsAndroid())
return "Android";
if (OperatingSystem.IsIOS())
- return "iOS";
+ return "iOS"; //i dont think this will be ever the case but just in case
return RuntimeInformation.OSDescription;
}
@@ -92,6 +93,7 @@ public void StartGame(string gameName, string diskId)
public void SetPaused(bool paused)
{
+ Console.WriteLine($"[DiscordRPC] SetPaused called: {paused}, initialized: {_initialized}, client: {_client != null}, diskId: '{_diskId}'");
if (!_initialized || _client == null || string.IsNullOrEmpty(_diskId)) return;
_isPaused = paused;
@@ -124,19 +126,26 @@ private void UpdatePresence()
{
if (_client == null) return;
+ bool isIdle = string.IsNullOrEmpty(_gameName);
+ bool isInGame = !isIdle && !_isPaused;
+
var presence = new RichPresence()
{
- Details = string.IsNullOrEmpty(_gameName) ? "ScePSX" : _gameName,
- State = _isPaused ? $"Paused | {_platformName}" : $"{FormatPlayTime(_playTimeStopwatch.Elapsed)} | {_platformName}",
- Timestamps = _isPaused ? new Timestamps() : new Timestamps(DateTime.UtcNow),
- Assets = new Assets()
+ Details = isIdle ? "Menu" : _gameName,
+ State = _isPaused ? $"Paused | {_platformName}" : (isIdle ? $"Idle | {_platformName}" : $"{FormatPlayTime(_playTimeStopwatch.Elapsed)} | {_platformName}"),
+ Timestamps = isInGame ? new Timestamps(DateTime.UtcNow) : new Timestamps()
+ };
+
+ if (!isIdle)
+ {
+ presence.Assets = new Assets()
{
LargeImageKey = "logo",
LargeImageText = "PlayStation 1 Emulator",
SmallImageKey = _isPaused ? "paused" : "playing",
SmallImageText = _isPaused ? "Paused" : "In Game"
- }
- };
+ };
+ }
if (!string.IsNullOrEmpty(_diskId))
{
diff --git a/AvaloniaUI/ScePSX.csproj b/AvaloniaUI/ScePSX.csproj
index 252f5e8..39419e8 100644
--- a/AvaloniaUI/ScePSX.csproj
+++ b/AvaloniaUI/ScePSX.csproj
@@ -39,6 +39,16 @@
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
diff --git a/AvaloniaUI/UI/MainWindow.axaml.cs b/AvaloniaUI/UI/MainWindow.axaml.cs
index 2ac8224..6f2ebf3 100644
--- a/AvaloniaUI/UI/MainWindow.axaml.cs
+++ b/AvaloniaUI/UI/MainWindow.axaml.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
@@ -11,7 +11,7 @@
using Avalonia.Interactivity;
using Avalonia.Platform.Storage;
using Avalonia.Threading;
-using ScePSX.Core.DiscordRPC;
+using ScePSX.ThirdParty.DiscordRPC;
using ScePSX.Core.GPU;
namespace ScePSX.UI;
@@ -294,7 +294,8 @@ private void CleanCheckSet(MenuItem Menu, int CheckIdx)
foreach (MenuItem child in Menu.Items.OfType