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