using CommunityToolkit.Mvvm.ComponentModel; using Harmonia.Core.Playlists; using System; using System.Linq; namespace Harmonia.WinUI.ViewModels; public partial class PlaylistItemViewModel : ObservableObject { public Playlist Playlist { get; private set; } private string _name = string.Empty; public string Name { get { return _name; } set { SetProperty(ref _name, value); } } private string _summary = string.Empty; public string Summary { get { return _summary; } set { SetProperty(ref _summary, value); } } private bool _isLocked; public bool IsLocked { get { return _isLocked; } set { SetProperty(ref _isLocked, value); } } public PlaylistItemViewModel(Playlist playlist) { Playlist = playlist; Playlist.PlaylistUpdated += OnPlaylistUpdated; UpdateMetaData(); } public void Unsubscribe() { Playlist.PlaylistUpdated -= OnPlaylistUpdated; } private void OnPlaylistUpdated(object? sender, EventArgs e) { UpdateMetaData(); } private void UpdateMetaData() { Name = Playlist.Name ?? "Untitled Playlist"; IsLocked = Playlist.IsLocked; TimeSpan total = TimeSpan.FromSeconds(Playlist.Songs.Sum(s => s.Song.Length.TotalSeconds)); Summary = $"{Playlist.Songs.Count} songs / {total:h\\:mm\\:ss}"; } }