diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-06-04 22:32:40 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-06-04 22:32:40 -0400 |
| commit | 7049ad66f47f4de3a62e0cc10ca8911f1dc454a7 (patch) | |
| tree | 1984bb5f9780b0c413bbb62dcc66d91d2cb1d27e /MediaBrowser.Controller/Entities/UserView.cs | |
| parent | 39547de1f8ece19e609fe248514684c2f394ac2b (diff) | |
added library grouping settings.
Diffstat (limited to 'MediaBrowser.Controller/Entities/UserView.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/UserView.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs new file mode 100644 index 000000000..ce188554c --- /dev/null +++ b/MediaBrowser.Controller/Entities/UserView.cs @@ -0,0 +1,67 @@ +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Model.Entities; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MediaBrowser.Controller.Entities +{ + public class UserView : Folder + { + public string ViewType { get; set; } + + public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) + { + var mediaFolders = GetMediaFolders(user); + + switch (ViewType) + { + case CollectionType.Games: + return mediaFolders.SelectMany(i => i.GetRecursiveChildren(user, includeLinkedChildren)).OfType<GameSystem>(); + case CollectionType.BoxSets: + return mediaFolders.SelectMany(i => i.GetRecursiveChildren(user, includeLinkedChildren)).OfType<BoxSet>(); + case CollectionType.TvShows: + return mediaFolders.SelectMany(i => i.GetRecursiveChildren(user, includeLinkedChildren)).OfType<Series>(); + default: + return mediaFolders.SelectMany(i => i.GetChildren(user, includeLinkedChildren)); + } + } + + protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user) + { + return GetChildren(user, false); + } + + private IEnumerable<Folder> GetMediaFolders(User user) + { + var excludeFolderIds = user.Configuration.ExcludeFoldersFromGrouping.Select(i => new Guid(i)).ToList(); + + return user.RootFolder + .GetChildren(user, true) + .OfType<Folder>() + .Where(i => !excludeFolderIds.Contains(i.Id) && !IsExcludedFromGrouping(i)); + } + + public static bool IsExcludedFromGrouping(Folder folder) + { + var standaloneTypes = new List<string> + { + CollectionType.AdultVideos, + CollectionType.Books, + CollectionType.HomeVideos, + CollectionType.Photos, + CollectionType.Trailers + }; + + var collectionFolder = folder as CollectionFolder; + + if (collectionFolder == null) + { + return false; + } + + return standaloneTypes.Contains(collectionFolder.CollectionType ?? string.Empty); + } + } +} |
