< Summary - Jellyfin

Information
Class: MediaBrowser.MediaEncoding.Subtitles.VttWriter
Assembly: MediaBrowser.MediaEncoding
File(s): /srv/git/jellyfin/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 17
Coverable lines: 17
Total lines: 53
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
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%2040%

File(s)

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

#LineLine coverage
 1using System;
 2using System.IO;
 3using System.Text;
 4using System.Text.RegularExpressions;
 5using System.Threading;
 6using MediaBrowser.Model.MediaInfo;
 7
 8namespace MediaBrowser.MediaEncoding.Subtitles
 9{
 10    /// <summary>
 11    /// Subtitle writer for the WebVTT format.
 12    /// </summary>
 13    public partial class VttWriter : ISubtitleWriter
 14    {
 15        [GeneratedRegex(@"\\n", RegexOptions.IgnoreCase)]
 16        private static partial Regex NewlineEscapeRegex();
 17
 18        /// <inheritdoc />
 19        public void Write(SubtitleTrackInfo info, Stream stream, CancellationToken cancellationToken)
 20        {
 021            using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
 22            {
 023                writer.WriteLine("WEBVTT");
 024                writer.WriteLine();
 025                writer.WriteLine("Region: id:subtitle width:80% lines:3 regionanchor:50%,100% viewportanchor:50%,90%");
 026                writer.WriteLine();
 027                foreach (var trackEvent in info.TrackEvents)
 28                {
 029                    cancellationToken.ThrowIfCancellationRequested();
 30
 031                    var startTime = TimeSpan.FromTicks(trackEvent.StartPositionTicks);
 032                    var endTime = TimeSpan.FromTicks(trackEvent.EndPositionTicks);
 33
 34                    // make sure the start and end times are different and sequential
 035                    if (endTime.TotalMilliseconds <= startTime.TotalMilliseconds)
 36                    {
 037                        endTime = startTime.Add(TimeSpan.FromMilliseconds(1));
 38                    }
 39
 040                    writer.WriteLine(@"{0:hh\:mm\:ss\.fff} --> {1:hh\:mm\:ss\.fff} region:subtitle line:90%", startTime,
 41
 042                    var text = trackEvent.Text;
 43
 44                    // TODO: Not sure how to handle these
 045                    text = NewlineEscapeRegex().Replace(text, " ");
 46
 047                    writer.WriteLine(text);
 048                    writer.WriteLine();
 49                }
 50            }
 051        }
 52    }
 53}