Browse Source

Consolidated handlers that return lists of items. Renamed ApiBaseItemWrapper to ApiBaseItemContainer. Added Person and Studio DTO's to BaseItemWrapper

LukePulverenti Luke Pulverenti luke pulverenti 13 năm trước cách đây
mục cha
commit
5c6ec34a9c

+ 41 - 3
MediaBrowser.Api/ApiService.cs

@@ -24,9 +24,9 @@ namespace MediaBrowser.Api
         /// <summary>
         /// Takes a BaseItem and returns the actual object that will be serialized by the api
         /// </summary>
-        public static BaseItemWrapper<BaseItem> GetSerializationObject(BaseItem item, bool includeChildren, Guid userId)
+        public static BaseItemContainer<BaseItem> GetSerializationObject(BaseItem item, bool includeChildren, Guid userId)
         {
-            BaseItemWrapper<BaseItem> wrapper = new BaseItemWrapper<BaseItem>()
+            BaseItemContainer<BaseItem> wrapper = new BaseItemContainer<BaseItem>()
             {
                 Item = item,
                 UserItemData = Kernel.Instance.GetUserItemData(userId, item.Id),
@@ -60,7 +60,45 @@ namespace MediaBrowser.Api
                     wrapper.Children = Kernel.Instance.GetParentalAllowedChildren(folder, userId).Select(c => GetSerializationObject(c, false, userId));
                 }
 
-                wrapper.People = item.People;
+                // Attach People by transforming them into BaseItemPerson (DTO)
+                if (item.People != null)
+                {
+                    wrapper.People = item.People.Select(p =>
+                    {
+                        BaseItemPerson baseItemPerson = new BaseItemPerson();
+
+                        baseItemPerson.PersonInfo = p;
+
+                        Person ibnObject = Kernel.Instance.ItemController.GetPerson(p.Name);
+
+                        if (ibnObject != null)
+                        {
+                            baseItemPerson.PrimaryImagePath = ibnObject.PrimaryImagePath;
+                        }
+
+                        return baseItemPerson;
+                    });
+                }
+            }
+
+            // Attach Studios by transforming them into BaseItemStudio (DTO)
+            if (item.Studios != null)
+            {
+                wrapper.Studios = item.Studios.Select(s =>
+                {
+                    BaseItemStudio baseItemStudio = new BaseItemStudio();
+
+                    baseItemStudio.Name = s;
+
+                    Studio ibnObject = Kernel.Instance.ItemController.GetStudio(s);
+
+                    if (ibnObject != null)
+                    {
+                        baseItemStudio.PrimaryImagePath = ibnObject.PrimaryImagePath;
+                    }
+
+                    return baseItemStudio;
+                });
             }
 
             return wrapper;

+ 2 - 2
MediaBrowser.Api/HttpHandlers/GenresHandler.cs

