diff options
| author | Bond_009 <bond.009@outlook.com> | 2026-05-30 21:42:57 +0200 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2026-05-30 21:42:57 +0200 |
| commit | 1dd02b0e30938ea4874da700aad048cc7ada637c (patch) | |
| tree | b216d9b5e7cf22324d156292edade2b90b448abc | |
| parent | 2b6da4481574cf67db6fd1325e08f59015884459 (diff) | |
Add JsonWriter back
| -rw-r--r-- | MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs | 58 | ||||
| -rw-r--r-- | MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs | 9 |
2 files changed, 64 insertions, 3 deletions
diff --git a/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs new file mode 100644 index 0000000000..0e40181016 --- /dev/null +++ b/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using System.Text.Json; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.SubtitleFormats; + +namespace MediaBrowser.MediaEncoding.Subtitles; + +/// <summary> +/// JSON subtitle writer. +/// </summary> +public class JsonWriter : SubtitleFormat +{ + /// <inheritdoc /> + public override string Extension => ".json"; + + /// <inheritdoc /> + public override string Name => "JSON Jellyfin"; + + /// <inheritdoc /> + public override string ToText(Subtitle subtitle, string title) + { + using var ms = new MemoryStream(); + using (var writer = new Utf8JsonWriter(ms)) + { + var trackevents = subtitle.Paragraphs; + writer.WriteStartObject(); + writer.WriteStartArray("TrackEvents"); + + for (int i = 0; i < trackevents.Count; i++) + { + var current = trackevents[i]; + writer.WriteStartObject(); + + writer.WriteString("Id", current.Number.ToString(CultureInfo.InvariantCulture)); + writer.WriteString("Text", current.Text); + writer.WriteNumber("StartPositionTicks", current.StartTime.TimeSpan.Ticks); + writer.WriteNumber("EndPositionTicks", current.EndTime.TimeSpan.Ticks); + + writer.WriteEndObject(); + } + + writer.WriteEndArray(); + writer.WriteEndObject(); + + writer.Flush(); + } + + return Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Length); + } + + /// <inheritdoc /> + public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName) + => throw new NotImplementedException(); +} diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index 0192aa57f2..e8bc0f1ffb 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -269,10 +269,12 @@ namespace MediaBrowser.MediaEncoding.Subtitles if (string.Equals(format, "json", StringComparison.OrdinalIgnoreCase)) { - throw new NotImplementedException(); + value = new JsonWriter(); + return true; } - if (string.Equals(format, SubtitleFormat.SRT, StringComparison.OrdinalIgnoreCase) || string.Equals(format, SubtitleFormat.SUBRIP, StringComparison.OrdinalIgnoreCase)) + if (string.Equals(format, SubtitleFormat.SRT, StringComparison.OrdinalIgnoreCase) + || string.Equals(format, SubtitleFormat.SUBRIP, StringComparison.OrdinalIgnoreCase)) { value = new SubRip(); return true; @@ -284,7 +286,8 @@ namespace MediaBrowser.MediaEncoding.Subtitles return true; } - if (string.Equals(format, SubtitleFormat.VTT, StringComparison.OrdinalIgnoreCase) || string.Equals(format, SubtitleFormat.WEBVTT, StringComparison.OrdinalIgnoreCase)) + if (string.Equals(format, SubtitleFormat.VTT, StringComparison.OrdinalIgnoreCase) + || string.Equals(format, SubtitleFormat.WEBVTT, StringComparison.OrdinalIgnoreCase)) { value = new WebVTT(); return true; |
