diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations')
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(); |