@@ -7,9 +7,9 @@ using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Api.HttpHandlers
 {
-    public class GenresHandler : BaseJsonHandler<IEnumerable<CategoryInfo<Genre>>>
+    public class GenresHandler : BaseJsonHandler<IEnumerable<IBNItem<Genre>>>
     {
-        protected override IEnumerable<CategoryInfo<Genre>> GetObjectToSerialize()
+        protected override IEnumerable<IBNItem<Genre>> GetObjectToSerialize()
         {
             Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
             Guid userId = Guid.Parse(QueryString["userid"]);

+ 0 - 19
MediaBrowser.Api/HttpHandlers/InProgressItemsHandler.cs

@@ -1,19 +0,0 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Api.HttpHandlers
-{
-    class InProgressItemsHandler : ItemListHandler
-    {
-        protected override IEnumerable<BaseItem> ItemsToSerialize
-        {
-            get
-            {
-                Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
-
-                return Kernel.Instance.GetInProgressItems(parent, UserId);
-            }
-        }
-    }
-}

+ 2 - 2
MediaBrowser.Api/HttpHandlers/ItemHandler.cs

@@ -5,9 +5,9 @@ using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Api.HttpHandlers
 {
-    public class ItemHandler : BaseJsonHandler<BaseItemWrapper<BaseItem>>
+    public class ItemHandler : BaseJsonHandler<BaseItemContainer<BaseItem>>
     {
-        protected sealed override BaseItemWrapper<BaseItem> GetObjectToSerialize()
+        protected sealed override BaseItemContainer<BaseItem> GetObjectToSerialize()
         {
             Guid userId = Guid.Parse(QueryString["userid"]);
 

+ 55 - 4
MediaBrowser.Api/HttpHandlers/ItemListHandler.cs

@@ -2,14 +2,15 @@
 using System.Collections.Generic;
 using System.Linq;
 using MediaBrowser.Common.Net.Handlers;
+using MediaBrowser.Controller;
 using MediaBrowser.Model.DTO;
 using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Api.HttpHandlers
 {
-    public abstract class ItemListHandler : BaseJsonHandler<IEnumerable<BaseItemWrapper<BaseItem>>>
+    public class ItemListHandler : BaseJsonHandler<IEnumerable<BaseItemContainer<BaseItem>>>
     {
-        protected override IEnumerable<BaseItemWrapper<BaseItem>> GetObjectToSerialize()
+        protected override IEnumerable<BaseItemContainer<BaseItem>> GetObjectToSerialize()
         {
             return ItemsToSerialize.Select(i =>
             {
@@ -18,9 +19,51 @@ namespace MediaBrowser.Api.HttpHandlers
             });
         }
 
-        protected abstract IEnumerable<BaseItem> ItemsToSerialize
+        protected IEnumerable<BaseItem> ItemsToSerialize
         {
-            get;
+            get
+            {
+                Folder parent = ApiService.GetItemById(ItemId) as Folder;
+                
+                if (ListType.Equals("inprogressitems", StringComparison.OrdinalIgnoreCase))
+                {
+                    return Kernel.Instance.GetInProgressItems(parent, UserId);
+                }
+                else if (ListType.Equals("recentlyaddeditems", StringComparison.OrdinalIgnoreCase))
+                {
+                    return Kernel.Instance.GetRecentlyAddedItems(parent, UserId);
+                }
+                else if (ListType.Equals("recentlyaddedunplayeditems", StringComparison.OrdinalIgnoreCase))
+                {
+                    return Kernel.Instance.GetRecentlyAddedUnplayedItems(parent, UserId);
+                }
+                else if (ListType.Equals("itemswithgenre", StringComparison.OrdinalIgnoreCase))
+                {
+                    return Kernel.Instance.GetItemsWithGenre(parent, QueryString["name"], UserId);
+                }
+                else if (ListType.Equals("itemswithyear", StringComparison.OrdinalIgnoreCase))
+                {
+                    return Kernel.Instance.GetItemsWithYear(parent, int.Parse(QueryString["year"]), UserId);
+                }
+                else if (ListType.Equals("itemswithstudio", StringComparison.OrdinalIgnoreCase))
+                {
+                    return Kernel.Instance.GetItemsWithStudio(parent, QueryString["name"], UserId);
+                }
+                else if (ListType.Equals("itemswithperson", StringComparison.OrdinalIgnoreCase))
+                {
+                    return Kernel.Instance.GetItemsWithPerson(parent, QueryString["name"], UserId);
+                }
+
+                throw new InvalidOperationException();
+            }
+        }
+
+        protected string ItemId
+        {
+            get
+            {
+                return QueryString["id"];
+            }
         }
 
         protected Guid UserId
@@ -30,5 +73,13 @@ namespace MediaBrowser.Api.HttpHandlers
                 return Guid.Parse(QueryString["userid"]);
             }
         }
+        
+        private string ListType
+        {
+            get
+            {
+                return QueryString["listtype"] ?? string.Empty;
+            }
+        }
     }
 }

+ 0 - 22
MediaBrowser.Api/HttpHandlers/ItemsWithGenreHandler.cs

@@ -1,22 +0,0 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Api.HttpHandlers
-{
-    /// <summary>
-    /// Gets all items within a Genre
-    /// </summary>
-    public class ItemsWithGenreHandler : ItemListHandler
-    {
-        protected override IEnumerable<BaseItem> ItemsToSerialize
-        {
-            get
-            {
-                Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
-
-                return Kernel.Instance.GetItemsWithGenre(parent, QueryString["name"], UserId);
-            }
-        }
-    }
-}

+ 0 - 32
MediaBrowser.Api/HttpHandlers/ItemsWithPersonHandler.cs

@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using MediaBrowser.Controller;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Api.HttpHandlers
-{
-    /// <summary>
-    /// Gets all items within containing a person
-    /// </summary>
-    public class ItemsWithPersonHandler : ItemListHandler
-    {
-        protected override IEnumerable<BaseItem> ItemsToSerialize
-        {
-            get
-            {
-                Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
-
-                PersonType? personType = null;
-
-                string type = QueryString["persontype"];
-
-                if (!string.IsNullOrEmpty(type))
-                {
-                    personType = (PersonType)Enum.Parse(typeof(PersonType), type, true);
-                }
-
-                return Kernel.Instance.GetItemsWithPerson(parent, QueryString["name"], personType, UserId);
-            }
-        }
-    }
-}

+ 0 - 22
MediaBrowser.Api/HttpHandlers/ItemsWithStudioHandler.cs

@@ -1,22 +0,0 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Api.HttpHandlers
-{
-    /// <summary>
-    /// Gets all items within containing a studio
-    /// </summary>
-    public class ItemsWithStudioHandler : ItemListHandler
-    {
-        protected override IEnumerable<BaseItem> ItemsToSerialize
-        {
-            get
-            {
-                Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
-
-                return Kernel.Instance.GetItemsWithStudio(parent, QueryString["name"], UserId);
-            }
-        }
-    }
-}

+ 0 - 22
MediaBrowser.Api/HttpHandlers/ItemsWithYearHandler.cs

@@ -1,22 +0,0 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Api.HttpHandlers
-{
-    /// <summary>
-    /// Gets all items within containing a studio
-    /// </summary>
-    public class ItemsWithYearHandler : ItemListHandler
-    {
-        protected override IEnumerable<BaseItem> ItemsToSerialize
-        {
-            get
-            {
-                Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
-
-                return Kernel.Instance.GetItemsWithYear(parent, int.Parse(QueryString["name"]), UserId);
-            }
-        }
-    }
-}

+ 0 - 24
MediaBrowser.Api/HttpHandlers/RecentlyAddedItemsHandler.cs

@@ -1,24 +0,0 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Api.HttpHandlers
-{
-    class RecentlyAddedItemsHandler : ItemListHandler
-    {
-        protected override IEnumerable<BaseItem> ItemsToSerialize
-        {
-            get
-            {
-                Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
-
-                if (QueryString["unplayed"] == "1")
-                {
-                    return Kernel.Instance.GetRecentlyAddedUnplayedItems(parent, UserId);
-                }
-
-                return Kernel.Instance.GetRecentlyAddedItems(parent, UserId);
-            }
-        }
-    }
-}

+ 2 - 2
MediaBrowser.Api/HttpHandlers/StudiosHandler.cs

@@ -7,9 +7,9 @@ using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Api.HttpHandlers
 {
-    public class StudiosHandler : BaseJsonHandler<IEnumerable<CategoryInfo<Studio>>>
+    public class StudiosHandler : BaseJsonHandler<IEnumerable<IBNItem<Studio>>>
     {
-        protected override IEnumerable<CategoryInfo<Studio>> GetObjectToSerialize()
+        protected override IEnumerable<IBNItem<Studio>> GetObjectToSerialize()
         {
             Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
             Guid userId = Guid.Parse(QueryString["userid"]);

+ 0 - 17
MediaBrowser.Api/HttpHandlers/UserConfigurationHandler.cs

@@ -1,17 +0,0 @@
-using System;
-using MediaBrowser.Common.Net.Handlers;
-using MediaBrowser.Controller;
-using MediaBrowser.Model.Configuration;
-
-namespace MediaBrowser.Api.HttpHandlers
-{
-    public class UserConfigurationHandler : BaseJsonHandler<UserConfiguration>
-    {
-        protected override UserConfiguration GetObjectToSerialize()
-        {
-            Guid userId = Guid.Parse(QueryString["userid"]);
-
-            return Kernel.Instance.GetUserConfiguration(userId);
-        }
-    }
-}

+ 2 - 2
MediaBrowser.Api/HttpHandlers/YearsHandler.cs

@@ -7,9 +7,9 @@ using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Api.HttpHandlers
 {
-    public class YearsHandler : BaseJsonHandler<IEnumerable<CategoryInfo<Year>>>
+    public class YearsHandler : BaseJsonHandler<IEnumerable<IBNItem<Year>>>
     {
-        protected override IEnumerable<CategoryInfo<Year>> GetObjectToSerialize()
+        protected override IEnumerable<IBNItem<Year>> GetObjectToSerialize()
         {
             Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
             Guid userId = Guid.Parse(QueryString["userid"]);

+ 0 - 7
MediaBrowser.Api/MediaBrowser.Api.csproj

@@ -49,23 +49,16 @@
     <Compile Include="ApiService.cs" />
     <Compile Include="HttpHandlers\AudioHandler.cs" />
     <Compile Include="HttpHandlers\BaseMediaHandler.cs" />
-    <Compile Include="HttpHandlers\ItemsWithGenreHandler.cs" />
     <Compile Include="HttpHandlers\GenresHandler.cs" />
     <Compile Include="HttpHandlers\ImageHandler.cs" />
-    <Compile Include="HttpHandlers\InProgressItemsHandler.cs" />
     <Compile Include="HttpHandlers\ItemHandler.cs" />
     <Compile Include="HttpHandlers\ItemListHandler.cs" />
-    <Compile Include="HttpHandlers\ItemsWithPersonHandler.cs" />
     <Compile Include="HttpHandlers\PersonHandler.cs" />
     <Compile Include="HttpHandlers\PluginConfigurationHandler.cs" />
     <Compile Include="HttpHandlers\PluginsHandler.cs" />
-    <Compile Include="HttpHandlers\RecentlyAddedItemsHandler.cs" />
-    <Compile Include="HttpHandlers\ItemsWithStudioHandler.cs" />
     <Compile Include="HttpHandlers\StudiosHandler.cs" />
-    <Compile Include="HttpHandlers\UserConfigurationHandler.cs" />
     <Compile Include="HttpHandlers\UsersHandler.cs" />
     <Compile Include="HttpHandlers\VideoHandler.cs" />
-    <Compile Include="HttpHandlers\ItemsWithYearHandler.cs" />
     <Compile Include="HttpHandlers\YearsHandler.cs" />
     <Compile Include="ImageProcessor.cs" />
     <Compile Include="Plugin.cs" />

+ 2 - 26
MediaBrowser.Api/Plugin.cs

@@ -49,46 +49,22 @@ namespace MediaBrowser.Api
             {
                 return new UsersHandler();
             }
-            else if (localPath.EndsWith("/api/itemswithgenre", StringComparison.OrdinalIgnoreCase))
+            else if (localPath.EndsWith("/api/itemlist", StringComparison.OrdinalIgnoreCase))
             {
-                return new ItemsWithGenreHandler();
+                return new ItemListHandler();
             }
             else if (localPath.EndsWith("/api/genres", StringComparison.OrdinalIgnoreCase))
             {
                 return new GenresHandler();
             }
-            else if (localPath.EndsWith("/api/itemswithyear", StringComparison.OrdinalIgnoreCase))
-            {
-                return new ItemsWithYearHandler();
-            }
-            else if (localPath.EndsWith("/api/itemswithperson", StringComparison.OrdinalIgnoreCase))
-            {
-                return new ItemsWithPersonHandler();
-            }
             else if (localPath.EndsWith("/api/years", StringComparison.OrdinalIgnoreCase))
             {
                 return new YearsHandler();
             }
-            else if (localPath.EndsWith("/api/itemswithstudio", StringComparison.OrdinalIgnoreCase))
-            {
-                return new ItemsWithStudioHandler();
-            }
             else if (localPath.EndsWith("/api/studios", StringComparison.OrdinalIgnoreCase))
             {
                 return new StudiosHandler();
             }
-            else if (localPath.EndsWith("/api/recentlyaddeditems", StringComparison.OrdinalIgnoreCase))
-            {
-                return new RecentlyAddedItemsHandler();
-            }
-            else if (localPath.EndsWith("/api/inprogressitems", StringComparison.OrdinalIgnoreCase))
-            {
-                return new InProgressItemsHandler();
-            }
-            else if (localPath.EndsWith("/api/userconfiguration", StringComparison.OrdinalIgnoreCase))
-            {
-                return new UserConfigurationHandler();
-            }
             else if (localPath.EndsWith("/api/plugins", StringComparison.OrdinalIgnoreCase))
             {
                 return new PluginsHandler();

+ 22 - 36
MediaBrowser.ApiInteraction/ApiClient.cs

@@ -3,7 +3,6 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
-using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.DTO;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Users;
@@ -91,7 +90,7 @@ namespace MediaBrowser.ApiInteraction
         /// <param name="maxWidth">Use if a max width is required. Aspect ratio will be preserved.</param>
         /// <param name="maxHeight">Use if a max height is required. Aspect ratio will be preserved.</param>
         /// <param name="quality">Quality level, from 0-100. Currently only applies to JPG. The default value should suffice.</param>
-        public IEnumerable<string> GetBackdropImageUrls(BaseItemWrapper<ApiBaseItem> itemWrapper, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
+        public IEnumerable<string> GetBackdropImageUrls(ApiBaseItemContainer itemWrapper, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
         {
             Guid? backdropItemId = null;
             int backdropCount = 0;
@@ -131,7 +130,7 @@ namespace MediaBrowser.ApiInteraction
         /// <param name="maxWidth">Use if a max width is required. Aspect ratio will be preserved.</param>
         /// <param name="maxHeight">Use if a max height is required. Aspect ratio will be preserved.</param>
         /// <param name="quality">Quality level, from 0-100. Currently only applies to JPG. The default value should suffice.</param>
-        public string GetLogoImageUrl(BaseItemWrapper<ApiBaseItem> itemWrapper, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
+        public string GetLogoImageUrl(ApiBaseItemContainer itemWrapper, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
         {
             Guid? logoItemId = !string.IsNullOrEmpty(itemWrapper.Item.LogoImagePath) ? itemWrapper.Item.Id : itemWrapper.ParentLogoItemId;
 
@@ -154,7 +153,7 @@ namespace MediaBrowser.ApiInteraction
         /// <summary>
         /// Gets a BaseItem
         /// </summary>
-        public async Task<BaseItemWrapper<ApiBaseItem>> GetItemAsync(Guid id, Guid userId)
+        public async Task<ApiBaseItemContainer> GetItemAsync(Guid id, Guid userId)
         {
             string url = ApiUrl + "/item?userId=" + userId.ToString();
 
@@ -165,7 +164,7 @@ namespace MediaBrowser.ApiInteraction
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<BaseItemWrapper<ApiBaseItem>>(stream);
+                return JsonSerializer.DeserializeFromStream<ApiBaseItemContainer>(stream);
             }
         }
 
@@ -185,61 +184,61 @@ namespace MediaBrowser.ApiInteraction
         /// <summary>
         /// Gets all Genres
         /// </summary>
-        public async Task<IEnumerable<CategoryInfo<Genre>>> GetAllGenresAsync(Guid userId)
+        public async Task<IEnumerable<IBNItem<Genre>>> GetAllGenresAsync(Guid userId)
         {
             string url = ApiUrl + "/genres?userId=" + userId.ToString();
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<IEnumerable<CategoryInfo<Genre>>>(stream);
+                return JsonSerializer.DeserializeFromStream<IEnumerable<IBNItem<Genre>>>(stream);
             }
         }
 
         /// <summary>
         /// Gets all Years
         /// </summary>
-        public async Task<IEnumerable<CategoryInfo<Year>>> GetAllYearsAsync(Guid userId)
+        public async Task<IEnumerable<IBNItem<Year>>> GetAllYearsAsync(Guid userId)
         {
             string url = ApiUrl + "/years?userId=" + userId.ToString();
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<IEnumerable<CategoryInfo<Year>>>(stream);
+                return JsonSerializer.DeserializeFromStream<IEnumerable<IBNItem<Year>>>(stream);
             }
         }
 
         /// <summary>
         /// Gets all items that contain a given Year
         /// </summary>
-        public async Task<IEnumerable<BaseItemWrapper<ApiBaseItem>>> GetItemsWithYearAsync(string name, Guid userId)
+        public async Task<IEnumerable<ApiBaseItemContainer>> GetItemsWithYearAsync(string name, Guid userId)
         {
-            string url = ApiUrl + "/itemswithyear?userId=" + userId.ToString() + "&name=" + name;
+            string url = ApiUrl + "/itemlist?listtype=itemswithyear&userId=" + userId.ToString() + "&name=" + name;
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<IEnumerable<BaseItemWrapper<ApiBaseItem>>>(stream);
+                return JsonSerializer.DeserializeFromStream<IEnumerable<ApiBaseItemContainer>>(stream);
             }
         }
 
         /// <summary>
         /// Gets all items that contain a given Genre
         /// </summary>
-        public async Task<IEnumerable<BaseItemWrapper<ApiBaseItem>>> GetItemsWithGenreAsync(string name, Guid userId)
+        public async Task<IEnumerable<ApiBaseItemContainer>> GetItemsWithGenreAsync(string name, Guid userId)
         {
-            string url = ApiUrl + "/itemswithgenre?userId=" + userId.ToString() + "&name=" + name;
+            string url = ApiUrl + "/itemlist?listtype=itemswithgenre&userId=" + userId.ToString() + "&name=" + name;
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<IEnumerable<BaseItemWrapper<ApiBaseItem>>>(stream);
+                return JsonSerializer.DeserializeFromStream<IEnumerable<ApiBaseItemContainer>>(stream);
             }
         }
 
         /// <summary>
         /// Gets all items that contain a given Person
         /// </summary>
-        public async Task<IEnumerable<BaseItemWrapper<ApiBaseItem>>> GetItemsWithPersonAsync(string name, PersonType? personType, Guid userId)
+        public async Task<IEnumerable<ApiBaseItemContainer>> GetItemsWithPersonAsync(string name, PersonType? personType, Guid userId)
         {
-            string url = ApiUrl + "/itemswithperson?userId=" + userId.ToString() + "&name=" + name;
+            string url = ApiUrl + "/itemlist?listtype=itemswithperson&userId=" + userId.ToString() + "&name=" + name;
 
             if (personType.HasValue)
             {
@@ -248,46 +247,33 @@ namespace MediaBrowser.ApiInteraction
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<IEnumerable<BaseItemWrapper<ApiBaseItem>>>(stream);
+                return JsonSerializer.DeserializeFromStream<IEnumerable<ApiBaseItemContainer>>(stream);
             }
         }
 
         /// <summary>
         /// Gets all studious
         /// </summary>
-        public async Task<IEnumerable<CategoryInfo<Studio>>> GetAllStudiosAsync(Guid userId)
+        public async Task<IEnumerable<IBNItem<Studio>>> GetAllStudiosAsync(Guid userId)
         {
             string url = ApiUrl + "/studios?userId=" + userId.ToString();
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<IEnumerable<CategoryInfo<Studio>>>(stream);
-            }
-        }
-
-        /// <summary>
-        /// Gets the current personalized configuration
-        /// </summary>
-        public async Task<UserConfiguration> GetUserConfigurationAsync(Guid userId)
-        {
-            string url = ApiUrl + "/userconfiguration?userId=" + userId.ToString();
-
-            using (Stream stream = await HttpClient.GetStreamAsync(url))
-            {
-                return JsonSerializer.DeserializeFromStream<UserConfiguration>(stream);
+                return JsonSerializer.DeserializeFromStream<IEnumerable<IBNItem<Studio>>>(stream);
             }
         }
 
         /// <summary>
         /// Gets all items that contain a given Studio
         /// </summary>
-        public async Task<IEnumerable<BaseItemWrapper<ApiBaseItem>>> GetItemsWithStudioAsync(string name, Guid userId)
+        public async Task<IEnumerable<ApiBaseItemContainer>> GetItemsWithStudioAsync(string name, Guid userId)
         {
-            string url = ApiUrl + "/itemswithstudio?userId=" + userId.ToString() + "&name=" + name;
+            string url = ApiUrl + "/itemlist?listtype=itemswithstudio&userId=" + userId.ToString() + "&name=" + name;
 
             using (Stream stream = await HttpClient.GetStreamAsync(url))
             {
-                return JsonSerializer.DeserializeFromStream<IEnumerable<BaseItemWrapper<ApiBaseItem>>>(stream);
+                return JsonSerializer.DeserializeFromStream<IEnumerable<ApiBaseItemContainer>>(stream);
             }
         }
 

+ 0 - 27
MediaBrowser.Controller/Configuration/ServerConfiguration.cs

@@ -1,37 +1,10 @@
 using System.Collections.Generic;
 using MediaBrowser.Common.Configuration;
-using MediaBrowser.Model.Configuration;
 
 namespace MediaBrowser.Controller.Configuration
 {
     public class ServerConfiguration : BaseApplicationConfiguration
     {
         public string ImagesByNamePath { get; set; }
-
-        /// <summary>
-        /// Gets or sets the default UI configuration
-        /// </summary>
-        public UserConfiguration DefaultUserConfiguration { get; set; }
-
-        /// <summary>
-        /// Gets or sets a list of registered UI device names
-        /// </summary>
-        public List<string> DeviceNames { get; set; }
-
-        /// <summary>
-        /// Gets or sets all available UIConfigurations
-        /// The key contains device name and user id
-        /// </summary>
-        public Dictionary<string, UserConfiguration> UserConfigurations { get; set; }
-
-        public ServerConfiguration()
-            : base()
-        {
-            DefaultUserConfiguration = new UserConfiguration();
-
-            UserConfigurations = new Dictionary<string, UserConfiguration>();
-
-            DeviceNames = new List<string>();
-        }
     }
 }

+ 14 - 20
MediaBrowser.Controller/Kernel.cs

@@ -12,7 +12,6 @@ using MediaBrowser.Controller.Events;
 using MediaBrowser.Controller.IO;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Resolvers;
-using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.DTO;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Progress;
@@ -155,11 +154,6 @@ namespace MediaBrowser.Controller
             }
         }
 
-        public UserConfiguration GetUserConfiguration(Guid userId)
-        {
-            return Configuration.DefaultUserConfiguration;
-        }
-
         public void ReloadItem(BaseItem item)
         {
             Folder folder = item as Folder;
@@ -263,9 +257,9 @@ namespace MediaBrowser.Controller
         {
             DateTime now = DateTime.Now;
 
-            UserConfiguration config = GetUserConfiguration(userId);
+            User user = Users.First(u => u.Id == userId);
 
-            return GetParentalAllowedRecursiveChildren(parent, userId).Where(i => !(i is Folder) && (now - i.DateCreated).TotalDays < config.RecentItemDays);
+            return GetParentalAllowedRecursiveChildren(parent, userId).Where(i => !(i is Folder) && (now - i.DateCreated).TotalDays < user.RecentItemDays);
         }
 
         /// <summary>
@@ -358,7 +352,7 @@ namespace MediaBrowser.Controller
         /// Gets all years from all recursive children of a folder
         /// The CategoryInfo class is used to keep track of the number of times each year appears
         /// </summary>
-        public IEnumerable<CategoryInfo<Year>> GetAllYears(Folder parent, Guid userId)
+        public IEnumerable<IBNItem<Year>> GetAllYears(Folder parent, Guid userId)
         {
             Dictionary<int, int> data = new Dictionary<int, int>();
 
@@ -385,7 +379,7 @@ namespace MediaBrowser.Controller
             }
 
             // Now go through the dictionary and create a Category for each studio
-            List<CategoryInfo<Year>> list = new List<CategoryInfo<Year>>();
+            List<IBNItem<Year>> list = new List<IBNItem<Year>>();
 
             foreach (int key in data.Keys)
             {
@@ -394,10 +388,10 @@ namespace MediaBrowser.Controller
 
                 if (entity != null)
                 {
-                    list.Add(new CategoryInfo<Year>()
+                    list.Add(new IBNItem<Year>()
                     {
                         Item = entity,
-                        ItemCount = data[key]
+                        BaseItemCount = data[key]
                     });
                 }
             }
@@ -409,7 +403,7 @@ namespace MediaBrowser.Controller
         /// Gets all studios from all recursive children of a folder
         /// The CategoryInfo class is used to keep track of the number of times each studio appears
         /// </summary>
-        public IEnumerable<CategoryInfo<Studio>> GetAllStudios(Folder parent, Guid userId)
+        public IEnumerable<IBNItem<Studio>> GetAllStudios(Folder parent, Guid userId)
         {
             Dictionary<string, int> data = new Dictionary<string, int>();
 
@@ -439,7 +433,7 @@ namespace MediaBrowser.Controller
             }
 
             // Now go through the dictionary and create a Category for each studio
-            List<CategoryInfo<Studio>> list = new List<CategoryInfo<Studio>>();
+            List<IBNItem<Studio>> list = new List<IBNItem<Studio>>();
 
             foreach (string key in data.Keys)
             {
@@ -448,10 +442,10 @@ namespace MediaBrowser.Controller
 
                 if (entity != null)
                 {
-                    list.Add(new CategoryInfo<Studio>()
+                    list.Add(new IBNItem<Studio>()
                     {
                         Item = entity,
-                        ItemCount = data[key]
+                        BaseItemCount = data[key]
                     });
                 }
             }
@@ -463,7 +457,7 @@ namespace MediaBrowser.Controller
         /// Gets all genres from all recursive children of a folder
         /// The CategoryInfo class is used to keep track of the number of times each genres appears
         /// </summary>
-        public IEnumerable<CategoryInfo<Genre>> GetAllGenres(Folder parent, Guid userId)
+        public IEnumerable<IBNItem<Genre>> GetAllGenres(Folder parent, Guid userId)
         {
             Dictionary<string, int> data = new Dictionary<string, int>();
 
@@ -493,7 +487,7 @@ namespace MediaBrowser.Controller
             }
 
             // Now go through the dictionary and create a Category for each genre
-            List<CategoryInfo<Genre>> list = new List<CategoryInfo<Genre>>();
+            List<IBNItem<Genre>> list = new List<IBNItem<Genre>>();
 
             foreach (string key in data.Keys)
             {
@@ -502,10 +496,10 @@ namespace MediaBrowser.Controller
 
                 if (entity != null)
                 {
-                    list.Add(new CategoryInfo<Genre>()
+                    list.Add(new IBNItem<Genre>()
                     {
                         Item = entity,
-                        ItemCount = data[key]
+                        BaseItemCount = data[key]
                     });
                 }
             }

+ 0 - 16
MediaBrowser.Model/Configuration/UserConfiguration.cs

@@ -1,16 +0,0 @@
-
-namespace MediaBrowser.Model.Configuration
-{
-    /// <summary>
-    /// This holds settings that can be personalized on a per-user, per-device basis.
-    /// </summary>
-    public class UserConfiguration
-    {
-        public int RecentItemDays { get; set; }
-
-        public UserConfiguration()
-        {
-            RecentItemDays = 14;
-        }
-    }
-}

+ 7 - 6
MediaBrowser.Model/DTO/ApiBaseItem.cs

@@ -20,14 +20,14 @@ namespace MediaBrowser.Model.DTO
     /// <summary>
     /// This is the full return object when requesting an Item
     /// </summary>
-    public class BaseItemWrapper<T>
-        where T : BaseItem
+    public class BaseItemContainer<TItemType>
+        where TItemType : BaseItem
     {
-        public T Item { get; set; }
+        public TItemType Item { get; set; }
 
         public UserItemData UserItemData { get; set; }
 
-        public IEnumerable<BaseItemWrapper<T>> Children { get; set; }
+        public IEnumerable<BaseItemContainer<TItemType>> Children { get; set; }
 
         public bool IsFolder { get; set; }
 
@@ -45,7 +45,8 @@ namespace MediaBrowser.Model.DTO
             return Type.Equals(type, StringComparison.OrdinalIgnoreCase);
         }
 
-        public IEnumerable<PersonInfo> People { get; set; }
+        public IEnumerable<BaseItemPerson> People { get; set; }
+        public IEnumerable<BaseItemStudio> Studios { get; set; }
 
         /// <summary>
         /// If the item does not have a logo, this will hold the Id of the Parent that has one.
@@ -60,7 +61,7 @@ namespace MediaBrowser.Model.DTO
     /// <summary>
     /// This is strictly for convenience so the UI's don't have to use the verbose generic syntax of BaseItemWrapper<ApiBaseItem>
     /// </summary>
-    public class ApiBaseItemWrapper : BaseItemWrapper<ApiBaseItem>
+    public class ApiBaseItemContainer : BaseItemContainer<ApiBaseItem>
     {
     }
 }

+ 0 - 19
MediaBrowser.Model/DTO/CategoryInfo.cs

@@ -1,19 +0,0 @@
-
-namespace MediaBrowser.Model.DTO
-{
-    /// <summary>
-    /// This is a stub class used by the api to get IBN types along with their item counts
-    /// </summary>
-    public class CategoryInfo<T>
-    {
-        /// <summary>
-        /// The actual genre, year, studio, etc
-        /// </summary>
-        public T Item { get; set; }
-
-        /// <summary>
-        /// The number of items that have the genre, year, studio, etc
-        /// </summary>
-        public int ItemCount { get; set; }
-    }
-}

+ 38 - 0
MediaBrowser.Model/DTO/IBNItem.cs

@@ -0,0 +1,38 @@
+using MediaBrowser.Model.Entities;
+
+namespace MediaBrowser.Model.DTO
+{
+    /// <summary>
+    /// This is a stub class used by the api to get IBN types along with their item counts
+    /// </summary>
+    public class IBNItem<T>
+    {
+        /// <summary>
+        /// The actual genre, year, studio, etc
+        /// </summary>
+        public T Item { get; set; }
+
+        /// <summary>
+        /// The number of items that have the genre, year, studio, etc
+        /// </summary>
+        public int BaseItemCount { get; set; }
+    }
+
+    /// <summary>
+    /// This is used by BaseItemContainer
+    /// </summary>
+    public class BaseItemPerson
+    {
+        public PersonInfo PersonInfo { get; set; }
+        public string PrimaryImagePath { get; set; }
+    }
+
+    /// <summary>
+    /// This is used by BaseItemContainer
+    /// </summary>
+    public class BaseItemStudio
+    {
+        public string Name { get; set; }
+        public string PrimaryImagePath { get; set; }
+    }
+}

+ 0 - 1
MediaBrowser.Model/Entities/Person.cs

@@ -6,7 +6,6 @@ namespace MediaBrowser.Model.Entities
     /// </summary>
     public class Person : BaseEntity
     {
-        public PersonType PersonType { get; set; }
     }
 
     /// <summary>

+ 1 - 2
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -32,12 +32,11 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Compile Include="Configuration\UserConfiguration.cs" />
     <Compile Include="DTO\ApiBaseItem.cs" />
     <Compile Include="Entities\Audio.cs" />
     <Compile Include="Entities\BaseEntity.cs" />
     <Compile Include="Entities\BaseItem.cs" />
-    <Compile Include="DTO\CategoryInfo.cs" />
+    <Compile Include="DTO\IBNItem.cs" />
     <Compile Include="Entities\Folder.cs" />
     <Compile Include="Entities\Genre.cs" />
     <Compile Include="Entities\ImageType.cs" />

+ 7 - 0
MediaBrowser.Model/Users/User.cs

@@ -10,5 +10,12 @@ namespace MediaBrowser.Model.Users
 
         private Dictionary<Guid, UserItemData> _ItemData = new Dictionary<Guid, UserItemData>();
         public Dictionary<Guid, UserItemData> ItemData { get { return _ItemData; } set { _ItemData = value; } }
+
+        public int RecentItemDays { get; set; }
+
+        public User()
+        {
+            RecentItemDays = 14;
+        }
     }
 }