protected override async Task <int> OnExecuteAsync(CommandLineApplication app) { if (Directory.Exists(FilePath)) { _logger.LogInformation("开始扫描文件夹,请稍等..."); var files = (await _fileScanner.ScanAsync(FilePath, new[] { "*.ncm" })) .SelectMany(f => f.FilePaths) .ToList(); _logger.LogInformation($"扫描完成,共 {files.Count} 个文件,准备转换。"); var wrapTask = new WarpTask(4); var tasks = files.Select(path => wrapTask.RunAsync(() => Convert(path))); await Task.WhenAll(tasks); } else if (File.Exists(FilePath)) { await Convert(FilePath); } _logger.LogInformation("所有文件已经转换完成..."); return(0); }
private async ValueTask DownloadLyricFilesAsync(ImmutableList <MusicInfo> musicInfos) { _logger.LogInformation("开始下载歌词文件数据..."); var downloaderList = GetLyricDownloaderList(); var warpTask = new WarpTask(ParallelNumber); var warpTaskList = musicInfos.Select(info => warpTask.RunAsync(() => Task.Run(async() => await DownloadLyricTaskLogicAsync(downloaderList, info)))); await Task.WhenAll(warpTaskList); _logger.LogInformation($"歌词数据下载完成,成功: {musicInfos.Count} 失败{0}。"); }
private async ValueTask DownloadAlbumAsync(ImmutableList <MusicInfo> musicInfos) { _logger.LogInformation("开始下载专辑图像数据..."); var downloader = _albumDownloaderList.FirstOrDefault(d => d.DownloaderName == InternalAlbumDownloaderNames.NetEase); var warpTask = new WarpTask(ParallelNumber); var warpTaskList = musicInfos.Select(info => warpTask.RunAsync(() => Task.Run(async() => await DownloadAlbumTaskLogicAsync(downloader, info)))); await Task.WhenAll(warpTaskList); _logger.LogInformation($"专辑数据下载完成,成功: {musicInfos.Count(m => m.IsSuccessful)} 失败{musicInfos.Count(m => !m.IsSuccessful)}。"); }
private async Task <ImmutableList <MusicInfo> > LoadMusicInfoAsync(IReadOnlyCollection <string> files) { _logger.LogInformation("开始加载音乐文件的标签信息..."); var warpTask = new WarpTask(ParallelNumber); var warpTaskList = files.Select(file => warpTask.RunAsync(() => Task.Run(async() => await _tagLoader.LoadTagAsync(file)))); var result = (await Task.WhenAll(warpTaskList)) .Where(m => m != null) .Where(m => !string.IsNullOrEmpty(m.Name) || !string.IsNullOrEmpty(m.Artist)); _logger.LogInformation($"已成功加载 {files.Count} 个音乐文件的标签信息。"); return(result.ToImmutableList()); }