aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs10
-rw-r--r--MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs5
-rw-r--r--MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs3
-rw-r--r--MediaBrowser.Providers/Music/AlbumMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Music/ArtistMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/People/TvdbPersonImageProvider.cs8
-rw-r--r--MediaBrowser.Providers/TV/DummySeasonProvider.cs4
-rw-r--r--MediaBrowser.Providers/TV/MissingEpisodeProvider.cs31
-rw-r--r--MediaBrowser.Providers/TV/SeriesPostScanTask.cs8
-rw-r--r--MediaBrowser.Providers/TV/TvdbPrescanTask.cs12
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)