Browse Source

Added more IBN api methods

LukePulverenti Luke Pulverenti luke pulverenti 13 years ago
parent
commit
9c456c63c8

+ 53 - 0
MediaBrowser.Api/HttpHandlers/GenreHandler.cs

@@ -0,0 +1,53 @@
+using System;
+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
+{
+    /// <summary>
+    /// Gets a single genre
+    /// </summary>
+    public class GenreHandler : BaseJsonHandler<IBNItem<Genre>>
+    {
+        protected override IBNItem<Genre> GetObjectToSerialize()
+        {
+            Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
+            Guid userId = Guid.Parse(QueryString["userid"]);
+            User user = Kernel.Instance.Users.First(u => u.Id == userId);
+
+            string name = QueryString["name"];
+
+            return GetGenre(parent, user, name);
+        }
+
+        /// <summary>
+        /// Gets a Genre
+        /// </summary>
+        private IBNItem<Genre> GetGenre(Folder parent, User user, string name)
+        {
+            int count = 0;
+
+            // Get all the allowed recursive children
+            IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
+
+            foreach (var item in allItems)
+            {
+                if (item.Genres != null && item.Genres.Any(s => s.Equals(name, StringComparison.OrdinalIgnoreCase)))
+                {
+                    count++;
+                }
+            }
+
+            // Get the original entity so that we can also supply the PrimaryImagePath
+            return new IBNItem<Genre>()
+            {
+                Item = Kernel.Instance.ItemController.GetGenre(name),
+                BaseItemCount = count
+            };
+        }
+    }
+}

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

@@ -23,7 +23,7 @@ namespace MediaBrowser.Api.HttpHandlers
         /// Gets all genres from all recursive children of a folder
         /// 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
         /// The CategoryInfo class is used to keep track of the number of times each genres appears
         /// </summary>
         /// </summary>
