Moved playlist commands to view model.

This commit is contained in:
2025-03-14 22:59:15 -04:00
parent bd9b30abbd
commit 7c70eb3814
9 changed files with 565 additions and 23 deletions

View File

@@ -2,15 +2,17 @@
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Media.Imaging;
using Avalonia.Platform.Storage;
using Avalonia.Threading;
using Harmonia.Core.Caching;
using Harmonia.Core.Imaging;
using Avalonia.VisualTree;
using Harmonia.Core.Engine;
using Harmonia.Core.Playlists;
using Harmonia.UI.ViewModels;
using Microsoft.Extensions.Caching.Memory;
using System;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Concurrent;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -19,19 +21,29 @@ namespace Harmonia.UI.Views;
public partial class PlaylistView : UserControl
{
private readonly PlaylistViewModel _viewModel;
private readonly IAudioEngine _audioEngine;
private readonly ConcurrentDictionary<int, CancellationTokenSource> _imageCancellationTokens = [];
private IStorageProvider? _storageProvider;
public PlaylistView()
{
InitializeComponent();
_viewModel = (PlaylistViewModel)DataContext!;
_audioEngine = App.ServiceProvider.GetRequiredService<IAudioEngine>();
}
private void ListBox_DoubleTapped(object? sender, TappedEventArgs e)
private void OnLoaded(object? sender, RoutedEventArgs e)
{
_storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
}
private async void ListBox_DoubleTapped(object? sender, TappedEventArgs e)
{
if (sender is ListBox listBox && listBox.SelectedItem is PlaylistSong playlistSong)
{
_viewModel.PlaySong(playlistSong);
await _viewModel.PlaySongAsync(playlistSong);
}
}
@@ -88,4 +100,49 @@ public partial class PlaylistView : UserControl
_imageCancellationTokens.TryGetValue(hashCode, out CancellationTokenSource? cancellationTokenSource);
cancellationTokenSource?.Cancel();
}
//private async void AddFiles_Click(object? sender, RoutedEventArgs e)
//{
// if (_storageProvider == null)
// return;
// FilePickerOpenOptions openOptions = new()
// {
// FileTypeFilter = [GetAudioFileTypes()],
// AllowMultiple = true
// };
// IReadOnlyList<IStorageFile> result = await _storageProvider.OpenFilePickerAsync(openOptions);
// string[] fileNames = [.. result.Select(file => file.TryGetLocalPath() ?? string.Empty)];
// CancellationToken cancellationToken = default;
// await _viewModel.AddFilesAsync(fileNames, cancellationToken);
//}
//private FilePickerFileType GetAudioFileTypes()
//{
// return new("Audo Files")
// {
// Patterns = [.. _audioEngine.SupportedFormats]
// };
//}
//private async void AddFolder_Click(object? sender, RoutedEventArgs e)
//{
// if (_storageProvider == null)
// return;
// FolderPickerOpenOptions options = new()
// {
// AllowMultiple = true
// };
// IReadOnlyList<IStorageFolder> folders = await _storageProvider.OpenFolderPickerAsync(options);
// if (folders.Count == 0)
// return;
// CancellationToken cancellationToken = default;
// await _viewModel.AddFolderAsync(folders[0].TryGetLocalPath() ?? string.Empty, cancellationToken);
//}
}