mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-22 10:04:44 +01:00
sync updates
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
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;
|
||||
});
|
||||
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 =>
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user