From 01f4ddbdc376f3d519e310f4a923acd4ea6c08b5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 19 Jan 2015 15:53:02 -0500 Subject: sync updates --- .../Sync/SyncJobProcessor.cs | 30 ++++++++++++++-------- .../Sync/SyncScheduledTask.cs | 4 +-- 2 files changed, 22 insertions(+), 12 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Sync') diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index a233fe9121..cf0138a295 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 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(); + 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 subtitles, StreamInfo streamInfo, diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index 4edebb60f1..360cf54213 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs @@ -60,8 +60,8 @@ namespace MediaBrowser.Server.Implementations.Sync public Task Execute(CancellationToken cancellationToken, IProgress progress) { - return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder, _config, _fileSystem).Sync(progress, - cancellationToken); + return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder, _config, _fileSystem) + .Sync(progress, cancellationToken); } public IEnumerable GetDefaultTriggers() -- cgit v1.2.3