feat: When downloading lyrics, a callback was added to facilitate UI updates.

This commit is contained in:
real-zony 2024-06-30 17:50:26 +08:00
parent 7fa595a71b
commit d00d735bf0
2 changed files with 10 additions and 6 deletions

View File

@ -10,9 +10,11 @@ public interface ILyricsDownloader
/// </summary> /// </summary>
/// <param name="needDownloadMusicInfos">需要下载的歌词信息。</param> /// <param name="needDownloadMusicInfos">需要下载的歌词信息。</param>
/// <param name="parallelCount">下载线程/并发量。</param> /// <param name="parallelCount">下载线程/并发量。</param>
/// <param name="callback">任务完成之后的回调方法。</param>
/// <param name="cancellationToken">任务取消标记。</param> /// <param name="cancellationToken">任务取消标记。</param>
Task DownloadAsync(List<MusicInfo> needDownloadMusicInfos, Task DownloadAsync(List<MusicInfo> needDownloadMusicInfos,
int parallelCount = 2, int parallelCount = 1,
Func<MusicInfo, Task>? callback = null,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
/// <summary> /// <summary>

View File

@ -10,6 +10,7 @@ using ZonyLrcTools.Common.Infrastructure.Threading;
namespace ZonyLrcTools.Common.Lyrics; namespace ZonyLrcTools.Common.Lyrics;
/// <inheritdoc cref="ZonyLrcTools.Common.Lyrics.ILyricsDownloader" />
public class LyricsDownloader : ILyricsDownloader, ISingletonDependency public class LyricsDownloader : ILyricsDownloader, ISingletonDependency
{ {
private readonly IEnumerable<ILyricsProvider> _lyricsProviders; private readonly IEnumerable<ILyricsProvider> _lyricsProviders;
@ -38,6 +39,7 @@ public class LyricsDownloader : ILyricsDownloader, ISingletonDependency
public async Task DownloadAsync(List<MusicInfo> needDownloadMusicInfos, public async Task DownloadAsync(List<MusicInfo> needDownloadMusicInfos,
int parallelCount = 1, int parallelCount = 1,
Func<MusicInfo, Task>? callback = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
await _logger.InfoAsync("开始下载歌词文件数据..."); await _logger.InfoAsync("开始下载歌词文件数据...");
@ -57,12 +59,12 @@ public class LyricsDownloader : ILyricsDownloader, ISingletonDependency
{ {
await DownloadAndWriteLyricsAsync(lyricsProvider, info); await DownloadAndWriteLyricsAsync(lyricsProvider, info);
if (info.IsSuccessful) if (!info.IsSuccessful) continue;
{
_logger.LogSuccessful(info); _logger.LogSuccessful(info);
return; break;
}
} }
if (callback != null) await callback(info);
}, cancellationToken), cancellationToken)); }, cancellationToken), cancellationToken));
await Task.WhenAll(downloadTasks); await Task.WhenAll(downloadTasks);