diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index a233fe912..cf0138a29 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -348,18 +348,18 @@ namespace MediaBrowser.Server.Implementations.Sync public async Task SyncJobItems(SyncJobItem[] items, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken) { - var index = 0; + var numComplete = 0; foreach (var item in items) { - double percent = index; - percent /= items.Length; - - progress.Report(100 * percent); - cancellationToken.ThrowIfCancellationRequested(); + double percentPerItem = 1; + percentPerItem /= items.Length; + var startingPercent = numComplete * percentPerItem * 100; + var innerProgress = new ActionableProgress<double>(); + innerProgress.RegisterAction(p => progress.Report(startingPercent + (percentPerItem * p))); var job = _syncRepo.GetJob(item.JobId); await ProcessJobItem(job, item, enableConversion, innerProgress, cancellationToken).ConfigureAwait(false); @@ -367,7 +367,10 @@ namespace MediaBrowser.Server.Implementations.Sync job = _syncRepo.GetJob(item.JobId); await UpdateJobStatus(job).ConfigureAwait(false); - index++; + numComplete++; + double percent = numComplete; + percent /= items.Length; + progress.Report(100 * percent); } } @@ -432,9 +435,9 @@ namespace MediaBrowser.Server.Implementations.Sync var streamInfo = new StreamBuilder().BuildVideoItem(options); var mediaSource = streamInfo.MediaSource; var externalSubs = streamInfo.GetExternalSubtitles("dummy", false); - var hasExternalSubs = externalSubs.Count > 0; - var requiresConversion = streamInfo.PlayMethod == PlayMethod.Transcode || hasExternalSubs; + // Mark as requiring conversion if transcoding the video, or if any subtitles need to be extracted + var requiresConversion = streamInfo.PlayMethod == PlayMethod.Transcode || externalSubs.Any(i => RequiresExtraction(i, mediaSource)); if (requiresConversion && !enableConversion) { @@ -498,7 +501,7 @@ namespace MediaBrowser.Server.Implementations.Sync jobItem.MediaSource = mediaSource; } - if (hasExternalSubs) + if (externalSubs.Count > 0) { // Save the job item now since conversion could take a while await _syncRepo.Update(jobItem).ConfigureAwait(false); @@ -511,6 +514,13 @@ namespace MediaBrowser.Server.Implementations.Sync await _syncRepo.Update(jobItem).ConfigureAwait(false); } + private bool RequiresExtraction(SubtitleStreamInfo stream, MediaSourceInfo mediaSource) + { + var originalStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Subtitle && i.Index == stream.Index); + + return originalStream != null && !originalStream.IsExternal; + } + private async Task ConvertSubtitles(SyncJobItem jobItem, IEnumerable<SubtitleStreamInfo> subtitles, StreamInfo streamInfo, |
