mirror of
https://github.com/real-zony/ZonyLrcToolsX.git
synced 2025-07-02 05:10:42 +00:00
feat: Support multiple downloaders.
支持多个下载器。
This commit is contained in:
parent
172453b83f
commit
6300acf4bf
@ -111,23 +111,38 @@ namespace ZonyLrcTools.Cli.Commands
|
|||||||
return result.ToImmutableList();
|
return result.ToImmutableList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IEnumerable<ILyricDownloader> GetLyricDownloaderList()
|
||||||
|
{
|
||||||
|
var downloader = _options.LyricDownloaderOptions
|
||||||
|
.Where(op => op.Priority != -1)
|
||||||
|
.OrderBy(op => op.Priority)
|
||||||
|
.Join(_lyricDownloaderList,
|
||||||
|
op => op.Name,
|
||||||
|
loader => loader.DownloaderName,
|
||||||
|
(op, loader) => loader);
|
||||||
|
|
||||||
|
return downloader;
|
||||||
|
}
|
||||||
|
|
||||||
#region > 歌词下载逻辑 <
|
#region > 歌词下载逻辑 <
|
||||||
|
|
||||||
private async ValueTask DownloadLyricFilesAsync(ImmutableList<MusicInfo> musicInfos)
|
private async ValueTask DownloadLyricFilesAsync(ImmutableList<MusicInfo> musicInfos)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("开始下载歌词文件数据...");
|
_logger.LogInformation("开始下载歌词文件数据...");
|
||||||
|
|
||||||
var downloader = _lyricDownloaderList.FirstOrDefault(d => d.DownloaderName == InternalLyricDownloaderNames.NetEase);
|
var downloaderList = GetLyricDownloaderList();
|
||||||
var warpTask = new WarpTask(ParallelNumber);
|
var warpTask = new WarpTask(ParallelNumber);
|
||||||
var warpTaskList = musicInfos.Select(info =>
|
var warpTaskList = musicInfos.Select(info =>
|
||||||
warpTask.RunAsync(() => Task.Run(async () => await DownloadLyricTaskLogicAsync(downloader, info))));
|
warpTask.RunAsync(() => Task.Run(async () => await DownloadLyricTaskLogicAsync(downloaderList, info))));
|
||||||
|
|
||||||
await Task.WhenAll(warpTaskList);
|
await Task.WhenAll(warpTaskList);
|
||||||
|
|
||||||
_logger.LogInformation($"歌词数据下载完成,成功: {musicInfos.Count} 失败{0}。");
|
_logger.LogInformation($"歌词数据下载完成,成功: {musicInfos.Count} 失败{0}。");
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task DownloadLyricTaskLogicAsync(ILyricDownloader downloader, MusicInfo info)
|
private async Task DownloadLyricTaskLogicAsync(IEnumerable<ILyricDownloader> downloaderList, MusicInfo info)
|
||||||
|
{
|
||||||
|
async Task<bool> InternalDownloadLogicAsync(ILyricDownloader downloader)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -135,12 +150,12 @@ namespace ZonyLrcTools.Cli.Commands
|
|||||||
var filePath = Path.Combine(Path.GetDirectoryName(info.FilePath)!, $"{Path.GetFileNameWithoutExtension(info.FilePath)}.lrc");
|
var filePath = Path.Combine(Path.GetDirectoryName(info.FilePath)!, $"{Path.GetFileNameWithoutExtension(info.FilePath)}.lrc");
|
||||||
if (File.Exists(filePath))
|
if (File.Exists(filePath))
|
||||||
{
|
{
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lyric.IsPruneMusic)
|
if (lyric.IsPruneMusic)
|
||||||
{
|
{
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
await using var stream = new FileStream(filePath, FileMode.Create);
|
await using var stream = new FileStream(filePath, FileMode.Create);
|
||||||
@ -150,8 +165,24 @@ namespace ZonyLrcTools.Cli.Commands
|
|||||||
}
|
}
|
||||||
catch (ErrorCodeException ex)
|
catch (ErrorCodeException ex)
|
||||||
{
|
{
|
||||||
|
if (ex.ErrorCode == ErrorCodes.NoMatchingSong)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
_logger.LogWarningInfo(ex);
|
_logger.LogWarningInfo(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var downloader in downloaderList)
|
||||||
|
{
|
||||||
|
if (await InternalDownloadLogicAsync(downloader))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
Loading…
x
Reference in New Issue
Block a user