Merge pull request #27810 from smoogipoo/fix-discord-rpc-crash

Fix possible crash due to race in DiscordRichPresence
This commit is contained in:
Dean Herbert 2024-04-08 23:37:44 +08:00 committed by GitHub
commit 6c5fad8638
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -36,8 +36,6 @@ namespace osu.Desktop
[Resolved]
private IBindable<RulesetInfo> ruleset { get; set; } = null!;
private IBindable<APIUser> user = null!;
[Resolved]
private IAPIProvider api { get; set; } = null!;
@ -50,9 +48,11 @@ namespace osu.Desktop
[Resolved]
private MultiplayerClient multiplayerClient { get; set; } = null!;
[Resolved]
private OsuConfigManager config { get; set; } = null!;
private readonly IBindable<UserStatus?> status = new Bindable<UserStatus?>();
private readonly IBindable<UserActivity> activity = new Bindable<UserActivity>();
private readonly Bindable<DiscordRichPresenceMode> privacyMode = new Bindable<DiscordRichPresenceMode>();
private readonly RichPresence presence = new RichPresence
@ -65,8 +65,10 @@ namespace osu.Desktop
},
};
private IBindable<APIUser>? user;
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
private void load()
{
client = new DiscordRpcClient(client_id)
{
@ -87,6 +89,13 @@ namespace osu.Desktop
client.OnJoin += onJoin;
}
client.Initialize();
}
protected override void LoadComplete()
{
base.LoadComplete();
config.BindWith(OsuSetting.DiscordRichPresence, privacyMode);
user = api.LocalUser.GetBoundCopy();
@ -104,8 +113,6 @@ namespace osu.Desktop
activity.BindValueChanged(_ => schedulePresenceUpdate());
privacyMode.BindValueChanged(_ => schedulePresenceUpdate());
multiplayerClient.RoomUpdated += onRoomUpdated;
client.Initialize();
}
private void onReady(object _, ReadyMessage __)
@ -146,6 +153,9 @@ namespace osu.Desktop
private void updatePresence(bool hideIdentifiableInformation)
{
if (user == null)
return;
// user activity
if (activity.Value != null)
{