support custom ordering of user views

This commit is contained in:
Luke Pulverenti
2014-08-18 21:42:53 -04:00
parent 6a2f6782d3
commit b48d15296c
14 changed files with 195 additions and 78 deletions

View File

@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using System;
@@ -47,32 +48,54 @@ namespace MediaBrowser.Controller.Playlists
inputItems = inputItems.Where(i => i.IsVisible(user));
}
inputItems = inputItems.SelectMany(i =>
return inputItems.SelectMany(i => GetPlaylistItems(i, user))
.Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase));
}
private static IEnumerable<BaseItem> GetPlaylistItems(BaseItem i, User user)
{
var musicGenre = i as MusicGenre;
if (musicGenre != null)
{
var folder = i as Folder;
var songs = user.RootFolder
.GetRecursiveChildren(user)
.OfType<Audio>()
.Where(a => a.Genres.Contains(musicGenre.Name, StringComparer.OrdinalIgnoreCase));
if (folder != null)
return LibraryManager.Sort(songs, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
}
var musicArtist = i as MusicArtist;
if (musicArtist != null)
{
var songs = user.RootFolder
.GetRecursiveChildren(user)
.OfType<Audio>()
.Where(a => a.HasArtist(musicArtist.Name));
return LibraryManager.Sort(songs, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
}
var folder = i as Folder;
if (folder != null)
{
var items = user == null
? folder.GetRecursiveChildren()
: folder.GetRecursiveChildren(user, true);
items = items
.Where(m => !m.IsFolder);
if (!folder.IsPreSorted)
{
var items = user == null
? folder.GetRecursiveChildren()
: folder.GetRecursiveChildren(user, true);
items = items
.Where(m => !m.IsFolder);
if (!folder.IsPreSorted)
{
items = LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
}
return items;
items = LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
}
return new[] { i };
return items;
}
}).Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase));
return inputItems;
return new[] { i };
}
[IgnoreDataMember]

View File

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;