diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-01-19 15:53:02 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-01-19 15:53:02 -0500 |
| commit | 01f4ddbdc376f3d519e310f4a923acd4ea6c08b5 (patch) | |
| tree | dd3f930475e81b1eff394d1d08645609ced18320 /MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs | |
| parent | bdb9cd77bca63a64abd0f23c0958f9ff2e4a1cd6 (diff) | |
sync updates
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, |
