Updated certain events to have more concrete event arguments. Added try-catch block around playlist save logic. Added DispatchQueue where necessary.

This commit is contained in:
2026-08-05 22:57:28 -04:00
parent 1d45826c38
commit 75f820ed7b
11 changed files with 71 additions and 16 deletions

View File

@@ -229,9 +229,9 @@ public partial class PlayerViewModel : ViewModelBase
#region Event Handlers
private void OnPlayingSongChanged(object? sender, EventArgs e)
private void OnPlayingSongChanged(object? sender, PlayingSongChangedEventArgs e)
{
Song = _audioPlayer.PlayingSong?.Song;
Song = e.NewSong?.Song;
Task.Run(UpdateImage);
}

View File

@@ -52,9 +52,9 @@ public partial class PlayingSongViewModel : ViewModelBase
_dispatcherQueue = DispatcherQueue.GetForCurrentThread();
}
private void OnAudioPlayerPlayingSongChanged(object? sender, EventArgs e)
private void OnAudioPlayerPlayingSongChanged(object? sender, PlayingSongChangedEventArgs e)
{
Song = _audioPlayer.PlayingSong?.Song;
Song = e.NewSong?.Song;
Task.Run(UpdateImage);
}

View File

@@ -274,7 +274,6 @@ public partial class PlaylistDetailViewModel : ViewModelBase
private void OnPlaylistChanged(object? sender, EventArgs e)
{
Playlist?.PlaylistUpdated -= OnPlaylistUpdated;
//Playlist = _audioPlayer.Playlist;
Playlist = _playlistManager.CurrentPlaylist;
Playlist?.PlaylistUpdated += OnPlaylistUpdated;
@@ -318,9 +317,9 @@ public partial class PlaylistDetailViewModel : ViewModelBase
UpdateFilteredSongs();
}
private void OnPlayingSongChanged(object? sender, EventArgs e)
private void OnPlayingSongChanged(object? sender, PlayingSongChangedEventArgs e)
{
PlayingSong = _audioPlayer.PlayingSong;
PlayingSong = e.NewSong;
if (_isUserInitiatingSongChange)
{

View File

@@ -1,5 +1,6 @@
using Harmonia.Core.Player;
using Harmonia.Core.Playlists;
using Microsoft.UI.Dispatching;
using System;
using System.Collections.ObjectModel;
using System.Linq;
@@ -10,6 +11,7 @@ public partial class PlaylistsViewModel : ViewModelBase
{
private readonly IPlaylistManager _playlistManager;
private readonly IAudioPlayer _audioPlayer;
private readonly DispatcherQueue _dispatcherQueue;
private ObservableCollection<PlaylistItemViewModel> _playlists = [];
public ObservableCollection<PlaylistItemViewModel> Playlists
@@ -63,6 +65,8 @@ public partial class PlaylistsViewModel : ViewModelBase
_audioPlayer = audioPlayer;
_audioPlayer.PlayingSongChanged += OnPlayingSongChanged;
_dispatcherQueue = DispatcherQueue.GetForCurrentThread();
_playlists = new ObservableCollection<PlaylistItemViewModel>(_playlistManager.Playlists.Select(p => new PlaylistItemViewModel(p)));
_selectedPlaylist = _playlists.FirstOrDefault(pv => pv.Playlist == _playlistManager.CurrentPlaylist);
}
@@ -88,7 +92,12 @@ public partial class PlaylistsViewModel : ViewModelBase
}
}
private void OnPlayingSongChanged(object? sender, EventArgs e)
private void OnPlayingSongChanged(object? sender, PlayingSongChangedEventArgs e)
{
_dispatcherQueue.TryEnqueue(UpdateActivePlaylist);
}
private void UpdateActivePlaylist()
{
ActivePlaylist = Playlists.FirstOrDefault(pv => pv.Playlist == _audioPlayer.Playlist);
}