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 | |
| parent | bdb9cd77bca63a64abd0f23c0958f9ff2e4a1cd6 (diff) | |
sync updates
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs | 30 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs | 4 |
2 files changed, 22 insertions, 12 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, diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index 4edebb60f..360cf5421 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<double> 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<ITaskTrigger> GetDefaultTriggers() |
