aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-19 15:53:02 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-19 15:53:02 -0500
commit01f4ddbdc376f3d519e310f4a923acd4ea6c08b5 (patch)
treedd3f930475e81b1eff394d1d08645609ced18320 /MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
parentbdb9cd77bca63a64abd0f23c0958f9ff2e4a1cd6 (diff)
sync updates
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs30
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,