aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Dto/DtoService.cs38
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs3
-rw-r--r--MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs11
-rw-r--r--MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs40
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs13
-rw-r--r--MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs7
-rw-r--r--MediaBrowser.Server.Implementations/Library/MusicManager.cs17
-rw-r--r--MediaBrowser.Server.Implementations/Library/SearchEngine.cs9
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs7
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs3
-rw-r--r--MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs3
-rw-r--r--MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Session/SessionManager.cs7
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs10
-rw-r--r--MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs16
21 files changed, 101 insertions, 99 deletions
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index 85a31337b..5640f2745 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -96,10 +96,10 @@ namespace MediaBrowser.Server.Implementations.Dto
if (byName != null && !(item is LiveTvChannel))
{
var libraryItems = user != null ?
- user.RootFolder.GetRecursiveChildren(user) :
- _libraryManager.RootFolder.RecursiveChildren;
+ user.RootFolder.GetRecursiveChildren(user, byName.ItemFilter) :
+ _libraryManager.RootFolder.GetRecursiveChildren(byName.ItemFilter);
- SetItemByNameInfo(item, dto, byName.GetTaggedItems(libraryItems).ToList(), user);
+ SetItemByNameInfo(item, dto, libraryItems.ToList(), user);
}
FillSyncInfo(dto, item, itemIdsWithSyncJobs, options);
@@ -119,10 +119,10 @@ namespace MediaBrowser.Server.Implementations.Dto
if (byName != null && !(item is LiveTvChannel))
{
var libraryItems = user != null ?
- user.RootFolder.GetRecursiveChildren(user) :
- _libraryManager.RootFolder.RecursiveChildren;
+ user.RootFolder.GetRecursiveChildren(user, byName.ItemFilter) :
+ _libraryManager.RootFolder.GetRecursiveChildren(byName.ItemFilter);
- SetItemByNameInfo(item, dto, byName.GetTaggedItems(libraryItems).ToList(), user);
+ SetItemByNameInfo(item, dto, libraryItems.ToList(), user);
return dto;
}
@@ -153,7 +153,14 @@ namespace MediaBrowser.Server.Implementations.Dto
var result = _syncManager.GetLibraryItemIds(new SyncJobItemQuery
{
- TargetId = deviceId
+ TargetId = deviceId,
+ Statuses = new List<SyncJobItemStatus>
+ {
+ SyncJobItemStatus.Converting,
+ SyncJobItemStatus.Queued,
+ SyncJobItemStatus.Transferring,
+ SyncJobItemStatus.Synced
+ }
});
return result.Items;
@@ -451,9 +458,8 @@ namespace MediaBrowser.Server.Implementations.Dto
if (!string.IsNullOrEmpty(item.Album))
{
var parentAlbum = _libraryManager.RootFolder
- .GetRecursiveChildren()
- .Where(i => i is MusicAlbum)
- .FirstOrDefault(i => string.Equals(i.Name, item.Album, StringComparison.OrdinalIgnoreCase));
+ .GetRecursiveChildren(i => i is MusicAlbum && string.Equals(i.Name, item.Album, StringComparison.OrdinalIgnoreCase))
+ .FirstOrDefault();
if (parentAlbum != null)
{
@@ -1385,7 +1391,7 @@ namespace MediaBrowser.Server.Implementations.Dto
{
linkedChildren = user == null
? folder.GetRecursiveChildren().ToList()
- : folder.GetRecursiveChildren(user, true).ToList();
+ : folder.GetRecursiveChildren(user).ToList();
var parentWithBackdrop = linkedChildren.FirstOrDefault(i => i.GetImages(ImageType.Backdrop).Any());
@@ -1402,7 +1408,7 @@ namespace MediaBrowser.Server.Implementations.Dto
{
linkedChildren = user == null
? folder.GetRecursiveChildren().ToList()
- : folder.GetRecursiveChildren(user, true).ToList();
+ : folder.GetRecursiveChildren(user).ToList();
}
var parentWithImage = linkedChildren.FirstOrDefault(i => i.GetImages(ImageType.Primary).Any());
@@ -1479,12 +1485,14 @@ namespace MediaBrowser.Server.Implementations.Dto
if (season != null)
{
- children = season.GetEpisodes(user).Where(i => i.LocationType != LocationType.Virtual);
+ children = season
+ .GetEpisodes(user)
+ .Where(i => i.LocationType != LocationType.Virtual);
}
else
{
- children = folder.GetRecursiveChildren(user)
- .Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual);
+ children = folder
+ .GetRecursiveChildren(user, i => !i.IsFolder && i.LocationType != LocationType.Virtual);
}
// Loop through each recursive child
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
index e6976c54b..dd5dc82e8 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
@@ -245,7 +245,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
var collections = user.RootFolder.GetChildren(user, true).ToList();
- var allRecursiveChildren = user.RootFolder.GetRecursiveChildren(user)
+ var allRecursiveChildren = user.RootFolder
+ .GetRecursiveChildren(user)
.Select(i => i.Id)
.Distinct()
.ToDictionary(i => i);
diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
index 2fc5f9bc2..10e50e497 100644
--- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
+++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
@@ -226,7 +226,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
private List<string> GetOtherDuplicatePaths(string targetPath, Series series, int seasonNumber, int episodeNumber, int? endingEpisodeNumber)
{
- var episodePaths = series.RecursiveChildren
+ var episodePaths = series.GetRecursiveChildren()
.OfType<Episode>()
.Where(i =>
{
@@ -335,8 +335,8 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
result.ExtractedName = nameWithoutYear;
result.ExtractedYear = yearInName;
- return _libraryManager.RootFolder.RecursiveChildren
- .OfType<Series>()
+ return _libraryManager.RootFolder.GetRecursiveChildren(i => i is Series)
+ .Cast<Series>()
.Select(i => NameUtils.GetMatchScore(nameWithoutYear, yearInName, i))
.Where(i => i.Item2 > 0)
.OrderByDescending(i => i.Item2)
@@ -400,9 +400,8 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
{
// If there's already a season folder, use that
var season = series
- .RecursiveChildren
- .OfType<Season>()
- .FirstOrDefault(i => i.LocationType == LocationType.FileSystem && i.IndexNumber.HasValue && i.IndexNumber.Value == seasonNumber);
+ .GetRecursiveChildren(i => i is Season && i.LocationType == LocationType.FileSystem && i.IndexNumber.HasValue && i.IndexNumber.Value == seasonNumber)
+ .FirstOrDefault();
if (season != null)
{
diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs
index a113e8d5e..2af6e5588 100644
--- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs
+++ b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs
@@ -67,29 +67,26 @@ namespace MediaBrowser.Server.Implementations.Intros
? null
: _localization.GetRatingLevel(item.OfficialRating);
- var libaryItems = user.RootFolder.GetRecursiveChildren(user, false)
- .ToList();
-
var random = new Random(Environment.TickCount + Guid.NewGuid().GetHashCode());
var candidates = new List<ItemWithTrailer>();
if (config.EnableIntrosFromMoviesInLibrary)
{
- var itemsWithTrailers = libaryItems
- .Where(i =>
- {
- var hasTrailers = i as IHasTrailers;
-
- if (hasTrailers != null && hasTrailers.LocalTrailerIds.Count > 0)
- {
- if (i is Movie)
- {
- return !IsDuplicate(item, i);
- }
- }
- return false;
- });
+ var itemsWithTrailers = user.RootFolder
+ .GetRecursiveChildren(user, i =>
+ {
+ var hasTrailers = i as IHasTrailers;
+
+ if (hasTrailers != null && hasTrailers.LocalTrailerIds.Count > 0)
+ {
+ if (i is Movie)
+ {
+ return !IsDuplicate(item, i);
+ }
+ }
+ return false;
+ });
candidates.AddRange(itemsWithTrailers.Select(i => new ItemWithTrailer
{
@@ -141,15 +138,16 @@ namespace MediaBrowser.Server.Implementations.Intros
}));
}
+ return GetResult(item, candidates, config, ratingLevel);
+ }
+
+ private IEnumerable<IntroInfo> GetResult(BaseItem item, IEnumerable<ItemWithTrailer> candidates, CinemaModeConfiguration config, int? ratingLevel)
+ {
var customIntros = !string.IsNullOrWhiteSpace(config.CustomIntroPath) ?
GetCustomIntros(item) :
new List<IntroInfo>();
var trailerLimit = config.TrailerLimit;
- if (customIntros.Count > 0)
- {
- trailerLimit--;
- }
// Avoid implicitly captured closure
return candidates.Where(i =>
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index d93705a51..0ebd1aace 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -337,8 +337,8 @@ namespace MediaBrowser.Server.Implementations.Library
/// <returns>Task.</returns>
private async Task UpdateSeasonZeroNames(string newName, CancellationToken cancellationToken)
{
- var seasons = RootFolder.RecursiveChildren
- .OfType<Season>()
+ var seasons = RootFolder.GetRecursiveChildren(i => i is Season)
+ .Cast<Season>()
.Where(i => i.IndexNumber.HasValue && i.IndexNumber.Value == 0 && !string.Equals(i.Name, newName, StringComparison.Ordinal))
.ToList();
@@ -393,7 +393,7 @@ namespace MediaBrowser.Server.Implementations.Library
var locationType = item.LocationType;
var children = item.IsFolder
- ? ((Folder)item).RecursiveChildren.ToList()
+ ? ((Folder)item).GetRecursiveChildren().ToList()
: new List<BaseItem>();
foreach (var metadataPath in GetMetadataPaths(item, children))
@@ -919,9 +919,10 @@ namespace MediaBrowser.Server.Implementations.Library
{
var validFilename = _fileSystem.GetValidFilename(name).Trim();
- var existing = RootFolder.RecursiveChildren
- .OfType<T>()
- .FirstOrDefault(i => string.Equals(_fileSystem.GetValidFilename(i.Name).Trim(), validFilename, StringComparison.OrdinalIgnoreCase));
+ var existing = RootFolder
+ .GetRecursiveChildren(i => i is T && string.Equals(_fileSystem.GetValidFilename(i.Name).Trim(), validFilename, StringComparison.OrdinalIgnoreCase))
+ .Cast<T>()
+ .FirstOrDefault();
if (existing != null)
{
diff --git a/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs
index 9196bf734..b72406730 100644
--- a/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs
@@ -1,5 +1,4 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller.Channels;
+using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Channels;
@@ -25,8 +24,8 @@ namespace MediaBrowser.Server.Implementations.Library
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
var items = _libraryManager.RootFolder
- .RecursiveChildren
- .OfType<IHasTrailers>()
+ .GetRecursiveChildren(i => i is IHasTrailers)
+ .Cast<IHasTrailers>()
.ToList();
var channelTrailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery
diff --git a/MediaBrowser.Server.Implementations/Library/MusicManager.cs b/MediaBrowser.Server.Implementations/Library/MusicManager.cs
index b8c29c19b..5a7533ad2 100644
--- a/MediaBrowser.Server.Implementations/Library/MusicManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/MusicManager.cs
@@ -32,8 +32,8 @@ namespace MediaBrowser.Server.Implementations.Library
var artist = _libraryManager.GetArtist(name);
var genres = user.RootFolder
- .GetRecursiveChildren(user)
- .OfType<Audio>()
+ .GetRecursiveChildren(user, i => i is Audio)
+ .Cast<Audio>()
.Where(i => i.HasArtist(name))
.SelectMany(i => i.Genres)
.Concat(artist.Genres)
@@ -45,8 +45,8 @@ namespace MediaBrowser.Server.Implementations.Library
public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user)
{
var genres = item
- .GetRecursiveChildren(user, true)
- .OfType<Audio>()
+ .GetRecursiveChildren(user, i => i is Audio)
+ .Cast<Audio>()
.SelectMany(i => i.Genres)
.Concat(item.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase);
@@ -57,8 +57,8 @@ namespace MediaBrowser.Server.Implementations.Library
public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user)
{
var genres = item
- .GetRecursiveChildren(user, true)
- .OfType<Audio>()
+ .GetRecursiveChildren(user, i => i is Audio)
+ .Cast<Audio>()
.SelectMany(i => i.Genres)
.Concat(item.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase);
@@ -68,12 +68,13 @@ namespace MediaBrowser.Server.Implementations.Library
public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user)
{
- var inputItems = user.RootFolder.GetRecursiveChildren(user);
+ var inputItems = user.RootFolder
+ .GetRecursiveChildren(user, i => i is Audio);
var genresDictionary = genres.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
return inputItems
- .OfType<Audio>()
+ .Cast<Audio>()
.Select(i => new Tuple<Audio, int>(i, i.Genres.Count(genresDictionary.ContainsKey)))
.Where(i => i.Item2 > 0)
.OrderByDescending(i => i.Item2)
diff --git a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs
index 1c92f6c4a..51cad7a35 100644
--- a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs
+++ b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs
@@ -35,20 +35,19 @@ namespace MediaBrowser.Server.Implementations.Library
{
IEnumerable<BaseItem> inputItems;
+ Func<BaseItem, bool> filter = i => !(i is ICollectionFolder);
+
if (string.IsNullOrWhiteSpace(query.UserId))
{
- inputItems = _libraryManager.RootFolder.RecursiveChildren;
+ inputItems = _libraryManager.RootFolder.GetRecursiveChildren(filter);
}
else
{
var user = _userManager.GetUserById(query.UserId);
- inputItems = user.RootFolder.GetRecursiveChildren(user, true);
+ inputItems = user.RootFolder.GetRecursiveChildren(user, filter);
}
-
- inputItems = inputItems.Where(i => !(i is ICollectionFolder));
-
inputItems = _libraryManager.ReplaceVideosWithPrimaryVersions(inputItems);
var results = await GetSearchHints(inputItems, query).ConfigureAwait(false);
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs
index 5363aef25..7636833e4 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs
@@ -44,9 +44,10 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var allItems = _libraryManager.RootFolder.GetRecursiveChildren();
-
- var allSongs = allItems.Where(i => !i.IsFolder).OfType<IHasArtist>().ToList();
+ var allSongs = _libraryManager.RootFolder
+ .GetRecursiveChildren(i => !i.IsFolder && (i is IHasArtist))
+ .Cast<IHasArtist>()
+ .ToList();
var allArtists = allSongs.SelectMany(i => i.AllArtists)
.Distinct(StringComparer.OrdinalIgnoreCase)
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs
index b2f2a60c2..757936aa7 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs
@@ -34,7 +34,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var items = _libraryManager.RootFolder.RecursiveChildren.Where(i => (i is Game))
+ var items = _libraryManager.RootFolder.GetRecursiveChildren(i => (i is Game))
.SelectMany(i => i.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
index 43dc69e63..3a06fac1b 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
@@ -35,7 +35,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var items = _libraryManager.RootFolder.RecursiveChildren.Where(i => !(i is IHasMusicGenres) && !(i is Game))
+ var items = _libraryManager.RootFolder.GetRecursiveChildren(i => !(i is IHasMusicGenres) && !(i is Game))
.SelectMany(i => i.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs
index dfdbda1d9..25eddb48a 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs
@@ -34,7 +34,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var items = _libraryManager.RootFolder.RecursiveChildren.Where(i => (i is IHasMusicGenres))
+ var items = _libraryManager.RootFolder.GetRecursiveChildren(i => (i is IHasMusicGenres))
.SelectMany(i => i.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
index 643deef01..5feebab9c 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
@@ -33,7 +33,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var items = _libraryManager.RootFolder.RecursiveChildren
+ var items = _libraryManager.RootFolder.GetRecursiveChildren()
.SelectMany(i => i.Studios)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs
index 5b8f27f58..5ea5fb254 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs
@@ -20,7 +20,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var allYears = _libraryManager.RootFolder.RecursiveChildren
+ var allYears = _libraryManager.RootFolder.GetRecursiveChildren(i => i.ProductionYear.HasValue)
.Select(i => i.ProductionYear ?? -1)
.Where(i => i > 0)
.Distinct()
diff --git a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs
index 7c10f2767..6a3759f13 100644
--- a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs
@@ -17,7 +17,7 @@ namespace MediaBrowser.Server.Implementations.Photos
protected override Task<List<BaseItem>> GetItemsWithImages(IHasImages item)
{
var photoAlbum = (PhotoAlbum)item;
- var items = GetFinalItems(photoAlbum.RecursiveChildren.Where(i => i is Photo).ToList());
+ var items = GetFinalItems(photoAlbum.GetRecursiveChildren(i => i is Photo).ToList());
return Task.FromResult(items);
}
diff --git a/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs
index 2b2c52406..980c3d14a 100644
--- a/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs
+++ b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs
@@ -23,8 +23,7 @@ namespace MediaBrowser.Server.Implementations.Playlists
protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)
{
- return RecursiveChildren
- .OfType<Playlist>();
+ return GetRecursiveChildren(i => i is Playlist);
}
public override bool IsHidden
diff --git a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs b/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs
index 8da9ba222..c511f40e0 100644
--- a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs
+++ b/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs
@@ -81,8 +81,7 @@ namespace MediaBrowser.Server.Implementations.Playlists
var folder = item as Folder;
if (folder != null)
{
- options.MediaType = folder.GetRecursiveChildren()
- .Where(i => !i.IsFolder && i.SupportsAddingToPlaylist)
+ options.MediaType = folder.GetRecursiveChildren(i => !i.IsFolder && i.SupportsAddingToPlaylist)
.Select(i => i.MediaType)
.FirstOrDefault(i => !string.IsNullOrWhiteSpace(i));
}
diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs
index 2a115c8dd..7132db2ef 100644
--- a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs
+++ b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs
@@ -145,8 +145,8 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks
/// <returns>Task.</returns>
public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
{
- var videos = _libraryManager.RootFolder.RecursiveChildren
- .OfType<Video>()
+ var videos = _libraryManager.RootFolder.GetRecursiveChildren(i => i is Video)
+ .Cast<Video>()
.ToList();
var numComplete = 0;
diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs
index 7112c2357..5284a42e4 100644
--- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs
+++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs
@@ -899,10 +899,9 @@ namespace MediaBrowser.Server.Implementations.Session
{
var folder = (Folder)item;
- var items = user == null ? folder.RecursiveChildren :
- folder.GetRecursiveChildren(user);
-
- items = items.Where(i => !i.IsFolder);
+ var items = user == null ?
+ folder.GetRecursiveChildren(i => !i.IsFolder) :
+ folder.GetRecursiveChildren(user, i => !i.IsFolder);
items = items.OrderBy(i => i.SortName);
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
index b926ee338..fd4474b80 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
@@ -288,18 +288,14 @@ namespace MediaBrowser.Server.Implementations.Sync
var itemByName = item as IItemByName;
if (itemByName != null)
{
- var items = user.RootFolder
- .GetRecursiveChildren(user);
-
- return itemByName.GetTaggedItems(items);
+ return user.RootFolder
+ .GetRecursiveChildren(user, itemByName.ItemFilter);
}
if (item.IsFolder)
{
var folder = (Folder)item;
- var items = folder.GetRecursiveChildren(user);
-
- items = items.Where(i => !i.IsFolder);
+ var items = folder.GetRecursiveChildren(user, i => !i.IsFolder);
if (!folder.IsPreSorted)
{
diff --git a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
index 8c21727a4..11dfb4791 100644
--- a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
+++ b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
@@ -36,8 +36,8 @@ namespace MediaBrowser.Server.Implementations.TV
? new string[] { }
: new[] { request.ParentId };
- var items = GetAllLibraryItems(user, parentIds)
- .OfType<Series>();
+ var items = GetAllLibraryItems(user, parentIds, i => i is Series)
+ .Cast<Series>();
// Avoid implicitly captured closure
var episodes = GetNextUpEpisodes(request, user, items);
@@ -54,8 +54,9 @@ namespace MediaBrowser.Server.Implementations.TV
throw new ArgumentException("User not found");
}
- var items = parentsFolders.SelectMany(i => i.GetRecursiveChildren(user))
- .OfType<Series>();
+ var items = parentsFolders
+ .SelectMany(i => i.GetRecursiveChildren(user, s => s is Series))
+ .Cast<Series>();
// Avoid implicitly captured closure
var episodes = GetNextUpEpisodes(request, user, items);
@@ -63,7 +64,7 @@ namespace MediaBrowser.Server.Implementations.TV
return GetResult(episodes, null, request);
}
- private IEnumerable<BaseItem> GetAllLibraryItems(User user, string[] parentIds)
+ private IEnumerable<BaseItem> GetAllLibraryItems(User user, string[] parentIds, Func<BaseItem,bool> filter)
{
if (parentIds.Length > 0)
{
@@ -71,7 +72,7 @@ namespace MediaBrowser.Server.Implementations.TV
{
var folder = (Folder)_libraryManager.GetItemById(new Guid(i));
- return folder.GetRecursiveChildren(user);
+ return folder.GetRecursiveChildren(user, filter);
});
}
@@ -81,7 +82,7 @@ namespace MediaBrowser.Server.Implementations.TV
throw new ArgumentException("User not found");
}
- return user.RootFolder.GetRecursiveChildren(user);
+ return user.RootFolder.GetRecursiveChildren(user, filter);
}
public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<Series> series)
@@ -126,6 +127,7 @@ namespace MediaBrowser.Server.Implementations.TV
{
// Get them in display order, then reverse
var allEpisodes = series.GetSeasons(user, true, true)
+ .Where(i => !i.IndexNumber.HasValue || i.IndexNumber.Value != 0)
.SelectMany(i => i.GetEpisodes(user, true, true))
.Reverse()
.ToList();