Fixed PlaylistDetailViewModels's "Playlist" object not properly synchronizing (events, locking) to the playlist manager's current playlist at constructor time.

This commit is contained in:
2026-08-09 11:28:45 -04:00
parent afcae0761b
commit 2be865d445
5 changed files with 29 additions and 16 deletions

View File

@@ -2,8 +2,8 @@
namespace Harmonia.Core.Player; namespace Harmonia.Core.Player;
public class PlaylistChangedEventArgs(Playlist? oldPlaylist, Playlist? newPlaylist) : EventArgs //public class PlaylistChangedEventArgs(Playlist? oldPlaylist, Playlist? newPlaylist) : EventArgs
{ //{
public Playlist? OldPlaylist { get; } = oldPlaylist; // public Playlist? OldPlaylist { get; } = oldPlaylist;
public Playlist? NewPlaylist { get; } = newPlaylist; // public Playlist? NewPlaylist { get; } = newPlaylist;
} //}

View File

@@ -11,7 +11,7 @@ public interface IPlaylistManager
Playlist? FindPlaylistContaining(PlaylistSong playlistSong); Playlist? FindPlaylistContaining(PlaylistSong playlistSong);
Playlist? FindPlaylistContaining(string playlistSongUID); Playlist? FindPlaylistContaining(string playlistSongUID);
event EventHandler? CurrentPlaylistChanged; event EventHandler<PlaylistChangedEventArgs>? CurrentPlaylistChanged;
event EventHandler<PlaylistAddedEventArgs> PlaylistAdded; event EventHandler<PlaylistAddedEventArgs> PlaylistAdded;
event EventHandler<PlaylistRemovedEventArgs> PlaylistRemoved; event EventHandler<PlaylistRemovedEventArgs> PlaylistRemoved;
event EventHandler<PlaylistSaveFailedEventArgs>? PlaylistSaveFailed; event EventHandler<PlaylistSaveFailedEventArgs>? PlaylistSaveFailed;

View File

@@ -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;
}

View File

@@ -17,12 +17,14 @@ public class PlaylistManager : IPlaylistManager
} }
set set
{ {
Playlist? oldPlaylist = _currentPlaylist;
_currentPlaylist = value; _currentPlaylist = value;
CurrentPlaylistChanged?.Invoke(this, new());
CurrentPlaylistChanged?.Invoke(this, new(oldPlaylist, _currentPlaylist));
} }
} }
public event EventHandler? CurrentPlaylistChanged; public event EventHandler<PlaylistChangedEventArgs>? CurrentPlaylistChanged;
public event EventHandler<PlaylistAddedEventArgs>? PlaylistAdded; public event EventHandler<PlaylistAddedEventArgs>? PlaylistAdded;
public event EventHandler<PlaylistRemovedEventArgs>? PlaylistRemoved; public event EventHandler<PlaylistRemovedEventArgs>? PlaylistRemoved;
public event EventHandler<PlaylistSaveFailedEventArgs>? PlaylistSaveFailed; public event EventHandler<PlaylistSaveFailedEventArgs>? PlaylistSaveFailed;

View File

@@ -47,7 +47,16 @@ public partial class PlaylistDetailViewModel : ViewModelBase
public Playlist? Playlist public Playlist? Playlist
{ {
get => _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; private PlaylistSong? _playingSong;
@@ -273,14 +282,9 @@ public partial class PlaylistDetailViewModel : ViewModelBase
Playlist.MoveSong(oldIndex, newIndex); Playlist.MoveSong(oldIndex, newIndex);
} }
private void OnPlaylistChanged(object? sender, EventArgs e) private void OnPlaylistChanged(object? sender, PlaylistChangedEventArgs e)
{ {
Playlist?.PlaylistUpdated -= OnPlaylistUpdated; Playlist = e.NewPlaylist;
Playlist = _playlistManager.CurrentPlaylist;
Playlist?.PlaylistUpdated += OnPlaylistUpdated;
IsPlaylistLocked = Playlist?.IsLocked ?? false;
UpdateFilteredSongs(); UpdateFilteredSongs();
} }