diff --git a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs index 0fd6fa56f..3c0a5fc73 100644 --- a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs +++ b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs @@ -53,7 +53,8 @@ namespace MediaBrowser.Providers.TV var seriesList = _libraryManager.GetItemList(new InternalItemsQuery() { IncludeItemTypes = new[] { typeof(Series).Name }, - Recursive = true + Recursive = true, + GroupByPresentationUniqueKey = false }).Cast().ToList(); @@ -207,7 +208,8 @@ namespace MediaBrowser.Providers.TV var seriesList = _libraryManager.GetItemList(new InternalItemsQuery() { IncludeItemTypes = new[] { typeof(Series).Name }, - Recursive = true + Recursive = true, + GroupByPresentationUniqueKey = false }).Cast().ToList(); diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs index ca3320cc6..7a0b2c90c 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs @@ -176,19 +176,16 @@ namespace MediaBrowser.Providers.TV public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) { - var episode = (Episode)item; - - if (!episode.IsVirtualUnaired) + // For non-unaired items, only enable if configured + if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) { - // For non-unaired items, only enable if configured - if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) - { - return false; - } + return false; } if (!item.HasImage(ImageType.Primary)) { + var episode = (Episode)item; + var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs index 5c88c87d8..fc07ebcac 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs @@ -146,8 +146,7 @@ namespace MediaBrowser.Providers.TV public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) { - // Only enable for virtual items - if (item.LocationType != LocationType.Virtual) + if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) { return false; } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs index 672ebc95d..215e0640f 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs @@ -15,6 +15,7 @@ using System.Threading; using System.Threading.Tasks; using System.Xml; using CommonIO; +using MediaBrowser.Controller.Entities; namespace MediaBrowser.Providers.TV { @@ -89,7 +90,7 @@ namespace MediaBrowser.Providers.TV var path = TvdbSeriesProvider.GetSeriesDataPath(_config.CommonApplicationPaths); - _fileSystem.CreateDirectory(path); + _fileSystem.CreateDirectory(path); var timestampFile = Path.Combine(path, "time.txt"); @@ -102,7 +103,7 @@ namespace MediaBrowser.Providers.TV } // Find out the last time we queried tvdb for updates - var lastUpdateTime = timestampFileInfo.Exists ? _fileSystem.ReadAllText(timestampFile, Encoding.UTF8) : string.Empty; + var lastUpdateTime = timestampFileInfo.Exists ? _fileSystem.ReadAllText(timestampFile, Encoding.UTF8) : string.Empty; string newUpdateTime; @@ -110,15 +111,21 @@ namespace MediaBrowser.Providers.TV .Select(Path.GetFileName) .ToList(); - var seriesIdsInLibrary = _libraryManager.RootFolder - .GetRecursiveChildren(i => i is Series && !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb))) - .Cast() + var seriesList = _libraryManager.GetItemList(new InternalItemsQuery() + { + IncludeItemTypes = new[] { typeof(Series).Name }, + Recursive = true, + GroupByPresentationUniqueKey = false + }).Cast(); + + var seriesIdsInLibrary = seriesList + .Where(i => !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb))) .Select(i => i.GetProviderId(MetadataProviders.Tvdb)) .ToList(); var missingSeries = seriesIdsInLibrary.Except(existingDirectories, StringComparer.OrdinalIgnoreCase) .ToList(); - + // If this is our first time, update all series if (string.IsNullOrEmpty(lastUpdateTime)) { @@ -157,7 +164,7 @@ namespace MediaBrowser.Providers.TV await UpdateSeries(listToUpdate, path, nullableUpdateValue, progress, cancellationToken).ConfigureAwait(false); } - _fileSystem.WriteAllText(timestampFile, newUpdateTime, Encoding.UTF8); + _fileSystem.WriteAllText(timestampFile, newUpdateTime, Encoding.UTF8); progress.Report(100); } @@ -300,10 +307,17 @@ namespace MediaBrowser.Providers.TV var list = seriesIds.ToList(); var numComplete = 0; + var seriesList = _libraryManager.GetItemList(new InternalItemsQuery() + { + IncludeItemTypes = new[] { typeof(Series).Name }, + Recursive = true, + GroupByPresentationUniqueKey = false + + }).Cast(); + // Gather all series into a lookup by tvdb id - var allSeries = _libraryManager.RootFolder - .GetRecursiveChildren(i => i is Series && !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb))) - .Cast() + var allSeries = seriesList + .Where(i => !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb))) .ToLookup(i => i.GetProviderId(MetadataProviders.Tvdb)); foreach (var seriesId in list) @@ -323,7 +337,7 @@ namespace MediaBrowser.Providers.TV catch (HttpException ex) { _logger.ErrorException("Error updating tvdb series id {0}, language {1}", ex, seriesId, language); - + // Already logged at lower levels, but don't fail the whole operation, unless timed out // We have to fail this to make it run again otherwise new episode data could potentially be missing if (ex.IsTimedOut) @@ -357,7 +371,7 @@ namespace MediaBrowser.Providers.TV seriesDataPath = Path.Combine(seriesDataPath, id); - _fileSystem.CreateDirectory(seriesDataPath); + _fileSystem.CreateDirectory(seriesDataPath); return TvdbSeriesProvider.Current.DownloadSeriesZip(id, MetadataProviders.Tvdb.ToString(), seriesDataPath, lastTvDbUpdateTime, preferredMetadataLanguage, cancellationToken); } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs index 54d729eb7..52d12e501 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs @@ -365,13 +365,9 @@ namespace MediaBrowser.Providers.TV public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) { - if (item.LocationType != LocationType.Virtual) + if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) { - // For non-virtual items, only enable if configured - if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) - { - return false; - } + return false; } var season = (Season)item; diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 7199301af..3422a3212 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -2398,6 +2398,11 @@ namespace MediaBrowser.Server.Implementations.Persistence return false; } + if (query.User == null) + { + return false; + } + if (query.IncludeItemTypes.Length == 0) { return true;