aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
diff options
context:
space:
mode:
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,