TxtLyricProvider.cs 1.6 KB

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