TxtLyricProvider.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using MediaBrowser.Controller.Entities;
  6. using MediaBrowser.Controller.Lyrics;
  7. using MediaBrowser.Controller.Resolvers;
  8. namespace MediaBrowser.Providers.Lyric;
  9. /// <summary>
  10. /// TXT Lyric Provider.
  11. /// </summary>
  12. public class TxtLyricProvider : ILyricProvider
  13. {
  14. /// <inheritdoc />
  15. public string Name => "TxtLyricProvider";
  16. /// <summary>
  17. /// Gets the priority.
  18. /// </summary>
  19. /// <value>The priority.</value>
  20. public ResolverPriority Priority => ResolverPriority.Second;
  21. /// <inheritdoc />
  22. public IReadOnlyCollection<string> SupportedMediaTypes { get; } = new[] { "lrc", "elrc", "txt" };
  23. /// <summary>
  24. /// Opens lyric file for the requested item, and processes it for API return.
  25. /// </summary>
  26. /// <param name="item">The item to to process.</param>
  27. /// <returns>If provider can determine lyrics, returns a <see cref="LyricResponse"/>; otherwise, null.</returns>
  28. public async Task<LyricResponse?> GetLyrics(BaseItem item)
  29. {
  30. string? lyricFilePath = this.GetLyricFilePath(item.Path);
  31. if (string.IsNullOrEmpty(lyricFilePath))
  32. {
  33. return null;
  34. }
  35. string[] lyricTextLines = await File.ReadAllLinesAsync(lyricFilePath).ConfigureAwait(false);
  36. if (lyricTextLines.Length == 0)
  37. {
  38. return null;
  39. }
  40. LyricLine[] lyricList = new LyricLine[lyricTextLines.Length];
  41. for (int lyricLineIndex = 0; lyricLineIndex < lyricTextLines.Length; lyricLineIndex++)
  42. {
  43. lyricList[lyricLineIndex] = new LyricLine(lyricTextLines[lyricLineIndex]);
  44. }
  45. return new LyricResponse
  46. {
  47. Lyrics = lyricList
  48. };
  49. }
  50. }