diff options
Diffstat (limited to 'MediaBrowser.Providers')
10 files changed, 49 insertions, 40 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs index d913bd076..2852f5719 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs @@ -58,10 +58,13 @@ namespace MediaBrowser.Providers.MediaInfo var options = GetOptions(); var videos = _libraryManager.RootFolder - .RecursiveChildren - .OfType<Video>() - .Where(i => + .GetRecursiveChildren(i => { + if (!(i is Video)) + { + return false; + } + if (i.LocationType == LocationType.Remote || i.LocationType == LocationType.Virtual) { return false; @@ -72,6 +75,7 @@ namespace MediaBrowser.Providers.MediaInfo (options.DownloadMovieSubtitles && i is Movie); }) + .Cast<Video>() .ToList(); var numComplete = 0; diff --git a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs index dd4b33542..cc2142292 100644 --- a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs @@ -177,9 +177,8 @@ namespace MediaBrowser.Providers.Movies var numComplete = 0; // Gather all movies into a lookup by tmdb id - var allMovies = _libraryManager.RootFolder.RecursiveChildren - .Where(i => i is Movie) - .Where(i => !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tmdb))) + var allMovies = _libraryManager.RootFolder + .GetRecursiveChildren(i => i is Movie && !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tmdb))) .ToLookup(i => i.GetProviderId(MetadataProviders.Tmdb)); foreach (var id in list) diff --git a/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs b/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs index dac3c4836..2ba700b09 100644 --- a/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs +++ b/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs @@ -20,7 +20,8 @@ namespace MediaBrowser.Providers.Music { var album = (MusicAlbum)item; - var image = album.RecursiveChildren.OfType<Audio>() + var image = album.GetRecursiveChildren() + .OfType<Audio>() .Select(i => i.GetImagePath(type)) .FirstOrDefault(i => !string.IsNullOrEmpty(i)); diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 64dcd913d..11348361a 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -45,7 +45,9 @@ namespace MediaBrowser.Providers.Music { if (!item.IsLocked) { - var songs = item.RecursiveChildren.OfType<Audio>().ToList(); + var songs = item.GetRecursiveChildren(i => i is Audio) + .Cast<Audio>() + .ToList(); if (!item.LockedFields.Contains(MetadataFields.Genres)) { diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs index 77ae9eec9..51c4d18a9 100644 --- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs +++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs @@ -44,8 +44,8 @@ namespace MediaBrowser.Providers.Music if (!item.IsLocked) { var taggedItems = item.IsAccessedByName ? - item.GetTaggedItems(_libraryManager.RootFolder.RecursiveChildren.Where(i => i is IHasArtist && !i.IsFolder)).ToList() : - item.RecursiveChildren.Where(i => i is IHasArtist && !i.IsFolder).ToList(); + _libraryManager.RootFolder.GetRecursiveChildren(i => !i.IsFolder && item.ItemFilter(i)).ToList() : + item.GetRecursiveChildren(i => i is IHasArtist && !i.IsFolder).ToList(); if (!item.LockedFields.Contains(MetadataFields.Genres)) { diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs index 253acc13f..0258fd539 100644 --- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs +++ b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs @@ -56,10 +56,12 @@ namespace MediaBrowser.Providers.People public Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { + // Avoid implicitly captured closure + var itemName = item.Name; + var seriesWithPerson = _library.RootFolder - .RecursiveChildren - .OfType<Series>() - .Where(i => !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb)) && i.People.Any(p => string.Equals(p.Name, item.Name, StringComparison.OrdinalIgnoreCase))) + .GetRecursiveChildren(i => i is Series && !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb)) && i.People.Any(p => string.Equals(p.Name, itemName, StringComparison.OrdinalIgnoreCase))) + .Cast<Series>() .ToList(); var infos = seriesWithPerson.Select(i => GetImageFromSeriesData(i, item.Name, cancellationToken)) diff --git a/MediaBrowser.Providers/TV/DummySeasonProvider.cs b/MediaBrowser.Providers/TV/DummySeasonProvider.cs index f82439de9..fb5282551 100644 --- a/MediaBrowser.Providers/TV/DummySeasonProvider.cs +++ b/MediaBrowser.Providers/TV/DummySeasonProvider.cs @@ -49,7 +49,7 @@ namespace MediaBrowser.Providers.TV private async Task<bool> AddDummySeasonFolders(Series series, CancellationToken cancellationToken) { - var episodesInSeriesFolder = series.RecursiveChildren + var episodesInSeriesFolder = series.GetRecursiveChildren() .OfType<Episode>() .Where(i => !i.IsInSeasonFolder) .ToList(); @@ -134,7 +134,7 @@ namespace MediaBrowser.Providers.TV .Where(i => i.LocationType == LocationType.Virtual) .ToList(); - var episodes = series.RecursiveChildren.OfType<Episode>().ToList(); + var episodes = series.GetRecursiveChildren().OfType<Episode>().ToList(); var seasonsToRemove = virtualSeasons .Where(i => diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index 8b46b082b..d45128288 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs @@ -139,7 +139,7 @@ namespace MediaBrowser.Providers.TV /// <returns></returns> private bool HasInvalidContent(IEnumerable<Series> group) { - var allItems = group.ToList().SelectMany(i => i.RecursiveChildren).ToList(); + var allItems = group.ToList().SelectMany(i => i.GetRecursiveChildren()).ToList(); return allItems.OfType<Season>().Any(i => !i.IndexNumber.HasValue) || allItems.OfType<Episode>().Any(i => @@ -163,22 +163,23 @@ namespace MediaBrowser.Providers.TV /// <param name="episodeLookup">The episode lookup.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> - private async Task<bool> AddMissingEpisodes(List<Series> series, + private async Task<bool> AddMissingEpisodes(List<Series> series, bool seriesHasBadData, - string seriesDataPath, - IEnumerable<Tuple<int, int>> episodeLookup, + string seriesDataPath, + IEnumerable<Tuple<int, int>> episodeLookup, CancellationToken cancellationToken) { var existingEpisodes = (from s in series let seasonOffset = TvdbSeriesProvider.GetSeriesOffset(s.ProviderIds) ?? ((s.AnimeSeriesIndex ?? 1) - 1) - from c in s.RecursiveChildren.OfType<Episode>() + from c in s.GetRecursiveChildren().OfType<Episode>() select new Tuple<int, Episode>((c.ParentIndexNumber ?? 0) + seasonOffset, c)) .ToList(); var lookup = episodeLookup as IList<Tuple<int, int>> ?? episodeLookup.ToList(); var seasonCounts = (from e in lookup - group e by e.Item1 into g select g) + group e by e.Item1 into g + select g) .ToDictionary(g => g.Key, g => g.Count()); var hasChanges = false; @@ -244,23 +245,23 @@ namespace MediaBrowser.Providers.TV { var seriesAndOffsets = series.Select(s => new { Series = s, SeasonOffset = TvdbSeriesProvider.GetSeriesOffset(s.ProviderIds) ?? ((s.AnimeSeriesIndex ?? 1) - 1) }).ToList(); - var bestMatch = seriesAndOffsets.FirstOrDefault(s => s.Series.RecursiveChildren.OfType<Season>().Any(season => (season.IndexNumber + s.SeasonOffset) == seasonNumber)) ?? - seriesAndOffsets.FirstOrDefault(s => s.Series.RecursiveChildren.OfType<Season>().Any(season => (season.IndexNumber + s.SeasonOffset) == 1)) ?? - seriesAndOffsets.OrderBy(s => s.Series.RecursiveChildren.OfType<Season>().Select(season => season.IndexNumber + s.SeasonOffset).Min()).First(); + var bestMatch = seriesAndOffsets.FirstOrDefault(s => s.Series.GetRecursiveChildren().OfType<Season>().Any(season => (season.IndexNumber + s.SeasonOffset) == seasonNumber)) ?? + seriesAndOffsets.FirstOrDefault(s => s.Series.GetRecursiveChildren().OfType<Season>().Any(season => (season.IndexNumber + s.SeasonOffset) == 1)) ?? + seriesAndOffsets.OrderBy(s => s.Series.GetRecursiveChildren().OfType<Season>().Select(season => season.IndexNumber + s.SeasonOffset).Min()).First(); return bestMatch.Series; } - + /// <summary> /// Removes the virtual entry after a corresponding physical version has been added /// </summary> - private async Task<bool> RemoveObsoleteOrMissingEpisodes(IEnumerable<Series> series, + private async Task<bool> RemoveObsoleteOrMissingEpisodes(IEnumerable<Series> series, IEnumerable<Tuple<int, int>> episodeLookup) { var existingEpisodes = (from s in series let seasonOffset = TvdbSeriesProvider.GetSeriesOffset(s.ProviderIds) ?? ((s.AnimeSeriesIndex ?? 1) - 1) - from c in s.RecursiveChildren.OfType<Episode>() - select new { SeasonOffset = seasonOffset, Episode = c }) + from c in s.GetRecursiveChildren().OfType<Episode>() + select new { SeasonOffset = seasonOffset, Episode = c }) .ToList(); var physicalEpisodes = existingEpisodes @@ -320,7 +321,7 @@ namespace MediaBrowser.Providers.TV /// <param name="series">The series.</param> /// <param name="episodeLookup">The episode lookup.</param> /// <returns>Task{System.Boolean}.</returns> - private async Task<bool> RemoveObsoleteOrMissingSeasons(IEnumerable<Series> series, + private async Task<bool> RemoveObsoleteOrMissingSeasons(IEnumerable<Series> series, IEnumerable<Tuple<int, int>> episodeLookup) { var existingSeasons = (from s in series @@ -361,7 +362,7 @@ namespace MediaBrowser.Providers.TV // Season does not have a number // Remove if there are no episodes directly in series without a season number - return i.Season.Series.RecursiveChildren.OfType<Episode>().All(s => s.ParentIndexNumber.HasValue || !s.IsInSeasonFolder); + return i.Season.Series.GetRecursiveChildren().OfType<Episode>().All(s => s.ParentIndexNumber.HasValue || !s.IsInSeasonFolder); }) .ToList(); diff --git a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs index 2506b53ad..8b22f45a3 100644 --- a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs +++ b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs @@ -44,8 +44,8 @@ namespace MediaBrowser.Providers.TV private async Task RunInternal(IProgress<double> progress, CancellationToken cancellationToken) { var seriesList = _libraryManager.RootFolder - .RecursiveChildren - .OfType<Series>() + .GetRecursiveChildren(i => i is Series) + .Cast<Series>() .ToList(); var provider = new DummySeasonProvider(_config, _logger, _localization, _libraryManager); @@ -65,8 +65,8 @@ namespace MediaBrowser.Providers.TV { cancellationToken.ThrowIfCancellationRequested(); - var episodes = series.RecursiveChildren - .OfType<Episode>() + var episodes = series.GetRecursiveChildren(i => i is Episode) + .Cast<Episode>() .ToList(); var physicalEpisodes = episodes.Where(i => i.LocationType != LocationType.Virtual) diff --git a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs index 32ed5d7f6..4bc4a2c8d 100644 --- a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs +++ b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs @@ -110,10 +110,10 @@ namespace MediaBrowser.Providers.TV .Select(Path.GetFileName) .ToList(); - var seriesIdsInLibrary = _libraryManager.RootFolder.RecursiveChildren - .OfType<Series>() + var seriesIdsInLibrary = _libraryManager.RootFolder + .GetRecursiveChildren(i => i is Series && !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb))) + .Cast<Series>() .Select(i => i.GetProviderId(MetadataProviders.Tvdb)) - .Where(i => !string.IsNullOrEmpty(i)) .ToList(); var missingSeries = seriesIdsInLibrary.Except(existingDirectories, StringComparer.OrdinalIgnoreCase) @@ -301,9 +301,9 @@ namespace MediaBrowser.Providers.TV var numComplete = 0; // Gather all series into a lookup by tvdb id - var allSeries = _libraryManager.RootFolder.RecursiveChildren - .OfType<Series>() - .Where(i => !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb))) + var allSeries = _libraryManager.RootFolder + .GetRecursiveChildren(i => i is Series && !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb))) + .Cast<Series>() .ToLookup(i => i.GetProviderId(MetadataProviders.Tvdb)); foreach (var seriesId in list) |
