Added playlist view.

This commit is contained in:
2025-03-27 01:37:32 -04:00
parent 97f6040122
commit b7ba8341a1
13 changed files with 302 additions and 49 deletions

View File

@@ -20,6 +20,8 @@ using System.Threading.Tasks;
using System.Timers;
using System.Windows.Input;
using Windows.ApplicationModel.DataTransfer;
using Windows.System;
using DispatcherQueue = Microsoft.UI.Dispatching.DispatcherQueue;
using Timer = System.Timers.Timer;
namespace Harmonia.WinUI.ViewModels;
@@ -31,6 +33,7 @@ public partial class PlaylistViewModel : ViewModelBase
private readonly IAudioFileScanner _audioFileScanner;
private readonly IAudioEngine _audioEngine;
private readonly IStorageProvider _storageProvider;
private readonly DispatcherQueue _dispatcherQueue;
private Timer? _filterTimer;
@@ -121,7 +124,8 @@ public partial class PlaylistViewModel : ViewModelBase
IAudioBitmapImageCache audioBitmapImageCache,
IAudioFileScanner audioFileScanner,
IAudioEngine audioEngine,
IStorageProvider storageProvider)
IStorageProvider storageProvider,
IPlaylistRepository playlistRepository)
{
_audioPlayer = audioPlayer;
_audioPlayer.PlaylistChanged += OnPlaylistChanged;
@@ -131,6 +135,23 @@ public partial class PlaylistViewModel : ViewModelBase
_audioFileScanner = audioFileScanner;
_audioEngine = audioEngine;
_storageProvider = storageProvider;
_dispatcherQueue = DispatcherQueue.GetForCurrentThread();
// Testing
Task.Run(() => PlayDemoSong(playlistRepository));
}
private async Task PlayDemoSong(IPlaylistRepository playlistRepository)
{
if (playlistRepository.Get().Count == 0)
{
playlistRepository.AddPlaylist();
}
Playlist playlist = playlistRepository.Get().First();
if (playlist.Songs.Count > 0)
await _audioPlayer.LoadAsync(playlist.Songs[0], PlaybackMode.LoadOnly);
}
private void OnPlaylistChanged(object? sender, EventArgs e)
@@ -161,10 +182,10 @@ public partial class PlaylistViewModel : ViewModelBase
switch (e.Action)
{
case PlaylistUpdateAction.Add:
DispatcherQueue.GetForCurrentThread().TryEnqueue(() => AddSongs(e.Songs, e.Index));
_dispatcherQueue.TryEnqueue(() => AddSongs(e.Songs, e.Index));
break;
case PlaylistUpdateAction.Remove:
DispatcherQueue.GetForCurrentThread().TryEnqueue(() => RemoveSongsFromCollection(e.Songs));
_dispatcherQueue.TryEnqueue(() => RemoveSongsFromCollection(e.Songs));
break;
}
}
@@ -232,7 +253,7 @@ public partial class PlaylistViewModel : ViewModelBase
_filterTimer.Dispose();
_filterTimer = null;
DispatcherQueue.GetForCurrentThread().TryEnqueue(UpdateFilteredSongs);
_dispatcherQueue.TryEnqueue(UpdateFilteredSongs);
}
private void UpdateFilteredSongs()
@@ -304,10 +325,12 @@ public partial class PlaylistViewModel : ViewModelBase
private FilePickerFileType GetAudioFileTypes()
{
string[] patterns = _audioEngine.SupportedFormats.Select(format => format.Replace("*", "")).ToArray();
return new()
{
Name = "Audio Files",
Patterns = [.. _audioEngine.SupportedFormats]
Patterns = patterns
};
}
@@ -316,7 +339,7 @@ public partial class PlaylistViewModel : ViewModelBase
if (Playlist == null)
return;
string path = await _storageProvider.GetPathAsync();
string? path = await _storageProvider.GetPathAsync();
if (string.IsNullOrWhiteSpace(path))
return;