From c1dc6844110e084071b4863cc17b697df38db3a2 Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Wed, 31 Dec 2025 08:43:43 -0500 Subject: [PATCH] fix: scrobble timer is still running when music is paused --- .../BetterLyrics.WinUI3/App.xaml | 1 + .../Controls/StatsDashboardControl.xaml | 2 +- .../Converter/DoubleToDecimalConverter.cs | 33 +++++++++++++++++++ .../MediaSessionsService.cs | 12 +++++-- .../PlayHistoryService/PlayHistoryService.cs | 2 +- 5 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Converter/DoubleToDecimalConverter.cs diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml index 07e3bb5..daa7392 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml @@ -76,6 +76,7 @@ + diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/StatsDashboardControl.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/StatsDashboardControl.xaml index 0d3fcfa..20426bd 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/StatsDashboardControl.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/StatsDashboardControl.xaml @@ -71,7 +71,7 @@ + Text="{x:Bind ViewModel.TotalDuration.TotalHours, Mode=OneWay, Converter={StaticResource DoubleToDecimalConverter}}" /> false, }; } + + if (CurrentIsPlaying) + { + _scrobbleStopwatch.Start(); + } + else + { + _scrobbleStopwatch.Stop(); + } })); } @@ -349,7 +357,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService } } } - _scrobbleStopwatch.Restart(); + _scrobbleStopwatch.Reset(); CurrentSongInfo = new SongInfo { diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PlayHistoryService/PlayHistoryService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PlayHistoryService/PlayHistoryService.cs index ed99f36..5771a00 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PlayHistoryService/PlayHistoryService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PlayHistoryService/PlayHistoryService.cs @@ -99,7 +99,7 @@ namespace BetterLyrics.WinUI3.Services.PlayHistoryService var totalMs = await context.PlayHistory .Where(x => x.StartedAt >= start && x.StartedAt <= end) - .SumAsync(x => x.DurationPlayedMs); // 直接在数据库层面求和 + .SumAsync(x => Math.Min(x.DurationPlayedMs, x.TotalDurationMs)); // 防止超过歌曲本身时长 return TimeSpan.FromMilliseconds(totalMs); }