From 091fbd857e43ed50f62f0173f27a55ba09a780d1 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 2 Nov 2025 16:25:36 +0800 Subject: [PATCH] :bug: Fix spotify presence lease again --- .../Presences/SpotifyPresenceService.cs | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/DysonNetwork.Pass/Account/Presences/SpotifyPresenceService.cs b/DysonNetwork.Pass/Account/Presences/SpotifyPresenceService.cs index 4255232..08ad80c 100644 --- a/DysonNetwork.Pass/Account/Presences/SpotifyPresenceService.cs +++ b/DysonNetwork.Pass/Account/Presences/SpotifyPresenceService.cs @@ -23,9 +23,7 @@ public class SpotifyPresenceService( .ToListAsync(); foreach (var connection in userConnections) - { await UpdateSpotifyPresenceAsync(connection.Account); - } } /// @@ -59,7 +57,7 @@ public class SpotifyPresenceService( // Get currently playing track var currentlyPlaying = await spotify.Player.GetCurrentlyPlaying(new PlayerCurrentlyPlayingRequest()); - if (currentlyPlaying?.Item == null || currentlyPlaying.IsPlaying == false) + if (currentlyPlaying?.Item == null || !currentlyPlaying.IsPlaying) { // Nothing playing or paused, remove the presence await RemoveSpotifyPresenceAsync(account.Id); @@ -68,24 +66,31 @@ public class SpotifyPresenceService( var presenceActivity = ParseCurrentlyPlayingToPresenceActivity(account.Id, currentlyPlaying); - // Update or create the presence activity - await accountEventService.UpdateActivityByManualId( + // Try to update existing activity first + var updatedActivity = await accountEventService.UpdateActivityByManualId( "spotify", account.Id, - activity => - { - activity.Type = PresenceType.Music; - activity.Title = presenceActivity.Title; - activity.Subtitle = presenceActivity.Subtitle; - activity.Caption = presenceActivity.Caption; - activity.LargeImage = presenceActivity.LargeImage; - activity.SmallImage = presenceActivity.SmallImage; - activity.TitleUrl = presenceActivity.TitleUrl; - activity.SubtitleUrl = presenceActivity.SubtitleUrl; - activity.Meta = presenceActivity.Meta; - }, - 10 // 10 minute lease + UpdateActivityWithPresenceData, + 5 ); + + // If update failed (no existing activity), create a new one + if (updatedActivity == null) + await accountEventService.SetActivity(presenceActivity, 5); + + // Local function to avoid capturing external variables in lambda + void UpdateActivityWithPresenceData(SnPresenceActivity activity) + { + activity.Type = PresenceType.Music; + activity.Title = presenceActivity.Title; + activity.Subtitle = presenceActivity.Subtitle; + activity.Caption = presenceActivity.Caption; + activity.LargeImage = presenceActivity.LargeImage; + activity.SmallImage = presenceActivity.SmallImage; + activity.TitleUrl = presenceActivity.TitleUrl; + activity.SubtitleUrl = presenceActivity.SubtitleUrl; + activity.Meta = presenceActivity.Meta; + } } catch (Exception ex) {