TxtLyricParser.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.IO;
  3. using Jellyfin.Extensions;
  4. using MediaBrowser.Controller.Lyrics;
  5. using MediaBrowser.Controller.Resolvers;
  6. namespace MediaBrowser.Providers.Lyric;
  7. /// <summary>
  8. /// TXT Lyric Parser.
  9. /// </summary>
  10. public class TxtLyricParser : ILyricParser
  11. {
  12. private static readonly string[] _supportedMediaTypes = { ".lrc", ".elrc", ".txt" };
  13. private static readonly string[] _lineBreakCharacters = { "\r\n", "\r", "\n" };
  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.Fifth;
  21. /// <inheritdoc />
  22. public LyricResponse? ParseLyrics(LyricFile lyrics)
  23. {
  24. if (!_supportedMediaTypes.Contains(Path.GetExtension(lyrics.Name.AsSpan()), StringComparison.OrdinalIgnoreCase))
  25. {
  26. return null;
  27. }
  28. string[] lyricTextLines = lyrics.Content.Split(_lineBreakCharacters, StringSplitOptions.None);
  29. LyricLine[] lyricList = new LyricLine[lyricTextLines.Length];
  30. for (int lyricLineIndex = 0; lyricLineIndex < lyricTextLines.Length; lyricLineIndex++)
  31. {
  32. lyricList[lyricLineIndex] = new LyricLine(lyricTextLines[lyricLineIndex]);
  33. }
  34. return new LyricResponse { Lyrics = lyricList };
  35. }
  36. }