aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs')
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs47
1 files changed, 38 insertions, 9 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
index 61cf1cfc3..4d68735b9 100644
--- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
+++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
@@ -80,17 +80,44 @@ namespace MediaBrowser.Providers.MediaInfo
return;
}
- var videos = _libraryManager.GetItemList(new InternalItemsQuery
+ var dict = new Dictionary<Guid, BaseItem>();
+
+ foreach (var lang in options.DownloadLanguages)
{
- MediaTypes = new string[] { MediaType.Video },
- IsVirtualItem = false,
- IncludeItemTypes = types.ToArray(types.Count),
- DtoOptions = new DtoOptions(true)
+ var query = new InternalItemsQuery
+ {
+ MediaTypes = new string[] {MediaType.Video},
+ IsVirtualItem = false,
+ IncludeItemTypes = types.ToArray(types.Count),
+ DtoOptions = new DtoOptions(true),
+ SourceTypes = new[] {SourceType.Library}
+ };
+
+ if (options.SkipIfAudioTrackMatches)
+ {
+ query.HasNoAudioTrackWithLanguage = lang;
+ }
+
+ if (options.SkipIfEmbeddedSubtitlesPresent)
+ {
+ // Exclude if it already has any subtitles of the same language
+ query.HasNoSubtitleTrackWithLanguage = lang;
+ }
+ else
+ {
+ // Exclude if it already has external subtitles of the same language
+ query.HasNoExternalSubtitleTrackWithLanguage = lang;
+ }
- }).OfType<Video>()
- .Where(i => i.LocationType != LocationType.Remote)
- .ToList();
+ var videosByLanguage = _libraryManager.GetItemList(query);
+ foreach (var video in videosByLanguage)
+ {
+ dict[video.Id] = video;
+ }
+ }
+
+ var videos = dict.Values.ToList();
if (videos.Count == 0)
{
return;
@@ -100,9 +127,11 @@ namespace MediaBrowser.Providers.MediaInfo
foreach (var video in videos)
{
+ cancellationToken.ThrowIfCancellationRequested();
+
try
{
- await DownloadSubtitles(video, options, cancellationToken).ConfigureAwait(false);
+ await DownloadSubtitles(video as Video, options, cancellationToken).ConfigureAwait(false);
}
catch (Exception ex)
{