diff --git a/MediaBrowser.Api/ApiService.cs b/MediaBrowser.Api/ApiService.cs index 93daba73d6..dd9c575f11 100644 --- a/MediaBrowser.Api/ApiService.cs +++ b/MediaBrowser.Api/ApiService.cs @@ -194,7 +194,7 @@ namespace MediaBrowser.Api dto.LocalTrailers = await Task.WhenAll(item.LocalTrailers.Select(c => GetDTOBaseItem(c, user, false, false))).ConfigureAwait(false); } } - + private static async Task AttachPeople(DTOBaseItem dto, BaseItem item) { // Attach People by transforming them into BaseItemPerson (DTO) @@ -256,5 +256,16 @@ namespace MediaBrowser.Api return null; } + + public static IBNItem GetIBNItem(BaseEntity entity, int itemCount) + { + return new IBNItem() + { + Id = entity.Id, + BaseItemCount = itemCount, + HasPrimaryImage = !string.IsNullOrEmpty(entity.PrimaryImagePath), + Name = entity.Name + }; + } } } diff --git a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs b/MediaBrowser.Api/HttpHandlers/GenreHandler.cs index e9e5c41f45..c2b70e1066 100644 --- a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/GenreHandler.cs @@ -12,9 +12,9 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a single genre /// - public class GenreHandler : BaseJsonHandler> + public class GenreHandler : BaseJsonHandler { - protected override Task> GetObjectToSerialize() + protected override Task GetObjectToSerialize() { Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder; Guid userId = Guid.Parse(QueryString["userid"]); @@ -28,7 +28,7 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a Genre /// - private async Task> GetGenre(Folder parent, User user, string name) + private async Task GetGenre(Folder parent, User user, string name) { int count = 0; @@ -44,11 +44,7 @@ namespace MediaBrowser.Api.HttpHandlers } // Get the original entity so that we can also supply the PrimaryImagePath - return new IBNItem() - { - Item = await Kernel.Instance.ItemController.GetGenre(name).ConfigureAwait(false), - BaseItemCount = count - }; + return ApiService.GetIBNItem(await Kernel.Instance.ItemController.GetGenre(name).ConfigureAwait(false), count); } } } diff --git a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs b/MediaBrowser.Api/HttpHandlers/GenresHandler.cs index 8ac30043ef..3280c3e32d 100644 --- a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/GenresHandler.cs @@ -9,9 +9,9 @@ using MediaBrowser.Model.Entities; namespace MediaBrowser.Api.HttpHandlers { - public class GenresHandler : BaseJsonHandler>> + public class GenresHandler : BaseJsonHandler> { - protected override Task>> GetObjectToSerialize() + protected override Task> GetObjectToSerialize() { Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder; Guid userId = Guid.Parse(QueryString["userid"]); @@ -24,7 +24,7 @@ namespace MediaBrowser.Api.HttpHandlers /// 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 /// - private async Task>> GetAllGenres(Folder parent, User user) + private async Task> GetAllGenres(Folder parent, User user) { Dictionary data = new Dictionary(); @@ -55,7 +55,7 @@ namespace MediaBrowser.Api.HttpHandlers IEnumerable entities = await Task.WhenAll(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); })).ConfigureAwait(false); - return entities.Select(e => new IBNItem() { Item = e, BaseItemCount = data[e.Name] }); + return entities.Select(e => ApiService.GetIBNItem(e, data[e.Name])); } } } diff --git a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs b/MediaBrowser.Api/HttpHandlers/PersonHandler.cs index b144c0bdf4..4db2fada19 100644 --- a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PersonHandler.cs @@ -12,9 +12,9 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a single Person /// - public class PersonHandler : BaseJsonHandler> + public class PersonHandler : BaseJsonHandler { - protected override Task> GetObjectToSerialize() + protected override Task GetObjectToSerialize() { Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder; Guid userId = Guid.Parse(QueryString["userid"]); @@ -28,7 +28,7 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a Person /// - private async Task> GetPerson(Folder parent, User user, string name) + private async Task GetPerson(Folder parent, User user, string name) { int count = 0; @@ -44,11 +44,7 @@ namespace MediaBrowser.Api.HttpHandlers } // Get the original entity so that we can also supply the PrimaryImagePath - return new IBNItem() - { - Item = await Kernel.Instance.ItemController.GetPerson(name).ConfigureAwait(false), - BaseItemCount = count - }; + return ApiService.GetIBNItem(await Kernel.Instance.ItemController.GetPerson(name).ConfigureAwait(false), count); } } } diff --git a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs b/MediaBrowser.Api/HttpHandlers/StudioHandler.cs index 727237882b..af7e7fed0b 100644 --- a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/StudioHandler.cs @@ -12,9 +12,9 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a single studio /// - public class StudioHandler : BaseJsonHandler> + public class StudioHandler : BaseJsonHandler { - protected override Task> GetObjectToSerialize() + protected override Task GetObjectToSerialize() { Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder; Guid userId = Guid.Parse(QueryString["userid"]); @@ -28,7 +28,7 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a Studio /// - private async Task> GetStudio(Folder parent, User user, string name) + private async Task GetStudio(Folder parent, User user, string name) { int count = 0; @@ -44,11 +44,7 @@ namespace MediaBrowser.Api.HttpHandlers } // Get the original entity so that we can also supply the PrimaryImagePath - return new IBNItem() - { - Item = await Kernel.Instance.ItemController.GetStudio(name).ConfigureAwait(false), - BaseItemCount = count - }; + return ApiService.GetIBNItem(await Kernel.Instance.ItemController.GetStudio(name).ConfigureAwait(false), count); } } } diff --git a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs b/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs index 7e85e5558c..64348ac896 100644 --- a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs @@ -9,9 +9,9 @@ using MediaBrowser.Model.Entities; namespace MediaBrowser.Api.HttpHandlers { - public class StudiosHandler : BaseJsonHandler>> + public class StudiosHandler : BaseJsonHandler> { - protected override Task>> GetObjectToSerialize() + protected override Task> GetObjectToSerialize() { Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder; Guid userId = Guid.Parse(QueryString["userid"]); @@ -24,7 +24,7 @@ namespace MediaBrowser.Api.HttpHandlers /// 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 /// - private async Task>> GetAllStudios(Folder parent, User user) + private async Task> GetAllStudios(Folder parent, User user) { Dictionary data = new Dictionary(); @@ -55,7 +55,7 @@ namespace MediaBrowser.Api.HttpHandlers IEnumerable entities = await Task.WhenAll(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); })).ConfigureAwait(false); - return entities.Select(e => new IBNItem() { Item = e, BaseItemCount = data[e.Name] }); + return entities.Select(e => ApiService.GetIBNItem(e, data[e.Name])); } } } diff --git a/MediaBrowser.Api/HttpHandlers/YearHandler.cs b/MediaBrowser.Api/HttpHandlers/YearHandler.cs index 5e31c9689f..0eb674e272 100644 --- a/MediaBrowser.Api/HttpHandlers/YearHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/YearHandler.cs @@ -12,9 +12,9 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a single year /// - public class YearHandler : BaseJsonHandler> + public class YearHandler : BaseJsonHandler { - protected override Task> GetObjectToSerialize() + protected override Task GetObjectToSerialize() { Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder; Guid userId = Guid.Parse(QueryString["userid"]); @@ -28,7 +28,7 @@ namespace MediaBrowser.Api.HttpHandlers /// /// Gets a Year /// - private async Task> GetYear(Folder parent, User user, int year) + private async Task GetYear(Folder parent, User user, int year) { int count = 0; @@ -44,11 +44,7 @@ namespace MediaBrowser.Api.HttpHandlers } // Get the original entity so that we can also supply the PrimaryImagePath - return new IBNItem() - { - Item = await Kernel.Instance.ItemController.GetYear(year).ConfigureAwait(false), - BaseItemCount = count - }; + return ApiService.GetIBNItem(await Kernel.Instance.ItemController.GetYear(year).ConfigureAwait(false), count); } } } diff --git a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs index dcbbf6150e..ee07ac8b0b 100644 --- a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs @@ -9,9 +9,9 @@ using MediaBrowser.Model.Entities; namespace MediaBrowser.Api.HttpHandlers { - public class YearsHandler : BaseJsonHandler>> + public class YearsHandler : BaseJsonHandler> { - protected override Task>> GetObjectToSerialize() + protected override Task> GetObjectToSerialize() { Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder; Guid userId = Guid.Parse(QueryString["userid"]); @@ -24,7 +24,7 @@ namespace MediaBrowser.Api.HttpHandlers /// 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 /// - private async Task>> GetAllYears(Folder parent, User user) + private async Task> GetAllYears(Folder parent, User user) { Dictionary data = new Dictionary(); @@ -52,7 +52,7 @@ namespace MediaBrowser.Api.HttpHandlers IEnumerable entities = await Task.WhenAll(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); })).ConfigureAwait(false); - return entities.Select(e => new IBNItem() { Item = e, BaseItemCount = data[int.Parse(e.Name)] }); + return entities.Select(e => ApiService.GetIBNItem(e, data[int.Parse(e.Name)])); } } } diff --git a/MediaBrowser.ApiInteraction/ApiClient.cs b/MediaBrowser.ApiInteraction/ApiClient.cs index 4b9a712927..2e7684cb03 100644 --- a/MediaBrowser.ApiInteraction/ApiClient.cs +++ b/MediaBrowser.ApiInteraction/ApiClient.cs @@ -197,26 +197,26 @@ namespace MediaBrowser.ApiInteraction /// /// Gets all Genres /// - public async Task>> GetAllGenresAsync(Guid userId) + public async Task> GetAllGenresAsync(Guid userId) { string url = ApiUrl + "/genres?userId=" + userId.ToString(); using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>>(stream); + return DataSerializer.DeserializeFromStream>(stream); } } /// /// Gets all Years /// - public async Task>> GetAllYearsAsync(Guid userId) + public async Task> GetAllYearsAsync(Guid userId) { string url = ApiUrl + "/years?userId=" + userId.ToString(); using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>>(stream); + return DataSerializer.DeserializeFromStream>(stream); } } @@ -277,13 +277,13 @@ namespace MediaBrowser.ApiInteraction /// /// Gets all studious /// - public async Task>> GetAllStudiosAsync(Guid userId) + public async Task> GetAllStudiosAsync(Guid userId) { string url = ApiUrl + "/studios?userId=" + userId.ToString(); using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>>(stream); + return DataSerializer.DeserializeFromStream>(stream); } } @@ -303,52 +303,52 @@ namespace MediaBrowser.ApiInteraction /// /// Gets a studio /// - public async Task> GetStudioAsync(Guid userId, string name) + public async Task GetStudioAsync(Guid userId, string name) { string url = ApiUrl + "/studio?userId=" + userId.ToString() + "&name=" + name; using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DataSerializer.DeserializeFromStream(stream); } } /// /// Gets a genre /// - public async Task> GetGenreAsync(Guid userId, string name) + public async Task GetGenreAsync(Guid userId, string name) { string url = ApiUrl + "/genre?userId=" + userId.ToString() + "&name=" + name; using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DataSerializer.DeserializeFromStream(stream); } } /// /// Gets a person /// - public async Task> GetPersonAsync(Guid userId, string name) + public async Task GetPersonAsync(Guid userId, string name) { string url = ApiUrl + "/person?userId=" + userId.ToString() + "&name=" + name; using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DataSerializer.DeserializeFromStream(stream); } } /// /// Gets a year /// - public async Task> GetYearAsync(Guid userId, int year) + public async Task GetYearAsync(Guid userId, int year) { string url = ApiUrl + "/year?userId=" + userId.ToString() + "&year=" + year; using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DataSerializer.DeserializeFromStream(stream); } } diff --git a/MediaBrowser.Model/DTO/IBNItem.cs b/MediaBrowser.Model/DTO/IBNItem.cs index 4b29cb2b1a..9748c5e7f7 100644 --- a/MediaBrowser.Model/DTO/IBNItem.cs +++ b/MediaBrowser.Model/DTO/IBNItem.cs @@ -1,16 +1,24 @@ using MediaBrowser.Model.Entities; +using System; namespace MediaBrowser.Model.DTO { /// /// This is a stub class used by the api to get IBN types along with their item counts /// - public class IBNItem + public class IBNItem { /// - /// The actual genre, year, studio, etc + /// The name of the person, genre, etc /// - public T Item { get; set; } + public string Name { get; set; } + + /// + /// The id of the person, genre, etc + /// + public Guid Id { get; set; } + + public bool HasPrimaryImage { get; set; } /// /// The number of items that have the genre, year, studio, etc