From fe10df693551ded214adc49cbbe4d5ad00de66fb Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 9 Sep 2017 23:18:23 -0400 Subject: improve queries from scheduled tasks --- .../MediaInfo/SubtitleDownloader.cs | 53 ++++++++++++---------- .../MediaInfo/SubtitleScheduledTask.cs | 47 +++++++++++++++---- 2 files changed, 67 insertions(+), 33 deletions(-) (limited to 'MediaBrowser.Providers') diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs index 79e89a1104..7c6b55d3ac 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs @@ -32,16 +32,40 @@ namespace MediaBrowser.Providers.MediaInfo bool requirePerfectMatch, IEnumerable languages, CancellationToken cancellationToken) + { + var downloadedLanguages = new List(); + + foreach (var lang in languages) + { + var downloaded = await DownloadSubtitles(video, mediaStreams, skipIfEmbeddedSubtitlesPresent, + skipIfAudioTrackMatches, requirePerfectMatch, lang, cancellationToken).ConfigureAwait(false); + + if (downloaded) + { + downloadedLanguages.Add(lang); + } + } + + return downloadedLanguages; + } + + public Task DownloadSubtitles(Video video, + List mediaStreams, + bool skipIfEmbeddedSubtitlesPresent, + bool skipIfAudioTrackMatches, + bool requirePerfectMatch, + string lang, + CancellationToken cancellationToken) { if (video.LocationType != LocationType.FileSystem || video.VideoType != VideoType.VideoFile) { - return new List(); + return Task.FromResult(false); } if (!video.IsCompleteMedia) { - return new List(); + return Task.FromResult(false); } VideoContentType mediaType; @@ -57,30 +81,11 @@ namespace MediaBrowser.Providers.MediaInfo else { // These are the only supported types - return new List(); + return Task.FromResult(false); } - var downloadedLanguages = new List(); - - foreach (var lang in languages) - { - try - { - var downloaded = await DownloadSubtitles(video, mediaStreams, skipIfEmbeddedSubtitlesPresent, skipIfAudioTrackMatches, requirePerfectMatch, lang, mediaType, cancellationToken) - .ConfigureAwait(false); - - if (downloaded) - { - downloadedLanguages.Add(lang); - } - } - catch (Exception ex) - { - _logger.ErrorException("Error downloading subtitles", ex); - } - } - - return downloadedLanguages; + return DownloadSubtitles(video, mediaStreams, skipIfEmbeddedSubtitlesPresent, skipIfAudioTrackMatches, + requirePerfectMatch, lang, mediaType, cancellationToken); } private async Task DownloadSubtitles(Video video, diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs index 61cf1cfc3c..4d68735b94 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(); + + 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