123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System;
- using System.IO;
- using System.Threading.Tasks;
- using Jellyfin.Extensions;
- using MediaBrowser.Controller.Entities;
- using MediaBrowser.Controller.Resolvers;
- namespace MediaBrowser.Providers.Lyric;
- /// <inheritdoc />
- public class DefaultLyricProvider : ILyricProvider
- {
- private static readonly string[] _lyricExtensions = { ".lrc", ".elrc", ".txt" };
- /// <inheritdoc />
- public string Name => "DefaultLyricProvider";
- /// <inheritdoc />
- public ResolverPriority Priority => ResolverPriority.First;
- /// <inheritdoc />
- public bool HasLyrics(BaseItem item)
- {
- var path = GetLyricsPath(item);
- return path is not null;
- }
- /// <inheritdoc />
- public async Task<LyricFile?> GetLyrics(BaseItem item)
- {
- var path = GetLyricsPath(item);
- if (path is not null)
- {
- var content = await File.ReadAllTextAsync(path).ConfigureAwait(false);
- if (!string.IsNullOrEmpty(content))
- {
- return new LyricFile(path, content);
- }
- }
- return null;
- }
- private string? GetLyricsPath(BaseItem item)
- {
- // Ensure the path to the item is not null
- string? itemDirectoryPath = Path.GetDirectoryName(item.Path);
- if (itemDirectoryPath is null)
- {
- return null;
- }
- // Ensure the directory path exists
- if (!Directory.Exists(itemDirectoryPath))
- {
- return null;
- }
- foreach (var lyricFilePath in Directory.GetFiles(itemDirectoryPath, $"{Path.GetFileNameWithoutExtension(item.Path)}.*"))
- {
- if (_lyricExtensions.Contains(Path.GetExtension(lyricFilePath.AsSpan()), StringComparison.OrdinalIgnoreCase))
- {
- return lyricFilePath;
- }
- }
- return null;
- }
- }
|