Show total songs and total duration for each playlist.

This commit is contained in:
2026-07-31 09:04:14 -04:00
parent ea5b428a65
commit 16b87d255e
3 changed files with 93 additions and 18 deletions

View File

@@ -1,6 +1,8 @@
using Harmonia.Core.Playlists;
using CommunityToolkit.Mvvm.ComponentModel;
using Harmonia.Core.Playlists;
using System;
using System.Collections.ObjectModel;
using System.Linq;
namespace Harmonia.WinUI.ViewModels;
@@ -8,8 +10,8 @@ public partial class PlaylistsViewModel : ViewModelBase
{
private readonly IPlaylistManager _playlistManager;
private ObservableCollection<Playlist> _playlists = [];
public ObservableCollection<Playlist> Playlists
private ObservableCollection<PlaylistItemViewModel> _playlists = [];
public ObservableCollection<PlaylistItemViewModel> Playlists
{
get
{
@@ -21,8 +23,8 @@ public partial class PlaylistsViewModel : ViewModelBase
}
}
private Playlist? _selectedPlaylist = null;
public Playlist? SelectedPlaylist
private PlaylistItemViewModel? _selectedPlaylist = null;
public PlaylistItemViewModel? SelectedPlaylist
{
get
{
@@ -32,7 +34,7 @@ public partial class PlaylistsViewModel : ViewModelBase
{
if (SetProperty(ref _selectedPlaylist, value))
{
_playlistManager.CurrentPlaylist = value;
_playlistManager.CurrentPlaylist = value?.Playlist;
}
}
}
@@ -44,22 +46,28 @@ public partial class PlaylistsViewModel : ViewModelBase
_playlistManager.PlaylistRemoved += OnPlaylistRemoved;
_playlistManager.CurrentPlaylistChanged += OnCurrentPlaylistChanged;
_playlists = new(_playlistManager.Playlists);
_selectedPlaylist = _playlistManager.CurrentPlaylist;
_playlists = new ObservableCollection<PlaylistItemViewModel>(_playlistManager.Playlists.Select(p => new PlaylistItemViewModel(p)));
_selectedPlaylist = _playlists.FirstOrDefault(pv => pv.Playlist == _playlistManager.CurrentPlaylist);
}
private void OnCurrentPlaylistChanged(object? sender, EventArgs e)
{
SelectedPlaylist = _playlistManager.CurrentPlaylist;
SelectedPlaylist = _playlists.FirstOrDefault(pv => pv.Playlist == _playlistManager.CurrentPlaylist);
}
private void OnPlaylistAdded(object? sender, PlaylistAddedEventArgs e)
{
Playlists.Add(e.Playlist);
Playlists.Add(new PlaylistItemViewModel(e.Playlist));
}
private void OnPlaylistRemoved(object? sender, PlaylistRemovedEventArgs e)
{
Playlists.Remove(e.Playlist);
var playlistView = Playlists.FirstOrDefault(pv => pv.Playlist == e.Playlist);
if (playlistView != null)
{
playlistView.Unsubscribe();
Playlists.Remove(playlistView);
}
}
}