-        public IEnumerable<IBNItem<Genre>> GetAllGenres(Folder parent, User user)
+        private IEnumerable<IBNItem<Genre>> GetAllGenres(Folder parent, User user)
         {
         {
             Dictionary<string, int> data = new Dictionary<string, int>();
             Dictionary<string, int> data = new Dictionary<string, int>();
 
 

+ 43 - 4
MediaBrowser.Api/HttpHandlers/PersonHandler.cs

@@ -1,14 +1,53 @@
-using MediaBrowser.Common.Net.Handlers;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MediaBrowser.Common.Net.Handlers;
 using MediaBrowser.Controller;
 using MediaBrowser.Controller;
+using MediaBrowser.Model.DTO;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Entities;
 
 
 namespace MediaBrowser.Api.HttpHandlers
 namespace MediaBrowser.Api.HttpHandlers
 {
 {
-    public class PersonHandler : BaseJsonHandler<Person>
+    /// <summary>
+    /// Gets a single Person
+    /// </summary>
+    public class PersonHandler : BaseJsonHandler<IBNItem<Person>>
     {
     {
-        protected override Person GetObjectToSerialize()
+        protected override IBNItem<Person> GetObjectToSerialize()
         {
         {
-            return Kernel.Instance.ItemController.GetPerson(QueryString["name"]);
+            Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
+            Guid userId = Guid.Parse(QueryString["userid"]);
+            User user = Kernel.Instance.Users.First(u => u.Id == userId);
+
+            string name = QueryString["name"];
+
+            return GetPerson(parent, user, name);
+        }
+
+        /// <summary>
+        /// Gets a Person
+        /// </summary>
+        private IBNItem<Person> GetPerson(Folder parent, User user, string name)
+        {
+            int count = 0;
+
+            // Get all the allowed recursive children
+            IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
+
+            foreach (var item in allItems)
+            {
+                if (item.People != null && item.People.Any(s => s.Name.Equals(name, StringComparison.OrdinalIgnoreCase)))
+                {
+                    count++;
+                }
+            }
+
+            // Get the original entity so that we can also supply the PrimaryImagePath
+            return new IBNItem<Person>()
+            {
+                Item = Kernel.Instance.ItemController.GetPerson(name),
+                BaseItemCount = count
+            };
         }
         }
     }
     }
 }
 }

+ 53 - 0
MediaBrowser.Api/HttpHandlers/StudioHandler.cs

@@ -0,0 +1,53 @@
+using System;
+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
+{
+    /// <summary>
+    /// Gets a single studio
+    /// </summary>
+    public class StudioHandler : BaseJsonHandler<IBNItem<Studio>>
+    {
+        protected override IBNItem<Studio> GetObjectToSerialize()
+        {
+            Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
+            Guid userId = Guid.Parse(QueryString["userid"]);
+            User user = Kernel.Instance.Users.First(u => u.Id == userId);
+
+            string name = QueryString["name"];
+
+            return GetStudio(parent, user, name);
+        }
+
+        /// <summary>
+        /// Gets a Studio
+        /// </summary>
+        private IBNItem<Studio> GetStudio(Folder parent, User user, string name)
+        {
+            int count = 0;
+
+            // Get all the allowed recursive children
+            IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
+
+            foreach (var item in allItems)
+            {
+                if (item.Studios != null && item.Studios.Any(s => s.Equals(name, StringComparison.OrdinalIgnoreCase)))
+                {
+                    count++;
+                }
+            }
+
+            // Get the original entity so that we can also supply the PrimaryImagePath
+            return new IBNItem<Studio>()
+            {
+                Item = Kernel.Instance.ItemController.GetStudio(name),
+                BaseItemCount = count
+            };
+        }
+    }
+}

+ 53 - 0
MediaBrowser.Api/HttpHandlers/YearHandler.cs

@@ -0,0 +1,53 @@
+using System;
+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
+{
+    /// <summary>
+    /// Gets a single year
+    /// </summary>
+    public class YearHandler : BaseJsonHandler<IBNItem<Year>>
+    {
+        protected override IBNItem<Year> GetObjectToSerialize()
+        {
+            Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
+            Guid userId = Guid.Parse(QueryString["userid"]);
+            User user = Kernel.Instance.Users.First(u => u.Id == userId);
+
+            string year = QueryString["year"];
+
+            return GetYear(parent, user, int.Parse(year));
+        }
+
+        /// <summary>
+        /// Gets a Year
+        /// </summary>
+        private IBNItem<Year> GetYear(Folder parent, User user, int year)
+        {
+            int count = 0;
+
+            // Get all the allowed recursive children
+            IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
+
+            foreach (var item in allItems)
+            {
+                if (item.ProductionYear.HasValue && item.ProductionYear.Value == year)
+                {
+                    count++;
+                }
+            }
+
+            // Get the original entity so that we can also supply the PrimaryImagePath
+            return new IBNItem<Year>()
+            {
+                Item = Kernel.Instance.ItemController.GetYear(year),
+                BaseItemCount = count
+            };
+        }
+    }
+}

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

@@ -49,6 +49,7 @@
     <Compile Include="ApiService.cs" />
     <Compile Include="ApiService.cs" />
     <Compile Include="HttpHandlers\AudioHandler.cs" />
     <Compile Include="HttpHandlers\AudioHandler.cs" />
     <Compile Include="HttpHandlers\BaseMediaHandler.cs" />
     <Compile Include="HttpHandlers\BaseMediaHandler.cs" />
+    <Compile Include="HttpHandlers\GenreHandler.cs" />
     <Compile Include="HttpHandlers\GenresHandler.cs" />
     <Compile Include="HttpHandlers\GenresHandler.cs" />
     <Compile Include="HttpHandlers\ImageHandler.cs" />
     <Compile Include="HttpHandlers\ImageHandler.cs" />
     <Compile Include="HttpHandlers\ItemHandler.cs" />
     <Compile Include="HttpHandlers\ItemHandler.cs" />
@@ -56,9 +57,11 @@
     <Compile Include="HttpHandlers\PersonHandler.cs" />
     <Compile Include="HttpHandlers\PersonHandler.cs" />
     <Compile Include="HttpHandlers\PluginConfigurationHandler.cs" />
     <Compile Include="HttpHandlers\PluginConfigurationHandler.cs" />
     <Compile Include="HttpHandlers\PluginsHandler.cs" />
     <Compile Include="HttpHandlers\PluginsHandler.cs" />
+    <Compile Include="HttpHandlers\StudioHandler.cs" />
     <Compile Include="HttpHandlers\StudiosHandler.cs" />
     <Compile Include="HttpHandlers\StudiosHandler.cs" />
     <Compile Include="HttpHandlers\UsersHandler.cs" />
     <Compile Include="HttpHandlers\UsersHandler.cs" />
     <Compile Include="HttpHandlers\VideoHandler.cs" />
     <Compile Include="HttpHandlers\VideoHandler.cs" />
+    <Compile Include="HttpHandlers\YearHandler.cs" />
     <Compile Include="HttpHandlers\YearsHandler.cs" />
     <Compile Include="HttpHandlers\YearsHandler.cs" />
     <Compile Include="ImageProcessor.cs" />
     <Compile Include="ImageProcessor.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Plugin.cs" />

+ 16 - 0
MediaBrowser.Api/Plugin.cs

@@ -85,6 +85,22 @@ namespace MediaBrowser.Api
             {
             {
                 return new VideoHandler();
                 return new VideoHandler();
             }
             }
+            else if (localPath.EndsWith("/api/person", StringComparison.OrdinalIgnoreCase))
+            {
+                return new PersonHandler();
+            }
+            else if (localPath.EndsWith("/api/genre", StringComparison.OrdinalIgnoreCase))
+            {
+                return new GenreHandler();
+            }
+            else if (localPath.EndsWith("/api/year", StringComparison.OrdinalIgnoreCase))
+            {
+                return new YearHandler();
+            }
+            else if (localPath.EndsWith("/api/studio", StringComparison.OrdinalIgnoreCase))
+            {
+                return new StudioHandler();
+            }
 
 
             return null;
             return null;
         }
         }

