< Summary - Jellyfin

Information
Class: MediaBrowser.MediaEncoding.Subtitles.AssWriter
Assembly: MediaBrowser.MediaEncoding
File(s): /srv/git/jellyfin/MediaBrowser.MediaEncoding/Subtitles/AssWriter.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 26
Coverable lines: 26
Total lines: 57
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Write(...)0%620%

File(s)

/srv/git/jellyfin/MediaBrowser.MediaEncoding/Subtitles/AssWriter.cs

#LineLine coverage
 1using System;
 2using System.Globalization;
 3using System.IO;
 4using System.Text;
 5using System.Text.RegularExpressions;
 6using System.Threading;
 7using MediaBrowser.Model.MediaInfo;
 8
 9namespace MediaBrowser.MediaEncoding.Subtitles
 10{
 11    /// <summary>
 12    /// ASS subtitle writer.
 13    /// </summary>
 14    public partial class AssWriter : ISubtitleWriter
 15    {
 16        [GeneratedRegex(@"\n", RegexOptions.IgnoreCase)]
 17        private static partial Regex NewLineRegex();
 18
 19        /// <inheritdoc />
 20        public void Write(SubtitleTrackInfo info, Stream stream, CancellationToken cancellationToken)
 21        {
 022            using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
 23            {
 024                var trackEvents = info.TrackEvents;
 025                var timeFormat = @"hh\:mm\:ss\.ff";
 26
 27                // Write ASS header
 028                writer.WriteLine("[Script Info]");
 029                writer.WriteLine("Title: Jellyfin transcoded ASS subtitle");
 030                writer.WriteLine("ScriptType: v4.00+");
 031                writer.WriteLine();
 032                writer.WriteLine("[V4+ Styles]");
 033                writer.WriteLine("Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackC
 034                writer.WriteLine("Style: Default,Arial,20,&H00FFFFFF,&H00FFFFFF,&H19333333,&H910E0807,0,0,0,0,100,100,0,
 035                writer.WriteLine();
 036                writer.WriteLine("[Events]");
 037                writer.WriteLine("Format: Layer, Start, End, Style, Text");
 38
 039                for (int i = 0; i < trackEvents.Count; i++)
 40                {
 041                    cancellationToken.ThrowIfCancellationRequested();
 42
 043                    var trackEvent = trackEvents[i];
 044                    var startTime = TimeSpan.FromTicks(trackEvent.StartPositionTicks).ToString(timeFormat, CultureInfo.I
 045                    var endTime = TimeSpan.FromTicks(trackEvent.EndPositionTicks).ToString(timeFormat, CultureInfo.Invar
 046                    var text = NewLineRegex().Replace(trackEvent.Text, "\\n");
 47
 048                    writer.WriteLine(
 049                        "Dialogue: 0,{0},{1},Default,{2}",
 050                        startTime,
 051                        endTime,
 052                        text);
 53                }
 054            }
 055        }
 56    }
 57}