aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Lyric/TxtLyricParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Lyric/TxtLyricParser.cs')
-rw-r--r--MediaBrowser.Providers/Lyric/TxtLyricParser.cs44
1 files changed, 44 insertions, 0 deletions
diff --git a/MediaBrowser.Providers/Lyric/TxtLyricParser.cs b/MediaBrowser.Providers/Lyric/TxtLyricParser.cs
new file mode 100644
index 000000000..706f13dbc
--- /dev/null
+++ b/MediaBrowser.Providers/Lyric/TxtLyricParser.cs
@@ -0,0 +1,44 @@
+using System;
+using System.IO;
+using Jellyfin.Extensions;
+using MediaBrowser.Controller.Lyrics;
+using MediaBrowser.Controller.Resolvers;
+
+namespace MediaBrowser.Providers.Lyric;
+
+/// <summary>
+/// TXT Lyric Parser.
+/// </summary>
+public class TxtLyricParser : ILyricParser
+{
+ private static readonly string[] _supportedMediaTypes = { ".lrc", ".elrc", ".txt" };
+ private static readonly string[] _lineBreakCharacters = { "\r\n", "\r", "\n" };
+
+ /// <inheritdoc />
+ public string Name => "TxtLyricProvider";
+
+ /// <summary>
+ /// Gets the priority.
+ /// </summary>
+ /// <value>The priority.</value>
+ public ResolverPriority Priority => ResolverPriority.Fifth;
+
+ /// <inheritdoc />
+ public LyricResponse? ParseLyrics(LyricFile lyrics)
+ {
+ if (!_supportedMediaTypes.Contains(Path.GetExtension(lyrics.Name.AsSpan()), StringComparison.OrdinalIgnoreCase))
+ {
+ return null;
+ }
+
+ string[] lyricTextLines = lyrics.Content.Split(_lineBreakCharacters, StringSplitOptions.None);
+ LyricLine[] lyricList = new LyricLine[lyricTextLines.Length];
+
+ for (int lyricLineIndex = 0; lyricLineIndex < lyricTextLines.Length; lyricLineIndex++)
+ {
+ lyricList[lyricLineIndex] = new LyricLine(lyricTextLines[lyricLineIndex]);
+ }
+
+ return new LyricResponse { Lyrics = lyricList };
+ }
+}