From 895cfdc5f748b4a67cd82528479e5929765452e8 Mon Sep 17 00:00:00 2001 From: Brian Bicknell Date: Sun, 9 Aug 2026 11:51:44 -0400 Subject: [PATCH] Fixed issue with maintaining audio player "pause" state between application restarts. --- Harmonia.WinUI/Session/SessionRestorer.cs | 15 ++---------- Harmonia.WinUI/Session/SessionTracker.cs | 29 +++++++++++++---------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/Harmonia.WinUI/Session/SessionRestorer.cs b/Harmonia.WinUI/Session/SessionRestorer.cs index 6101ec4..7620f13 100644 --- a/Harmonia.WinUI/Session/SessionRestorer.cs +++ b/Harmonia.WinUI/Session/SessionRestorer.cs @@ -1,7 +1,6 @@ using Harmonia.Core.Engine; using Harmonia.Core.Player; using Harmonia.Core.Playlists; -using System; using System.Linq; using System.Threading.Tasks; @@ -55,17 +54,7 @@ public class SessionRestorer( if (audioPlayerState.Position > 0 && audioPlayerState.Position <= playlistSong.Song.Length.TotalSeconds) audioPlayer.Position = audioPlayerState.Position; - switch (audioPlayerState.PlaybackState) - { - case AudioPlaybackState.Playing: - audioPlayer.Play(); - break; - case AudioPlaybackState.Paused: - audioPlayer.Pause(); - break; - case AudioPlaybackState.Stopped: - audioPlayer.Stop(); - break; - } + if (audioPlayerState.PlaybackState == AudioPlaybackState.Playing) + audioPlayer.Play(); } } \ No newline at end of file diff --git a/Harmonia.WinUI/Session/SessionTracker.cs b/Harmonia.WinUI/Session/SessionTracker.cs index cbaf3ba..9686093 100644 --- a/Harmonia.WinUI/Session/SessionTracker.cs +++ b/Harmonia.WinUI/Session/SessionTracker.cs @@ -1,3 +1,4 @@ +using Harmonia.Core.Engine; using Harmonia.Core.Player; using Harmonia.Core.Playlists; using System; @@ -13,7 +14,6 @@ public class SessionTracker( { playlistManager.CurrentPlaylistChanged += OnCurrentPlaylistChanged; audioPlayer.PlayingSongChanged += OnPlayingSongChanged; - audioPlayer.PropertyChanged += OnAudioPlayerPropertyChanged; } private void OnCurrentPlaylistChanged(object? sender, EventArgs e) @@ -28,18 +28,21 @@ public class SessionTracker( audioPlayerState.PlaylistSongUID = e.NewSong?.UID; } - private void OnAudioPlayerPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) - { - switch (e.PropertyName) - { - case nameof(IAudioPlayer.State): - sessionService.Session.Player.PlaybackState = audioPlayer.State; - break; - } - } - public void Capture() { - sessionService.Session.Player.Position = audioPlayer.Position; + AudioPlayerState audioPlayerState = sessionService.Session.Player; + + audioPlayerState.Position = audioPlayer.Position; + audioPlayerState.PlaybackState = GetSemanticPlaybackState(); } -} + + private AudioPlaybackState GetSemanticPlaybackState() + { + if (audioPlayer.PlayingSong is null) + return AudioPlaybackState.Stopped; + + return audioPlayer.State == AudioPlaybackState.Playing + ? AudioPlaybackState.Playing + : AudioPlaybackState.Paused; + } +} \ No newline at end of file