From 937d27ae9d6aa571ab9327f138bfba1b84c158db Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sun, 19 Aug 2012 16:38:31 -0400 Subject: One async call leads to another, and another, all the way up the call stack... --- MediaBrowser.Api/HttpHandlers/YearsHandler.cs | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) (limited to 'MediaBrowser.Api/HttpHandlers/YearsHandler.cs') diff --git a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs index 3d9ae59f2..6ce087f85 100644 --- a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; using MediaBrowser.Model.DTO; @@ -10,20 +11,20 @@ namespace MediaBrowser.Api.HttpHandlers { public class YearsHandler : BaseJsonHandler>> { - protected override IEnumerable> GetObjectToSerialize() + protected override async Task>> 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); - return GetAllYears(parent, user); + return await GetAllYears(parent, user); } /// /// 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 IEnumerable> GetAllYears(Folder parent, User user) + private async Task>> GetAllYears(Folder parent, User user) { Dictionary data = new Dictionary(); @@ -49,25 +50,9 @@ namespace MediaBrowser.Api.HttpHandlers } } - // Now go through the dictionary and create a Category for each studio - List> list = new List>(); + IEnumerable entities = await Task.WhenAll(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); })); - foreach (int key in data.Keys) - { - // Get the original entity so that we can also supply the PrimaryImagePath - Year entity = Kernel.Instance.ItemController.GetYear(key); - - if (entity != null) - { - list.Add(new IBNItem() - { - Item = entity, - BaseItemCount = data[key] - }); - } - } - - return list; + return entities.Select(e => new IBNItem() { Item = e, BaseItemCount = data[int.Parse(e.Name)] }); } } } -- cgit v1.2.3