+ 52 - 0
MediaBrowser.ApiInteraction/ApiClient.cs

@@ -294,6 +294,58 @@ namespace MediaBrowser.ApiInteraction
             }
             }
         }
         }
 
 
+        /// <summary>
+        /// Gets a studio
+        /// </summary>
+        public async Task<IBNItem<Studio>> GetStudioAsync(Guid userId, string name)
+        {
+            string url = ApiUrl + "/studio?userId=" + userId.ToString() + "&name=" + name;
+
+            using (Stream stream = await HttpClient.GetStreamAsync(url))
+            {
+                return JsonSerializer.DeserializeFromStream<IBNItem<Studio>>(stream);
+            }
+        }
+
+        /// <summary>
+        /// Gets a genre
+        /// </summary>
+        public async Task<IBNItem<Genre>> GetGenreAsync(Guid userId, string name)
+        {
+            string url = ApiUrl + "/genre?userId=" + userId.ToString() + "&name=" + name;
+
+            using (Stream stream = await HttpClient.GetStreamAsync(url))
+            {
+                return JsonSerializer.DeserializeFromStream<IBNItem<Genre>>(stream);
+            }
+        }
+
+        /// <summary>
+        /// Gets a person
+        /// </summary>
+        public async Task<IBNItem<Person>> GetPersonAsync(Guid userId, string name)
+        {
+            string url = ApiUrl + "/person?userId=" + userId.ToString() + "&name=" + name;
+
+            using (Stream stream = await HttpClient.GetStreamAsync(url))
+            {
+                return JsonSerializer.DeserializeFromStream<IBNItem<Person>>(stream);
+            }
+        }
+
+        /// <summary>
+        /// Gets a year
+        /// </summary>
+        public async Task<IBNItem<Year>> GetYearAsync(Guid userId, int year)
+        {
+            string url = ApiUrl + "/year?userId=" + userId.ToString() + "&year=" + year;
+
+            using (Stream stream = await HttpClient.GetStreamAsync(url))
+            {
+                return JsonSerializer.DeserializeFromStream<IBNItem<Year>>(stream);
+            }
+        }
+
         public void Dispose()
         public void Dispose()
         {
         {
             HttpClient.Dispose();
             HttpClient.Dispose();

+ 4 - 0
MediaBrowser.Model/DTO/DTOBaseItem.cs

@@ -4,6 +4,10 @@ using MediaBrowser.Model.Entities;
 
 
 namespace MediaBrowser.Model.DTO
 namespace MediaBrowser.Model.DTO
 {
 {
+    /// <summary>
+    /// This is strictly used as a data transfer object from the api layer.
+    /// This holds information about a BaseItem in a format that is convenient for the client.
+    /// </summary>
     public class DTOBaseItem : IHasProviderIds
     public class DTOBaseItem : IHasProviderIds
     {
     {
         public string Name { get; set; }
         public string Name { get; set; }