diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-09-09 23:18:23 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-09-09 23:18:23 -0400 |
| commit | fe10df693551ded214adc49cbbe4d5ad00de66fb (patch) | |
| tree | 6f0b9a5708958542fc4d75b31e63ccfdc4d2de29 /MediaBrowser.Providers | |
| parent | a46f81d5726204085e4d0a4b883d7bdd69de9b94 (diff) | |
improve queries from scheduled tasks
Diffstat (limited to 'MediaBrowser.Providers')
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs | 53 | ||||
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs | 47 |
2 files changed, 67 insertions, 33 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs index 79e89a110..7c6b55d3a 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs @@ -33,15 +33,39 @@ namespace MediaBrowser.Providers.MediaInfo IEnumerable<string> languages, CancellationToken cancellationToken) { + var downloadedLanguages = new List<string>(); + + 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<bool> DownloadSubtitles(Video video, + List<MediaStream> mediaStreams, + bool skipIfEmbeddedSubtitlesPresent, + bool skipIfAudioTrackMatches, + bool requirePerfectMatch, + string lang, + CancellationToken cancellationToken) + { if (video.LocationType != LocationType.FileSystem || video.VideoType != VideoType.VideoFile) { - return new List<string>(); + return Task.FromResult(false); } if (!video.IsCompleteMedia) { - return new List<string>(); + return Task.FromResult(false); } VideoContentType mediaType; @@ -57,30 +81,11 @@ namespace MediaBrowser.Providers.MediaInfo else { // These are the only supported types - return new List<string>(); + return Task.FromResult(false); } - var downloadedLanguages = new List<string>(); - - 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<bool> DownloadSubtitles(Video video, 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) { |
