mirror of
https://github.com/GreemDev/Ryujinx.git
synced 2025-01-09 14:41:59 +00:00
misc: Refactor Discord integration to listen on TitleIDs.CurrentApplication changes instead of waiting to be directly told when to change states.
This commit is contained in:
parent
1dd69912b1
commit
f463ea1c5d
6 changed files with 45 additions and 9 deletions
|
@ -8,7 +8,20 @@ namespace Ryujinx.Common
|
||||||
{
|
{
|
||||||
public static class TitleIDs
|
public static class TitleIDs
|
||||||
{
|
{
|
||||||
public static Optional<string> CurrentApplication { get; set; }
|
private static string _currentApplication;
|
||||||
|
|
||||||
|
public static Optional<string> CurrentApplication
|
||||||
|
{
|
||||||
|
get => _currentApplication;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_currentApplication = value.OrElse(null);
|
||||||
|
|
||||||
|
CurrentApplicationChanged?.Invoke(_currentApplication);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static event Action<Optional<string>> CurrentApplicationChanged;
|
||||||
|
|
||||||
public static GraphicsBackend SelectGraphicsBackend(string titleId, GraphicsBackend currentBackend)
|
public static GraphicsBackend SelectGraphicsBackend(string titleId, GraphicsBackend currentBackend)
|
||||||
{
|
{
|
||||||
|
|
|
@ -105,7 +105,6 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions
|
||||||
|
|
||||||
// Initialize GPU.
|
// Initialize GPU.
|
||||||
GraphicsConfig.TitleId = programId.ToString("X16");
|
GraphicsConfig.TitleId = programId.ToString("X16");
|
||||||
TitleIDs.CurrentApplication = GraphicsConfig.TitleId;
|
|
||||||
device.Gpu.HostInitalized.Set();
|
device.Gpu.HostInitalized.Set();
|
||||||
|
|
||||||
if (!MemoryBlock.SupportsFlags(MemoryAllocationFlags.ViewCompatible))
|
if (!MemoryBlock.SupportsFlags(MemoryAllocationFlags.ViewCompatible))
|
||||||
|
|
|
@ -61,6 +61,8 @@ namespace Ryujinx.HLE.Loaders.Processes
|
||||||
{
|
{
|
||||||
_latestPid = processResult.ProcessId;
|
_latestPid = processResult.ProcessId;
|
||||||
|
|
||||||
|
TitleIDs.CurrentApplication = processResult.ProgramIdText;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,6 +90,8 @@ namespace Ryujinx.HLE.Loaders.Processes
|
||||||
{
|
{
|
||||||
_latestPid = processResult.ProcessId;
|
_latestPid = processResult.ProcessId;
|
||||||
|
|
||||||
|
TitleIDs.CurrentApplication = processResult.ProgramIdText;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,6 +119,8 @@ namespace Ryujinx.HLE.Loaders.Processes
|
||||||
if (processResult.ProgramId > 0x01000000000007FF)
|
if (processResult.ProgramId > 0x01000000000007FF)
|
||||||
{
|
{
|
||||||
_latestPid = processResult.ProcessId;
|
_latestPid = processResult.ProcessId;
|
||||||
|
|
||||||
|
TitleIDs.CurrentApplication = processResult.ProgramIdText;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -134,6 +140,8 @@ namespace Ryujinx.HLE.Loaders.Processes
|
||||||
{
|
{
|
||||||
_latestPid = processResult.ProcessId;
|
_latestPid = processResult.ProcessId;
|
||||||
|
|
||||||
|
TitleIDs.CurrentApplication = processResult.ProgramIdText;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ using LibHac.Common;
|
||||||
using LibHac.Ns;
|
using LibHac.Ns;
|
||||||
using Ryujinx.Audio.Backends.CompatLayer;
|
using Ryujinx.Audio.Backends.CompatLayer;
|
||||||
using Ryujinx.Audio.Integration;
|
using Ryujinx.Audio.Integration;
|
||||||
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Graphics.Gpu;
|
using Ryujinx.Graphics.Gpu;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
|
@ -17,6 +18,8 @@ namespace Ryujinx.HLE
|
||||||
{
|
{
|
||||||
public class Switch : IDisposable
|
public class Switch : IDisposable
|
||||||
{
|
{
|
||||||
|
public static Switch Shared { get; private set; }
|
||||||
|
|
||||||
public HLEConfiguration Configuration { get; }
|
public HLEConfiguration Configuration { get; }
|
||||||
public IHardwareDeviceDriver AudioDeviceDriver { get; }
|
public IHardwareDeviceDriver AudioDeviceDriver { get; }
|
||||||
public MemoryBlock Memory { get; }
|
public MemoryBlock Memory { get; }
|
||||||
|
@ -77,6 +80,8 @@ namespace Ryujinx.HLE
|
||||||
DirtyHacks = Configuration.Hacks;
|
DirtyHacks = Configuration.Hacks;
|
||||||
UpdateVSyncInterval();
|
UpdateVSyncInterval();
|
||||||
#pragma warning restore IDE0055
|
#pragma warning restore IDE0055
|
||||||
|
|
||||||
|
Shared = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ProcessFrame()
|
public void ProcessFrame()
|
||||||
|
@ -145,6 +150,9 @@ namespace Ryujinx.HLE
|
||||||
AudioDeviceDriver.Dispose();
|
AudioDeviceDriver.Dispose();
|
||||||
FileSystem.Dispose();
|
FileSystem.Dispose();
|
||||||
Memory.Dispose();
|
Memory.Dispose();
|
||||||
|
|
||||||
|
TitleIDs.CurrentApplication = null;
|
||||||
|
Shared = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ using DiscordRPC;
|
||||||
using Humanizer;
|
using Humanizer;
|
||||||
using Humanizer.Localisation;
|
using Humanizer.Localisation;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
|
using Ryujinx.HLE;
|
||||||
using Ryujinx.HLE.Loaders.Processes;
|
using Ryujinx.HLE.Loaders.Processes;
|
||||||
using Ryujinx.UI.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.UI.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
|
@ -44,6 +45,16 @@ namespace Ryujinx.UI.Common
|
||||||
};
|
};
|
||||||
|
|
||||||
ConfigurationState.Instance.EnableDiscordIntegration.Event += Update;
|
ConfigurationState.Instance.EnableDiscordIntegration.Event += Update;
|
||||||
|
TitleIDs.CurrentApplicationChanged += titleId =>
|
||||||
|
{
|
||||||
|
if (titleId)
|
||||||
|
SwitchToPlayingState(
|
||||||
|
ApplicationLibrary.LoadAndSaveMetaData(titleId),
|
||||||
|
Switch.Shared.Processes.ActiveApplication
|
||||||
|
);
|
||||||
|
else
|
||||||
|
SwitchToMainState();
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Update(object sender, ReactiveEventArgs<bool> evnt)
|
private static void Update(object sender, ReactiveEventArgs<bool> evnt)
|
||||||
|
@ -69,7 +80,7 @@ namespace Ryujinx.UI.Common
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SwitchToPlayingState(ApplicationMetadata appMeta, ProcessResult procRes)
|
private static void SwitchToPlayingState(ApplicationMetadata appMeta, ProcessResult procRes)
|
||||||
{
|
{
|
||||||
_discordClient?.SetPresence(new RichPresence
|
_discordClient?.SetPresence(new RichPresence
|
||||||
{
|
{
|
||||||
|
@ -88,7 +99,7 @@ namespace Ryujinx.UI.Common
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SwitchToMainState() => _discordClient?.SetPresence(_discordPresenceMain);
|
private static void SwitchToMainState() => _discordClient?.SetPresence(_discordPresenceMain);
|
||||||
|
|
||||||
private static string TruncateToByteLength(string input)
|
private static string TruncateToByteLength(string input)
|
||||||
{
|
{
|
||||||
|
|
|
@ -578,7 +578,6 @@ namespace Ryujinx.Ava
|
||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
_isActive = false;
|
_isActive = false;
|
||||||
DiscordIntegrationModule.SwitchToMainState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Exit()
|
private void Exit()
|
||||||
|
@ -863,12 +862,10 @@ namespace Ryujinx.Ava
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplicationMetadata appMeta = ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText,
|
ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText,
|
||||||
appMetadata => appMetadata.UpdatePreGame()
|
appMetadata => appMetadata.UpdatePreGame()
|
||||||
);
|
);
|
||||||
|
|
||||||
DiscordIntegrationModule.SwitchToPlayingState(appMeta, Device.Processes.ActiveApplication);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue