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)