From 969d5e9e19d0de78e81918af2beca1dfd5ecff48 Mon Sep 17 00:00:00 2001 From: real-zony Date: Thu, 7 Apr 2022 16:49:49 +0800 Subject: [PATCH] Fixed tag info provider bug. --- .../Infrastructure/Tag/DefaultTagLoader.cs | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs b/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs index 4c63892..d522f28 100644 --- a/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs +++ b/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs @@ -16,9 +16,11 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag { protected readonly IEnumerable TagInfoProviders; protected readonly IBlockWordDictionary BlockWordDictionary; - protected readonly ILogger _logger; + protected readonly ILogger Logger; protected ToolOptions Options; + + private readonly IEnumerable _sortedTagInfoProviders; public DefaultTagLoader(IEnumerable tagInfoProviders, IBlockWordDictionary blockWordDictionary, @@ -27,18 +29,15 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag { TagInfoProviders = tagInfoProviders; BlockWordDictionary = blockWordDictionary; - _logger = logger; + Logger = logger; Options = options.Value; + + _sortedTagInfoProviders = GetTagInfoProviders(); } public virtual async ValueTask LoadTagAsync(string filePath) { - if (!TagInfoProviders.Any()) - { - throw new ErrorCodeException(ErrorCodes.LoadTagInfoProviderError); - } - - foreach (var provider in TagInfoProviders) + foreach (var provider in _sortedTagInfoProviders) { var info = await provider.LoadAsync(filePath); if (info != null) @@ -48,11 +47,24 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag } } - _logger.LogWarning($"{filePath} 没有找到正确的标签信息,请考虑调整正则表达式。"); + Logger.LogWarning($"{filePath} 没有找到正确的标签信息,请考虑调整正则表达式。"); return null; } + private IEnumerable GetTagInfoProviders() + { + if (!TagInfoProviders.Any()) + { + throw new ErrorCodeException(ErrorCodes.LoadTagInfoProviderError); + } + + return Options.Provider.Tag.Plugin + .Where(x => x.Priority != -1) + .OrderBy(x => x.Priority) + .Join(TagInfoProviders,x=>x.Name,y=>y.Name,(x,y)=>y); + } + protected void HandleBlockWord(MusicInfo info) { if (Options.Provider.Tag.BlockWord.IsEnable)