diff --git a/Harmonia.Core/Player/PlaylistChangedEventArgs.cs b/Harmonia.Core/Player/PlaylistChangedEventArgs.cs index 5d6e822..bf3319e 100644 --- a/Harmonia.Core/Player/PlaylistChangedEventArgs.cs +++ b/Harmonia.Core/Player/PlaylistChangedEventArgs.cs @@ -2,8 +2,8 @@ namespace Harmonia.Core.Player; -public class PlaylistChangedEventArgs(Playlist? oldPlaylist, Playlist? newPlaylist) : EventArgs -{ - public Playlist? OldPlaylist { get; } = oldPlaylist; - public Playlist? NewPlaylist { get; } = newPlaylist; -} \ No newline at end of file +//public class PlaylistChangedEventArgs(Playlist? oldPlaylist, Playlist? newPlaylist) : EventArgs +//{ +// public Playlist? OldPlaylist { get; } = oldPlaylist; +// public Playlist? NewPlaylist { get; } = newPlaylist; +//} \ No newline at end of file diff --git a/Harmonia.Core/Playlists/IPlaylistManager.cs b/Harmonia.Core/Playlists/IPlaylistManager.cs index 74efa52..e6230f9 100644 --- a/Harmonia.Core/Playlists/IPlaylistManager.cs +++ b/Harmonia.Core/Playlists/IPlaylistManager.cs @@ -11,7 +11,7 @@ public interface IPlaylistManager Playlist? FindPlaylistContaining(PlaylistSong playlistSong); Playlist? FindPlaylistContaining(string playlistSongUID); - event EventHandler? CurrentPlaylistChanged; + event EventHandler? CurrentPlaylistChanged; event EventHandler PlaylistAdded; event EventHandler PlaylistRemoved; event EventHandler? PlaylistSaveFailed; diff --git a/Harmonia.Core/Playlists/PlaylistChangedEventArgs.cs b/Harmonia.Core/Playlists/PlaylistChangedEventArgs.cs new file mode 100644 index 0000000..fdc6e54 --- /dev/null +++ b/Harmonia.Core/Playlists/PlaylistChangedEventArgs.cs @@ -0,0 +1,7 @@ +namespace Harmonia.Core.Playlists; + +public class PlaylistChangedEventArgs(Playlist? oldPlaylist, Playlist? newPlaylist) : EventArgs +{ + public readonly Playlist? OldPlaylist = oldPlaylist; + public readonly Playlist? NewPlaylist = newPlaylist; +} \ No newline at end of file diff --git a/Harmonia.Core/Playlists/PlaylistManager.cs b/Harmonia.Core/Playlists/PlaylistManager.cs index 1f9b03c..d036b52 100644 --- a/Harmonia.Core/Playlists/PlaylistManager.cs +++ b/Harmonia.Core/Playlists/PlaylistManager.cs @@ -17,12 +17,14 @@ public class PlaylistManager : IPlaylistManager } set { + Playlist? oldPlaylist = _currentPlaylist; _currentPlaylist = value; - CurrentPlaylistChanged?.Invoke(this, new()); + + CurrentPlaylistChanged?.Invoke(this, new(oldPlaylist, _currentPlaylist)); } } - public event EventHandler? CurrentPlaylistChanged; + public event EventHandler? CurrentPlaylistChanged; public event EventHandler? PlaylistAdded; public event EventHandler? PlaylistRemoved; public event EventHandler? PlaylistSaveFailed; diff --git a/Harmonia.WinUI/ViewModels/PlaylistDetailViewModel.cs b/Harmonia.WinUI/ViewModels/PlaylistDetailViewModel.cs index c40dc1b..a4b12d8 100644 --- a/Harmonia.WinUI/ViewModels/PlaylistDetailViewModel.cs +++ b/Harmonia.WinUI/ViewModels/PlaylistDetailViewModel.cs @@ -47,7 +47,16 @@ public partial class PlaylistDetailViewModel : ViewModelBase public Playlist? Playlist { get => _playlist; - private set => SetProperty(ref _playlist, value); + private set + { + _playlist?.PlaylistUpdated -= OnPlaylistUpdated; + _playlist = _playlistManager.CurrentPlaylist; + _playlist?.PlaylistUpdated += OnPlaylistUpdated; + + IsPlaylistLocked = Playlist?.IsLocked ?? false; + + SetProperty(ref _playlist, value); + } } private PlaylistSong? _playingSong; @@ -273,14 +282,9 @@ public partial class PlaylistDetailViewModel : ViewModelBase Playlist.MoveSong(oldIndex, newIndex); } - private void OnPlaylistChanged(object? sender, EventArgs e) + private void OnPlaylistChanged(object? sender, PlaylistChangedEventArgs e) { - Playlist?.PlaylistUpdated -= OnPlaylistUpdated; - Playlist = _playlistManager.CurrentPlaylist; - Playlist?.PlaylistUpdated += OnPlaylistUpdated; - - IsPlaylistLocked = Playlist?.IsLocked ?? false; - + Playlist = e.NewPlaylist; UpdateFilteredSongs(); }