From 91ffff7771cb4ae9f89dbc2cb7a5cec70a3301c2 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 4 Sep 2014 23:48:53 -0400 Subject: added dlna music folders --- .../Entities/Audio/IHasAlbumArtist.cs | 2 + MediaBrowser.Controller/Entities/MusicVideo.cs | 17 +++ .../Entities/UserViewBuilder.cs | 131 +++++++++++++++++---- MediaBrowser.Controller/Library/ILibraryManager.cs | 11 ++ .../Library/IUserViewManager.cs | 2 + 5 files changed, 142 insertions(+), 21 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs index ca079c3bf..a20f05323 100644 --- a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs +++ b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs @@ -12,5 +12,7 @@ namespace MediaBrowser.Controller.Entities.Audio bool HasArtist(string name); List AllArtists { get; } + + List Artists { get; } } } diff --git a/MediaBrowser.Controller/Entities/MusicVideo.cs b/MediaBrowser.Controller/Entities/MusicVideo.cs index bbb2bc875..d36bfd7c4 100644 --- a/MediaBrowser.Controller/Entities/MusicVideo.cs +++ b/MediaBrowser.Controller/Entities/MusicVideo.cs @@ -41,6 +41,23 @@ namespace MediaBrowser.Controller.Entities ProductionLocations = new List(); } + [IgnoreDataMember] + public List Artists + { + get + { + var list = new List(); + + if (!string.IsNullOrEmpty(Artist)) + { + list.Add(Artist); + } + + return list; + + } + } + [IgnoreDataMember] public List AllArtists { diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index bc97a43b7..d8da31196 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -171,6 +171,18 @@ namespace MediaBrowser.Controller.Entities case CollectionType.MovieCollections: return GetMovieCollections(parent, user, query); + case CollectionType.MusicLatest: + return GetMusicLatest(parent, user, query); + + case CollectionType.MusicAlbums: + return GetMusicAlbums(parent, user, query); + + case CollectionType.MusicAlbumArtists: + return GetMusicAlbumArtists(parent, user, query); + + case CollectionType.MusicArtists: + return GetMusicArtists(parent, user, query); + default: return GetResult(GetMediaFolders(user).SelectMany(i => i.GetChildren(user, true)), query); } @@ -188,7 +200,78 @@ namespace MediaBrowser.Controller.Entities return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }), query); } - return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).OfType(), query); + var list = new List(); + + var category = "music"; + + list.Add(await GetUserView(category, CollectionType.MusicLatest, user, "0", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.MusicAlbums, user, "1", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.MusicAlbumArtists, user, "2", parent).ConfigureAwait(false)); + //list.Add(await GetUserView(CollectionType.MusicArtists, user, "3", parent).ConfigureAwait(false)); + //list.Add(await GetUserView(CollectionType.MusicGenres, user, "5", parent).ConfigureAwait(false)); + + return GetResult(list, query); + } + + private QueryResult GetMusicAlbumArtists(Folder parent, User user, UserItemsQuery query) + { + var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music }) + .Where(i => !i.IsFolder) + .OfType() + .SelectMany(i => i.AlbumArtists) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(i => + { + try + { + return _libraryManager.GetArtist(i); + } + catch + { + // Already logged at lower levels + return null; + } + }) + .Where(i => i != null); + + return GetResult(artists, query); + } + + private QueryResult GetMusicArtists(Folder parent, User user, UserItemsQuery query) + { + var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music }) + .Where(i => !i.IsFolder) + .OfType() + .SelectMany(i => i.Artists) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(i => + { + try + { + return _libraryManager.GetArtist(i); + } + catch + { + // Already logged at lower levels + return null; + } + }) + .Where(i => i != null); + + return GetResult(artists, query); + } + + private QueryResult GetMusicAlbums(Folder parent, User user, UserItemsQuery query) + { + return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).Where(i => i is MusicAlbum), query); + } + + private QueryResult GetMusicLatest(Folder parent, User user, UserItemsQuery query) + { + query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName }; + query.SortOrder = SortOrder.Descending; + + return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).Where(i => i is MusicVideo || i is Audio.Audio), GetSpecialItemsLimit(), query); } private async Task> GetMovieFolders(Folder parent, User user, UserItemsQuery query) @@ -200,11 +283,13 @@ namespace MediaBrowser.Controller.Entities var list = new List(); - list.Add(await GetUserView(CollectionType.MovieResume, user, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.MovieLatest, user, "1", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.MovieMovies, user, "2", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.MovieCollections, user, "3", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.MovieFavorites, user, "4", parent).ConfigureAwait(false)); + var category = "movies"; + + list.Add(await GetUserView(category, CollectionType.MovieResume, user, "0", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.MovieLatest, user, "1", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.MovieMovies, user, "2", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.MovieCollections, user, "3", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.MovieFavorites, user, "4", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.MovieGenres, user, "5", parent).ConfigureAwait(false)); return GetResult(list, query); @@ -243,7 +328,7 @@ namespace MediaBrowser.Controller.Entities return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), GetSpecialItemsLimit(), query); } - + private QueryResult GetMovieGenres(Folder parent, User user, UserItemsQuery query) { var genres = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }) @@ -278,10 +363,12 @@ namespace MediaBrowser.Controller.Entities var list = new List(); - list.Add(await GetUserView(CollectionType.TvResume, user, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.TvNextUp, user, "1", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.TvLatest, user, "2", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.TvSeries, user, "3", parent).ConfigureAwait(false)); + var category = "tv"; + + list.Add(await GetUserView(category, CollectionType.TvResume, user, "0", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.TvNextUp, user, "1", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.TvLatest, user, "2", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.TvSeries, user, "3", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.TvFavorites, user, "4", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.TvGenres, user, "5", parent).ConfigureAwait(false)); @@ -297,10 +384,12 @@ namespace MediaBrowser.Controller.Entities var list = new List(); - list.Add(await GetUserView(CollectionType.LatestGames, user, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.RecentlyPlayedGames, user, "1", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.GameFavorites, user, "2", parent).ConfigureAwait(false)); - list.Add(await GetUserView(CollectionType.GameSystems, user, "3", parent).ConfigureAwait(false)); + var category = "games"; + + list.Add(await GetUserView(category, CollectionType.LatestGames, user, "0", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.RecentlyPlayedGames, user, "1", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.GameFavorites, user, "2", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.GameSystems, user, "3", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.GameGenres, user, "4", parent).ConfigureAwait(false)); return GetResult(list, query); @@ -341,7 +430,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult GetTvNextUp(Folder parent, UserItemsQuery query) { var parentFolders = GetMediaFolders(parent, query.User, new[] { CollectionType.TvShows, string.Empty }); - + var result = _tvSeriesManager.GetNextUp(new NextUpQuery { Limit = query.Limit, @@ -589,16 +678,16 @@ namespace MediaBrowser.Controller.Entities { var list = new List(); - list.Add(await _userViewManager.GetUserView(CollectionType.LiveTvNowPlaying, user, "0", CancellationToken.None).ConfigureAwait(false)); - list.Add(await _userViewManager.GetUserView(CollectionType.LiveTvChannels, user, string.Empty, CancellationToken.None).ConfigureAwait(false)); - list.Add(await _userViewManager.GetUserView(CollectionType.LiveTvRecordingGroups, user, string.Empty, CancellationToken.None).ConfigureAwait(false)); + list.Add(await _userViewManager.GetUserView("livetv", CollectionType.LiveTvNowPlaying, user, "0", CancellationToken.None).ConfigureAwait(false)); + list.Add(await _userViewManager.GetUserView("livetv", CollectionType.LiveTvChannels, user, string.Empty, CancellationToken.None).ConfigureAwait(false)); + list.Add(await _userViewManager.GetUserView("livetv", CollectionType.LiveTvRecordingGroups, user, string.Empty, CancellationToken.None).ConfigureAwait(false)); return list; } - private async Task GetUserView(string type, User user, string sortName, Folder parent) + private async Task GetUserView(string category, string type, User user, string sortName, Folder parent) { - var view = await _userViewManager.GetUserView(type, user, sortName, CancellationToken.None) + var view = await _userViewManager.GetUserView(category, type, user, sortName, CancellationToken.None) .ConfigureAwait(false); if (parent.Id != view.ParentId) diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index 5f88e0e58..8aaa08fdd 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -336,10 +336,21 @@ namespace MediaBrowser.Controller.Library /// Gets the named folder. /// /// The name. + /// The category. /// Type of the view. /// Name of the sort. /// The cancellation token. /// Task{Folder}. + Task GetNamedView(string name, string category, string viewType, string sortName, CancellationToken cancellationToken); + + /// + /// Gets the named view. + /// + /// The name. + /// Type of the view. + /// Name of the sort. + /// The cancellation token. + /// Task<UserView>. Task GetNamedView(string name, string viewType, string sortName, CancellationToken cancellationToken); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Library/IUserViewManager.cs b/MediaBrowser.Controller/Library/IUserViewManager.cs index 908525a2f..5b6189837 100644 --- a/MediaBrowser.Controller/Library/IUserViewManager.cs +++ b/MediaBrowser.Controller/Library/IUserViewManager.cs @@ -11,5 +11,7 @@ namespace MediaBrowser.Controller.Library Task> GetUserViews(UserViewQuery query, CancellationToken cancellationToken); Task GetUserView(string type, User user, string sortName, CancellationToken cancellationToken); + + Task GetUserView(string category, string type, User user, string sortName, CancellationToken cancellationToken); } } -- cgit v1.2.3