feat: Completed the download lyrics feature.

This commit is contained in:
real-zony 2024-06-30 17:52:12 +08:00
parent 81bf6ebe3f
commit 3b0c55ac00

View File

@ -1,4 +1,5 @@
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Interactivity; using Avalonia.Interactivity;
@ -7,6 +8,7 @@ using DynamicData;
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using ZonyLrcTools.Common; using ZonyLrcTools.Common;
using ZonyLrcTools.Common.Lyrics;
using ZonyLrcTools.Desktop.Pages; using ZonyLrcTools.Desktop.Pages;
using ZonyLrcTools.Desktop.ViewModels; using ZonyLrcTools.Desktop.ViewModels;
@ -41,6 +43,34 @@ public partial class MainView : UserControl
_openFolderButton = this.FindControl<Button>("OpenFolderButton"); _openFolderButton = this.FindControl<Button>("OpenFolderButton");
if (_openFolderButton != null) _openFolderButton.Click += OnOpenFolderButtonClick; if (_openFolderButton != null) _openFolderButton.Click += OnOpenFolderButtonClick;
_downloadButton = this.FindControl<Button>("DownloadButton"); _downloadButton = this.FindControl<Button>("DownloadButton");
if (_downloadButton != null) _downloadButton.Click += OnDownloadButtonClick;
}
private async void OnDownloadButtonClick(object? sender, RoutedEventArgs e)
{
var downloader = App.Current.Services.GetRequiredService<ILyricsDownloader>();
if (DataContext is HomeViewModel vm)
{
var needDownloadMusicInfos = vm.Songs
.Where(x => x.DownloadStatus == DownloadStatus.NotStarted)
.Select(x => x.Info)
.ToList();
vm.DownloadProgress = 0;
vm.MaxProgress = needDownloadMusicInfos.Count;
await downloader.DownloadAsync(needDownloadMusicInfos, callback: info =>
{
var song = vm.Songs.FirstOrDefault(x => x.Info == info);
if (song != null)
{
song.DownloadStatus = DownloadStatus.Completed;
}
vm.DownloadProgress++;
return Task.CompletedTask;
});
}
} }
private async void OnOpenFolderButtonClick(object? sender, RoutedEventArgs e) private async void OnOpenFolderButtonClick(object? sender, RoutedEventArgs e)
@ -55,6 +85,7 @@ public partial class MainView : UserControl
SuggestedStartLocation = await storage.TryGetWellKnownFolderAsync(WellKnownFolder.Music) SuggestedStartLocation = await storage.TryGetWellKnownFolderAsync(WellKnownFolder.Music)
}; };
var folders = await storage.OpenFolderPickerAsync(options); var folders = await storage.OpenFolderPickerAsync(options);
if (folders.Count == 0) return;
var folderPath = folders[0].Path.LocalPath; var folderPath = folders[0].Path.LocalPath;
var musicInfos = await musicInfoLoader.LoadAsync(folderPath); var musicInfos = await musicInfoLoader.LoadAsync(folderPath);