diff --git a/MediaBrowser.MediaEncoding/Subtitles/AssParser.cs b/MediaBrowser.MediaEncoding/Subtitles/AssParser.cs
deleted file mode 100644
index 08ee5c72e5..0000000000
--- a/MediaBrowser.MediaEncoding/Subtitles/AssParser.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.Extensions.Logging;
-using Nikse.SubtitleEdit.Core.SubtitleFormats;
-
-namespace MediaBrowser.MediaEncoding.Subtitles
-{
- ///
- /// Advanced SubStation Alpha subtitle parser.
- ///
- public class AssParser : SubtitleEditParser
- {
- ///
- /// Initializes a new instance of the class.
- ///
- /// The logger.
- public AssParser(ILogger logger) : base(logger)
- {
- }
- }
-}
diff --git a/MediaBrowser.MediaEncoding/Subtitles/ISubtitleParser.cs b/MediaBrowser.MediaEncoding/Subtitles/ISubtitleParser.cs
index c0023ebf24..66d1776a48 100644
--- a/MediaBrowser.MediaEncoding/Subtitles/ISubtitleParser.cs
+++ b/MediaBrowser.MediaEncoding/Subtitles/ISubtitleParser.cs
@@ -1,7 +1,6 @@
#pragma warning disable CS1591
using System.IO;
-using System.Threading;
using MediaBrowser.Model.MediaInfo;
namespace MediaBrowser.MediaEncoding.Subtitles
@@ -12,8 +11,8 @@ namespace MediaBrowser.MediaEncoding.Subtitles
/// Parses the specified stream.
///
/// The stream.
- /// The cancellation token.
+ /// The file extension.
/// SubtitleTrackInfo.
- SubtitleTrackInfo Parse(Stream stream, CancellationToken cancellationToken);
+ SubtitleTrackInfo Parse(Stream stream, string fileExtension);
}
}
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SrtParser.cs b/MediaBrowser.MediaEncoding/Subtitles/SrtParser.cs
deleted file mode 100644
index 78d54ca51f..0000000000
--- a/MediaBrowser.MediaEncoding/Subtitles/SrtParser.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.Extensions.Logging;
-using Nikse.SubtitleEdit.Core.SubtitleFormats;
-
-namespace MediaBrowser.MediaEncoding.Subtitles
-{
- ///
- /// SubRip subtitle parser.
- ///
- public class SrtParser : SubtitleEditParser
- {
- ///
- /// Initializes a new instance of the class.
- ///
- /// The logger.
- public SrtParser(ILogger logger) : base(logger)
- {
- }
- }
-}
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs b/MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs
deleted file mode 100644
index 17c2ae40e0..0000000000
--- a/MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.Extensions.Logging;
-using Nikse.SubtitleEdit.Core.SubtitleFormats;
-
-namespace MediaBrowser.MediaEncoding.Subtitles
-{
- ///
- /// SubStation Alpha subtitle parser.
- ///
- public class SsaParser : SubtitleEditParser
- {
- ///
- /// Initializes a new instance of the class.
- ///
- /// The logger.
- public SsaParser(ILogger logger) : base(logger)
- {
- }
- }
-}
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs
index 52c1b64677..da57e6f2a1 100644
--- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs
+++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs
@@ -1,7 +1,7 @@
+using System;
using System.Globalization;
using System.IO;
using System.Linq;
-using System.Threading;
using Jellyfin.Extensions;
using MediaBrowser.Model.MediaInfo;
using Microsoft.Extensions.Logging;
@@ -14,31 +14,34 @@ namespace MediaBrowser.MediaEncoding.Subtitles
///
/// SubStation Alpha subtitle parser.
///
- /// The .
- public abstract class SubtitleEditParser : ISubtitleParser
- where T : SubtitleFormat, new()
+ public class SubtitleEditParser : ISubtitleParser
{
private readonly ILogger _logger;
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
/// The logger.
- protected SubtitleEditParser(ILogger logger)
+ public SubtitleEditParser(ILogger logger)
{
_logger = logger;
}
///
- public SubtitleTrackInfo Parse(Stream stream, CancellationToken cancellationToken)
+ public SubtitleTrackInfo Parse(Stream stream, string fileExtension)
{
- var subtitle = new Subtitle();
- var subRip = new T();
+ var subtitleFormat = SubtitleFormat.AllSubtitleFormats.FirstOrDefault(asf => asf.Extension.Equals(fileExtension, StringComparison.OrdinalIgnoreCase));
+ if (subtitleFormat == null)
+ {
+ throw new ArgumentException("Unsupported format: " + fileExtension);
+ }
+
var lines = stream.ReadAllLines().ToList();
- subRip.LoadSubtitle(subtitle, lines, "untitled");
- if (subRip.ErrorCount > 0)
+ var subtitle = new Subtitle();
+ subtitleFormat.LoadSubtitle(subtitle, lines, fileExtension);
+ if (subtitleFormat.ErrorCount > 0)
{
- _logger.LogError("{ErrorCount} errors encountered while parsing subtitle", subRip.ErrorCount);
+ _logger.LogError("{ErrorCount} errors encountered while parsing subtitle", subtitleFormat.ErrorCount);
}
var trackInfo = new SubtitleTrackInfo();
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
index 7091af734a..a0709d1e7b 100644
--- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
+++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
@@ -74,7 +74,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
try
{
var reader = GetReader(inputFormat);
- var trackInfo = reader.Parse(stream, cancellationToken);
+ var trackInfo = reader.Parse(stream, $".{inputFormat}");
FilterEvents(trackInfo, startTimeTicks, endTimeTicks, preserveOriginalTimestamps);
@@ -249,26 +249,8 @@ namespace MediaBrowser.MediaEncoding.Subtitles
private bool TryGetReader(string format, [NotNullWhen(true)] out ISubtitleParser? value)
{
- if (string.Equals(format, SubtitleFormat.SRT, StringComparison.OrdinalIgnoreCase))
- {
- value = new SrtParser(_logger);
- return true;
- }
-
- if (string.Equals(format, SubtitleFormat.SSA, StringComparison.OrdinalIgnoreCase))
- {
- value = new SsaParser(_logger);
- return true;
- }
-
- if (string.Equals(format, SubtitleFormat.ASS, StringComparison.OrdinalIgnoreCase))
- {
- value = new AssParser(_logger);
- return true;
- }
-
- value = null;
- return false;
+ value = new SubtitleEditParser(_logger);
+ return true;
}
private ISubtitleParser GetReader(string format)
diff --git a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs
index 3775555dec..395dfa309f 100644
--- a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs
+++ b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs
@@ -15,7 +15,7 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
{
using (var stream = File.OpenRead("Test Data/example.ass"))
{
- var parsed = new AssParser(new NullLogger()).Parse(stream, CancellationToken.None);
+ var parsed = new SubtitleEditParser(new NullLogger()).Parse(stream, ".ass");
Assert.Single(parsed.TrackEvents);
var trackEvent = parsed.TrackEvents[0];
diff --git a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs
index c07c9ea7db..e9745f17dc 100644
--- a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs
+++ b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs
@@ -15,7 +15,7 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
{
using (var stream = File.OpenRead("Test Data/example.srt"))
{
- var parsed = new SrtParser(new NullLogger()).Parse(stream, CancellationToken.None);
+ var parsed = new SubtitleEditParser(new NullLogger()).Parse(stream, ".srt");
Assert.Equal(2, parsed.TrackEvents.Count);
var trackEvent1 = parsed.TrackEvents[0];
@@ -37,7 +37,7 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
{
using (var stream = File.OpenRead("Test Data/example2.srt"))
{
- var parsed = new SrtParser(new NullLogger()).Parse(stream, CancellationToken.None);
+ var parsed = new SubtitleEditParser(new NullLogger()).Parse(stream, ".srt");
Assert.Equal(2, parsed.TrackEvents.Count);
var trackEvent1 = parsed.TrackEvents[0];
diff --git a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs
index 56649db8f8..bb6ed22eb2 100644
--- a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs
+++ b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs
@@ -13,7 +13,7 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
{
public class SsaParserTests
{
- private readonly SsaParser _parser = new SsaParser(new NullLogger());
+ private readonly SubtitleEditParser _parser = new SubtitleEditParser(new NullLogger());
[Theory]
[MemberData(nameof(Parse_MultipleDialogues_TestData))]
@@ -21,7 +21,7 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
{
using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(ssa)))
{
- SubtitleTrackInfo subtitleTrackInfo = _parser.Parse(stream, CancellationToken.None);
+ SubtitleTrackInfo subtitleTrackInfo = _parser.Parse(stream, ".ssa");
Assert.Equal(expectedSubtitleTrackEvents.Count, subtitleTrackInfo.TrackEvents.Count);
@@ -76,7 +76,7 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
{
using (var stream = File.OpenRead("Test Data/example.ssa"))
{
- var parsed = _parser.Parse(stream, CancellationToken.None);
+ var parsed = _parser.Parse(stream, ".ssa");
Assert.Single(parsed.TrackEvents);
var trackEvent = parsed.TrackEvents[0];