TxtLyricParser.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System;
  2. using System.IO;
  3. using Jellyfin.Extensions;
  4. using MediaBrowser.Controller.Lyrics;
  5. using MediaBrowser.Controller.Resolvers;
  6. using MediaBrowser.Model.Lyrics;
  7. namespace MediaBrowser.Providers.Lyric;
  8. /// <summary>
  9. /// TXT Lyric Parser.
  10. /// </summary>
  11. public class TxtLyricParser : ILyricParser
  12. {
  13. private static readonly string[] _supportedMediaTypes = [".lrc", ".elrc", ".txt"];
  14. private static readonly string[] _lineBreakCharacters = ["\r\n", "\r", "\n"];
  15. /// <inheritdoc />
  16. public string Name => "TxtLyricProvider";
  17. /// <summary>
  18. /// Gets the priority.
  19. /// </summary>
  20. /// <value>The priority.</value>
  21. public ResolverPriority Priority => ResolverPriority.Fifth;
  22. /// <inheritdoc />
  23. public LyricDto? ParseLyrics(LyricFile lyrics)
  24. {
  25. if (!_supportedMediaTypes.Contains(Path.GetExtension(lyrics.Name.AsSpan()), StringComparison.OrdinalIgnoreCase))
  26. {
  27. return null;
  28. }
  29. string[] lyricTextLines = lyrics.Content.Split(_lineBreakCharacters, StringSplitOptions.None);
  30. LyricLine[] lyricList = new LyricLine[lyricTextLines.Length];
  31. for (int lyricLineIndex = 0; lyricLineIndex < lyricTextLines.Length; lyricLineIndex++)
  32. {
  33. lyricList[lyricLineIndex] = new LyricLine(lyricTextLines[lyricLineIndex].Trim());
  34. }
  35. return new LyricDto { Lyrics = lyricList };
  36. }
  37. }