Update `DiscordRichPresence` to use new statistics provider component

This commit is contained in:
Salman Alshamrani 2024-10-25 03:30:43 -04:00
parent fdeb8b907e
commit 663b769c71
1 changed files with 11 additions and 7 deletions

View File

@ -15,6 +15,7 @@
using osu.Game;
using osu.Game.Configuration;
using osu.Game.Extensions;
using osu.Game.Online;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Online.Multiplayer;
@ -47,6 +48,9 @@ internal partial class DiscordRichPresence : Component
[Resolved]
private MultiplayerClient multiplayerClient { get; set; } = null!;
[Resolved]
private LocalUserStatisticsProvider statisticsProvider { get; set; } = null!;
[Resolved]
private OsuConfigManager config { get; set; } = null!;
@ -65,6 +69,7 @@ internal partial class DiscordRichPresence : Component
};
private IBindable<APIUser>? user;
private IBindable<UserStatistics?>? localStatistics;
[BackgroundDependencyLoader]
private void load()
@ -117,6 +122,10 @@ protected override void LoadComplete()
status.BindValueChanged(_ => schedulePresenceUpdate());
activity.BindValueChanged(_ => schedulePresenceUpdate());
privacyMode.BindValueChanged(_ => schedulePresenceUpdate());
localStatistics = statisticsProvider.Statistics.GetBoundCopy();
localStatistics.BindValueChanged(_ => schedulePresenceUpdate());
multiplayerClient.RoomUpdated += onRoomUpdated;
}
@ -158,7 +167,7 @@ private void schedulePresenceUpdate()
private void updatePresence(bool hideIdentifiableInformation)
{
if (user == null)
if (user == null || localStatistics == null)
return;
// user activity
@ -228,12 +237,7 @@ private void updatePresence(bool hideIdentifiableInformation)
if (privacyMode.Value == DiscordRichPresenceMode.Limited)
presence.Assets.LargeImageText = string.Empty;
else
{
if (user.Value.RulesetsStatistics != null && user.Value.RulesetsStatistics.TryGetValue(ruleset.Value.ShortName, out UserStatistics? statistics))
presence.Assets.LargeImageText = $"{user.Value.Username}" + (statistics.GlobalRank > 0 ? $" (rank #{statistics.GlobalRank:N0})" : string.Empty);
else
presence.Assets.LargeImageText = $"{user.Value.Username}" + (user.Value.Statistics?.GlobalRank > 0 ? $" (rank #{user.Value.Statistics.GlobalRank:N0})" : string.Empty);
}
presence.Assets.LargeImageText = $"{user.Value.Username}" + (localStatistics.Value?.GlobalRank > 0 ? $" (rank #{localStatistics.Value?.GlobalRank:N0})" : string.Empty);
// small image
presence.Assets.SmallImageKey = ruleset.Value.IsLegacyRuleset() ? $"mode_{ruleset.Value.OnlineID}" : "mode_custom";