|
@@ -6,6 +6,7 @@ using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Runtime.Serialization;
|
|
|
+using System.Threading.Tasks;
|
|
|
|
|
|
namespace MediaBrowser.Controller.Playlists
|
|
|
{
|
|
@@ -50,12 +51,12 @@ namespace MediaBrowser.Controller.Playlists
|
|
|
|
|
|
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
|
|
{
|
|
|
- return GetPlayableItems(user);
|
|
|
+ return GetPlayableItems(user).Result;
|
|
|
}
|
|
|
|
|
|
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, Func<BaseItem, bool> filter)
|
|
|
{
|
|
|
- var items = GetPlayableItems(user);
|
|
|
+ var items = GetPlayableItems(user).Result;
|
|
|
|
|
|
if (filter != null)
|
|
|
{
|
|
@@ -70,23 +71,30 @@ namespace MediaBrowser.Controller.Playlists
|
|
|
return GetLinkedChildrenInfos();
|
|
|
}
|
|
|
|
|
|
- private IEnumerable<BaseItem> GetPlayableItems(User user)
|
|
|
+ private Task<IEnumerable<BaseItem>> GetPlayableItems(User user)
|
|
|
{
|
|
|
return GetPlaylistItems(MediaType, base.GetChildren(user, true), user);
|
|
|
}
|
|
|
|
|
|
- public static IEnumerable<BaseItem> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user)
|
|
|
+ public static async Task<IEnumerable<BaseItem>> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user)
|
|
|
{
|
|
|
if (user != null)
|
|
|
{
|
|
|
inputItems = inputItems.Where(i => i.IsVisible(user));
|
|
|
}
|
|
|
|
|
|
- return inputItems.SelectMany(i => GetPlaylistItems(i, user))
|
|
|
- .Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase));
|
|
|
+ var list = new List<BaseItem>();
|
|
|
+
|
|
|
+ foreach (var item in inputItems)
|
|
|
+ {
|
|
|
+ var playlistItems = await GetPlaylistItems(item, user, playlistMediaType).ConfigureAwait(false);
|
|
|
+ list.AddRange(playlistItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
- private static IEnumerable<BaseItem> GetPlaylistItems(BaseItem item, User user)
|
|
|
+ private static async Task<IEnumerable<BaseItem>> GetPlaylistItems(BaseItem item, User user, string mediaType)
|
|
|
{
|
|
|
var musicGenre = item as MusicGenre;
|
|
|
if (musicGenre != null)
|
|
@@ -119,15 +127,18 @@ namespace MediaBrowser.Controller.Playlists
|
|
|
var folder = item as Folder;
|
|
|
if (folder != null)
|
|
|
{
|
|
|
- var items = user == null
|
|
|
- ? folder.GetRecursiveChildren(m => !m.IsFolder)
|
|
|
- : folder.GetRecursiveChildren(user, m => !m.IsFolder);
|
|
|
-
|
|
|
- if (folder.IsPreSorted)
|
|
|
+ var query = new InternalItemsQuery(user)
|
|
|
{
|
|
|
- return items;
|
|
|
- }
|
|
|
- return LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
|
|
|
+ Recursive = true,
|
|
|
+ IsFolder = false,
|
|
|
+ SortBy = new[] { ItemSortBy.SortName },
|
|
|
+ MediaTypes = new[] { mediaType }
|
|
|
+ };
|
|
|
+
|
|
|
+ var itemsResult = await folder.GetItems(query).ConfigureAwait(false);
|
|
|
+ var items = itemsResult.Items;
|
|
|
+
|
|
|
+ return items;
|
|
|
}
|
|
|
|
|
|
return new[] { item };
|