aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/ApiService.cs31
-rw-r--r--MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs14
-rw-r--r--MediaBrowser.Api/HttpHandlers/GenreHandler.cs9
-rw-r--r--MediaBrowser.Api/HttpHandlers/GenresHandler.cs27
-rw-r--r--MediaBrowser.Api/HttpHandlers/ImageHandler.cs106
-rw-r--r--MediaBrowser.Api/HttpHandlers/ItemHandler.cs5
-rw-r--r--MediaBrowser.Api/HttpHandlers/ItemListHandler.cs7
-rw-r--r--MediaBrowser.Api/HttpHandlers/PersonHandler.cs9
-rw-r--r--MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs10
-rw-r--r--MediaBrowser.Api/HttpHandlers/PluginsHandler.cs34
-rw-r--r--MediaBrowser.Api/HttpHandlers/StudioHandler.cs9
-rw-r--r--MediaBrowser.Api/HttpHandlers/StudiosHandler.cs27
-rw-r--r--MediaBrowser.Api/HttpHandlers/UsersHandler.cs8
-rw-r--r--MediaBrowser.Api/HttpHandlers/YearHandler.cs9
-rw-r--r--MediaBrowser.Api/HttpHandlers/YearsHandler.cs27
15 files changed, 147 insertions, 185 deletions
diff --git a/MediaBrowser.Api/ApiService.cs b/MediaBrowser.Api/ApiService.cs
index 4d764f3e3..765c6af1a 100644
--- a/MediaBrowser.Api/ApiService.cs
+++ b/MediaBrowser.Api/ApiService.cs
@@ -1,8 +1,7 @@
using System;
-using System.IO;
+using System.Collections.Generic;
using System.Linq;
-using System.Reflection;
-using MediaBrowser.Common.Configuration;
+using System.Threading.Tasks;
using MediaBrowser.Controller;
using MediaBrowser.Model.DTO;
using MediaBrowser.Model.Entities;
@@ -21,7 +20,7 @@ namespace MediaBrowser.Api
return Kernel.Instance.GetItemById(guid);
}
- public static DTOBaseItem GetDTOBaseItem(BaseItem item, User user,
+ public async static Task<DTOBaseItem> GetDTOBaseItem(BaseItem item, User user,
bool includeChildren = true,
bool includePeople = true)
{
@@ -79,16 +78,16 @@ namespace MediaBrowser.Api
dto.UserData = item.GetUserData(user);
- AttachStudios(dto, item);
+ await AttachStudios(dto, item);
if (includeChildren)
{
- AttachChildren(dto, item, user);
+ await AttachChildren(dto, item, user);
}
if (includePeople)
{
- AttachPeople(dto, item);
+ await AttachPeople(dto, item);
}
Folder folder = item as Folder;
@@ -104,18 +103,20 @@ namespace MediaBrowser.Api
return dto;
}
- private static void AttachStudios(DTOBaseItem dto, BaseItem item)
+ private static async Task AttachStudios(DTOBaseItem dto, BaseItem item)
{
// Attach Studios by transforming them into BaseItemStudio (DTO)
if (item.Studios != null)
{
+ IEnumerable<Studio> entities = await Task.WhenAll<Studio>(item.Studios.Select(c => Kernel.Instance.ItemController.GetStudio(c)));
+
dto.Studios = item.Studios.Select(s =>
{
BaseItemStudio baseItemStudio = new BaseItemStudio();
baseItemStudio.Name = s;
- Studio ibnObject = Kernel.Instance.ItemController.GetStudio(s);
+ Studio ibnObject = entities.First(i => i.Name.Equals(s, StringComparison.OrdinalIgnoreCase));
if (ibnObject != null)
{
@@ -127,30 +128,34 @@ namespace MediaBrowser.Api
}
}
- private static void AttachChildren(DTOBaseItem dto, BaseItem item, User user)
+ private static async Task AttachChildren(DTOBaseItem dto, BaseItem item, User user)
{
var folder = item as Folder;
if (folder != null)
{
- dto.Children = folder.GetParentalAllowedChildren(user).Select(c => GetDTOBaseItem(c, user, false, false));
+ IEnumerable<BaseItem> children = folder.GetParentalAllowedChildren(user);
+
+ dto.Children = await Task.WhenAll<DTOBaseItem>(children.Select(c => GetDTOBaseItem(c, user, false, false)));
}
dto.LocalTrailers = item.LocalTrailers;
}
- private static void AttachPeople(DTOBaseItem dto, BaseItem item)
+ private static async Task AttachPeople(DTOBaseItem dto, BaseItem item)
{
// Attach People by transforming them into BaseItemPerson (DTO)
if (item.People != null)
{
+ IEnumerable<Person> entities = await Task.WhenAll<Person>(item.People.Select(c => Kernel.Instance.ItemController.GetPerson(c.Name)));
+
dto.People = item.People.Select(p =>
{
BaseItemPerson baseItemPerson = new BaseItemPerson();
baseItemPerson.PersonInfo = p;
- Person ibnObject = Kernel.Instance.ItemController.GetPerson(p.Name);
+ Person ibnObject = entities.First(i => i.Name.Equals(p.Name, StringComparison.OrdinalIgnoreCase));
if (ibnObject != null)
{
diff --git a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs
index ffdbab65e..d2dbd699d 100644
--- a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs
@@ -5,7 +5,6 @@ using System.IO;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
-using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Logging;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Net.Handlers;
@@ -91,20 +90,17 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
- public override string ContentType
+ public override Task<string> GetContentType()
{
- get
+ return Task.Run(() =>
{
return MimeTypes.GetMimeType("." + GetConversionOutputFormat());
- }
+ });
}
- public override bool CompressResponse
+ public override bool ShouldCompressResponse(string contentType)
{
- get
- {
- return false;
- }
+ return false;
}
public override async Task ProcessRequest(HttpListenerContext ctx)
diff --git a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs b/MediaBrowser.Api/HttpHandlers/GenreHandler.cs
index 2b0d1c57d..c4198b028 100644
--- a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/GenreHandler.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;
@@ -13,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class GenreHandler : BaseJsonHandler<IBNItem<Genre>>
{
- protected override IBNItem<Genre> GetObjectToSerialize()
+ protected override async Task<IBNItem<Genre>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -21,13 +22,13 @@ namespace MediaBrowser.Api.HttpHandlers
string name = QueryString["name"];
- return GetGenre(parent, user, name);
+ return await GetGenre(parent, user, name);
}
/// <summary>
/// Gets a Genre
/// </summary>
- private IBNItem<Genre> GetGenre(Folder parent, User user, string name)
+ private async Task<IBNItem<Genre>> GetGenre(Folder parent, User user, string name)
{
int count = 0;
@@ -45,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Genre>()
{
- Item = Kernel.Instance.ItemController.GetGenre(name),
+ Item = await Kernel.Instance.ItemController.GetGenre(name),
BaseItemCount = count
};
}
diff --git a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs b/MediaBrowser.Api/HttpHandlers/GenresHandler.cs
index 1134eb568..cd68f1eaa 100644
--- a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/GenresHandler.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 GenresHandler : BaseJsonHandler<IEnumerable<IBNItem<Genre>>>
{
- protected override IEnumerable<IBNItem<Genre>> GetObjectToSerialize()
+ protected override async Task<IEnumerable<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);
- return GetAllGenres(parent, user);
+ return await GetAllGenres(parent, user);
}
/// <summary>
/// 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>
- private IEnumerable<IBNItem<Genre>> GetAllGenres(Folder parent, User user)
+ private async Task<IEnumerable<IBNItem<Genre>>> GetAllGenres(Folder parent, User user)
{
Dictionary<string, int> data = new Dictionary<string, int>();
@@ -52,25 +53,9 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
- // Now go through the dictionary and create a Category for each genre
- List<IBNItem<Genre>> list = new List<IBNItem<Genre>>();
+ IEnumerable<Genre> entities = await Task.WhenAll<Genre>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); }));
- foreach (string key in data.Keys)
- {
- // Get the original entity so that we can also supply the PrimaryImagePath
- Genre entity = Kernel.Instance.ItemController.GetGenre(key);
-
- if (entity != null)
- {
- list.Add(new IBNItem<Genre>()
- {
- Item = entity,
- BaseItemCount = data[key]
- });
- }
- }
-
- return list;
+ return entities.Select(e => new IBNItem<Genre>() { Item = e, BaseItemCount = data[e.Name] });
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs
index 826438098..4a6b2a481 100644
--- a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs
@@ -13,39 +13,57 @@ namespace MediaBrowser.Api.HttpHandlers
public class ImageHandler : BaseHandler
{
private string _ImagePath = null;
- private string ImagePath
+ private async Task<string> GetImagePath()
{
- get
+ if (_ImagePath == null)
{
- if (_ImagePath == null)
- {
- _ImagePath = GetImagePath();
- }
-
- return _ImagePath;
+ _ImagePath = await DiscoverImagePath();
}
+
+ return _ImagePath;
}
- private Stream _SourceStream = null;
- private Stream SourceStream
+ private async Task<string> DiscoverImagePath()
{
- get
+ string path = QueryString["path"] ?? string.Empty;
+
+ if (!string.IsNullOrEmpty(path))
{
- EnsureSourceStream();
+ return path;
+ }
- return _SourceStream;
+ string personName = QueryString["personname"];
+
+ if (!string.IsNullOrEmpty(personName))
+ {
+ Person person = await Kernel.Instance.ItemController.GetPerson(personName);
+
+ return person.PrimaryImagePath;
}
+
+ BaseItem item = ApiService.GetItemById(QueryString["id"]);
+
+ string imageIndex = QueryString["index"];
+ int index = string.IsNullOrEmpty(imageIndex) ? 0 : int.Parse(imageIndex);
+
+ return GetImagePathFromTypes(item, ImageType, index);
}
+ private Stream _SourceStream = null;
+ private async Task<Stream> GetSourceStream()
+ {
+ await EnsureSourceStream();
+ return _SourceStream;
+ }
private bool _SourceStreamEnsured = false;
- private void EnsureSourceStream()
+ private async Task EnsureSourceStream()
{
if (!_SourceStreamEnsured)
{
try
{
- _SourceStream = File.OpenRead(ImagePath);
+ _SourceStream = File.OpenRead(await GetImagePath());
}
catch (FileNotFoundException ex)
{
@@ -68,20 +86,17 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
}
-
- public override string ContentType
+
+ public async override Task<string> GetContentType()
{
- get
- {
- EnsureSourceStream();
+ await EnsureSourceStream();
- if (SourceStream == null)
- {
- return null;
- }
-
- return MimeTypes.GetMimeType(ImagePath);
+ if (await GetSourceStream() == null)
+ {
+ return null;
}
+
+ return MimeTypes.GetMimeType(await GetImagePath());
}
public override TimeSpan CacheDuration
@@ -92,16 +107,16 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
- protected override DateTime? GetLastDateModified()
+ protected async override Task<DateTime?> GetLastDateModified()
{
- EnsureSourceStream();
+ await EnsureSourceStream();
- if (SourceStream == null)
+ if (await GetSourceStream() == null)
{
return null;
}
- return File.GetLastWriteTime(ImagePath);
+ return File.GetLastWriteTime(await GetImagePath());
}
private int? Height
@@ -194,36 +209,9 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
- protected override Task WriteResponseToOutputStream(Stream stream)
+ protected override async Task WriteResponseToOutputStream(Stream stream)
{
- return Task.Run(() =>
- {
- ImageProcessor.ProcessImage(SourceStream, stream, Width, Height, MaxWidth, MaxHeight, Quality);
- });
- }
-
- private string GetImagePath()
- {
- string path = QueryString["path"] ?? string.Empty;
-
- if (!string.IsNullOrEmpty(path))
- {
- return path;
- }
-
- string personName = QueryString["personname"];
-
- if (!string.IsNullOrEmpty(personName))
- {
- return Kernel.Instance.ItemController.GetPerson(personName).PrimaryImagePath;
- }
-
- BaseItem item = ApiService.GetItemById(QueryString["id"]);
-
- string imageIndex = QueryString["index"];
- int index = string.IsNullOrEmpty(imageIndex) ? 0 : int.Parse(imageIndex);
-
- return GetImagePathFromTypes(item, ImageType, index);
+ ImageProcessor.ProcessImage(await GetSourceStream(), stream, Width, Height, MaxWidth, MaxHeight, Quality);
}
private string GetImagePathFromTypes(BaseItem item, ImageType imageType, int imageIndex)
diff --git a/MediaBrowser.Api/HttpHandlers/ItemHandler.cs b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs
index dcbdf2a90..ac27633b7 100644
--- a/MediaBrowser.Api/HttpHandlers/ItemHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using System.Threading.Tasks;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller;
using MediaBrowser.Model.DTO;
@@ -9,7 +10,7 @@ namespace MediaBrowser.Api.HttpHandlers
{
public class ItemHandler : BaseJsonHandler<DTOBaseItem>
{
- protected sealed override DTOBaseItem GetObjectToSerialize()
+ protected async override Task<DTOBaseItem> GetObjectToSerialize()
{
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
@@ -21,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers
return null;
}
- return ApiService.GetDTOBaseItem(item, user);
+ return await ApiService.GetDTOBaseItem(item, user);
}
protected virtual BaseItem ItemToSerialize
diff --git a/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs b/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs
index 84141a6bf..6e4a42081 100644
--- a/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/ItemListHandler.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,14 +11,14 @@ namespace MediaBrowser.Api.HttpHandlers
{
public class ItemListHandler : BaseJsonHandler<IEnumerable<DTOBaseItem>>
{
- protected override IEnumerable<DTOBaseItem> GetObjectToSerialize()
+ protected override async Task<IEnumerable<DTOBaseItem>> GetObjectToSerialize()
{
User user = Kernel.Instance.Users.First(u => u.Id == UserId);
- return ItemsToSerialize.Select(i =>
+ return await Task.WhenAll<DTOBaseItem>(ItemsToSerialize.Select(i =>
{
return ApiService.GetDTOBaseItem(i, user, includeChildren: false, includePeople: false);
- });
+ }));
}
protected IEnumerable<BaseItem> ItemsToSerialize
diff --git a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs b/MediaBrowser.Api/HttpHandlers/PersonHandler.cs
index 75cccfac6..f095a3a47 100644
--- a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/PersonHandler.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;
@@ -13,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class PersonHandler : BaseJsonHandler<IBNItem<Person>>
{
- protected override IBNItem<Person> GetObjectToSerialize()
+ protected async override Task<IBNItem<Person>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -21,13 +22,13 @@ namespace MediaBrowser.Api.HttpHandlers
string name = QueryString["name"];
- return GetPerson(parent, user, name);
+ return await GetPerson(parent, user, name);
}
/// <summary>
/// Gets a Person
/// </summary>
- private IBNItem<Person> GetPerson(Folder parent, User user, string name)
+ private async Task<IBNItem<Person>> GetPerson(Folder parent, User user, string name)
{
int count = 0;
@@ -45,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Person>()
{
- Item = Kernel.Instance.ItemController.GetPerson(name),
+ Item = await Kernel.Instance.ItemController.GetPerson(name),
BaseItemCount = count
};
}
diff --git a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs
index 0e19aecd5..109440e98 100644
--- a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using System.Threading.Tasks;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller;
using MediaBrowser.Model.Plugins;
@@ -8,11 +9,14 @@ namespace MediaBrowser.Api.HttpHandlers
{
public class PluginConfigurationHandler : BaseJsonHandler<BasePluginConfiguration>
{
- protected override BasePluginConfiguration GetObjectToSerialize()
+ protected override Task<BasePluginConfiguration> GetObjectToSerialize()
{
- string pluginName = QueryString["name"];
+ return Task.Run(() =>
+ {
+ string pluginName = QueryString["name"];
- return Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
+ return Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
+ });
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs
index c3c1b4049..f451832dd 100644
--- a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller;
using MediaBrowser.Model.DTO;
@@ -11,26 +12,29 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class PluginsHandler : BaseJsonHandler<IEnumerable<PluginInfo>>
{
- protected override IEnumerable<PluginInfo> GetObjectToSerialize()
+ protected override Task<IEnumerable<PluginInfo>> GetObjectToSerialize()
{
- var plugins = Kernel.Instance.Plugins.Select(p =>
+ return Task.Run(() =>
{
- return new PluginInfo()
+ var plugins = Kernel.Instance.Plugins.Select(p =>
{
- Path = p.Path,
- Name = p.Name,
- Enabled = p.Enabled,
- DownloadToUI = p.DownloadToUI,
- Version = p.Version
- };
- });
+ return new PluginInfo()
+ {
+ Path = p.Path,
+ Name = p.Name,
+ Enabled = p.Enabled,
+ DownloadToUI = p.DownloadToUI,
+ Version = p.Version
+ };
+ });
- if (QueryString["uionly"] == "1")
- {
- plugins = plugins.Where(p => p.DownloadToUI);
- }
+ if (QueryString["uionly"] == "1")
+ {
+ plugins = plugins.Where(p => p.DownloadToUI);
+ }
- return plugins;
+ return plugins;
+ });
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs b/MediaBrowser.Api/HttpHandlers/StudioHandler.cs
index 40daadc70..b44970ea5 100644
--- a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/StudioHandler.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;
@@ -13,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class StudioHandler : BaseJsonHandler<IBNItem<Studio>>
{
- protected override IBNItem<Studio> GetObjectToSerialize()
+ protected async override Task<IBNItem<Studio>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -21,13 +22,13 @@ namespace MediaBrowser.Api.HttpHandlers
string name = QueryString["name"];
- return GetStudio(parent, user, name);
+ return await GetStudio(parent, user, name);
}
/// <summary>
/// Gets a Studio
/// </summary>
- private IBNItem<Studio> GetStudio(Folder parent, User user, string name)
+ private async Task<IBNItem<Studio>> GetStudio(Folder parent, User user, string name)
{
int count = 0;
@@ -45,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Studio>()
{
- Item = Kernel.Instance.ItemController.GetStudio(name),
+ Item = await Kernel.Instance.ItemController.GetStudio(name),
BaseItemCount = count
};
}
diff --git a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs b/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs
index bef381000..d379b45fb 100644
--- a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/StudiosHandler.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 StudiosHandler : BaseJsonHandler<IEnumerable<IBNItem<Studio>>>
{
- protected override IEnumerable<IBNItem<Studio>> GetObjectToSerialize()
+ protected override async Task<IEnumerable<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);
- return GetAllStudios(parent, user);
+ return await GetAllStudios(parent, user);
}
/// <summary>
/// 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>
- private IEnumerable<IBNItem<Studio>> GetAllStudios(Folder parent, User user)
+ private async Task<IEnumerable<IBNItem<Studio>>> GetAllStudios(Folder parent, User user)
{
Dictionary<string, int> data = new Dictionary<string, int>();
@@ -52,25 +53,9 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
- // Now go through the dictionary and create a Category for each studio
- List<IBNItem<Studio>> list = new List<IBNItem<Studio>>();
+ IEnumerable<Studio> entities = await Task.WhenAll<Studio>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); }));
- foreach (string key in data.Keys)
- {
- // Get the original entity so that we can also supply the PrimaryImagePath
- Studio entity = Kernel.Instance.ItemController.GetStudio(key);
-
- if (entity != null)
- {
- list.Add(new IBNItem<Studio>()
- {
- Item = entity,
- BaseItemCount = data[key]
- });
- }
- }
-
- return list;
+ return entities.Select(e => new IBNItem<Studio>() { Item = e, BaseItemCount = data[e.Name] });
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/UsersHandler.cs b/MediaBrowser.Api/HttpHandlers/UsersHandler.cs
index e1fe638ca..136873574 100644
--- a/MediaBrowser.Api/HttpHandlers/UsersHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/UsersHandler.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Threading.Tasks;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller;
using MediaBrowser.Model.Entities;
@@ -7,9 +8,12 @@ namespace MediaBrowser.Api.HttpHandlers
{
class UsersHandler : BaseJsonHandler<IEnumerable<User>>
{
- protected override IEnumerable<User> GetObjectToSerialize()
+ protected override Task<IEnumerable<User>> GetObjectToSerialize()
{
- return Kernel.Instance.Users;
+ return Task.Run(() =>
+ {
+ return Kernel.Instance.Users;
+ });
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/YearHandler.cs b/MediaBrowser.Api/HttpHandlers/YearHandler.cs
index 89cde9943..dfde600e7 100644
--- a/MediaBrowser.Api/HttpHandlers/YearHandler.cs
+++ b/MediaBrowser.Api/HttpHandlers/YearHandler.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;
@@ -13,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class YearHandler : BaseJsonHandler<IBNItem<Year>>
{
- protected override IBNItem<Year> GetObjectToSerialize()
+ protected override async Task<IBNItem<Year>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -21,13 +22,13 @@ namespace MediaBrowser.Api.HttpHandlers
string year = QueryString["year"];
- return GetYear(parent, user, int.Parse(year));
+ return await GetYear(parent, user, int.Parse(year));
}
/// <summary>
/// Gets a Year
/// </summary>
- private IBNItem<Year> GetYear(Folder parent, User user, int year)
+ private async Task<IBNItem<Year>> GetYear(Folder parent, User user, int year)
{
int count = 0;
@@ -45,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Year>()
{
- Item = Kernel.Instance.ItemController.GetYear(year),
+ Item = await Kernel.Instance.ItemController.GetYear(year),
BaseItemCount = count
};
}
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<IEnumerable<IBNItem<Year>>>
{
- protected override IEnumerable<IBNItem<Year>> GetObjectToSerialize()
+ protected override async Task<IEnumerable<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);
- return GetAllYears(parent, user);
+ return await GetAllYears(parent, user);
}
/// <summary>
/// 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>
- private IEnumerable<IBNItem<Year>> GetAllYears(Folder parent, User user)
+ private async Task<IEnumerable<IBNItem<Year>>> GetAllYears(Folder parent, User user)
{
Dictionary<int, int> data = new Dictionary<int, int>();
@@ -49,25 +50,9 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
- // Now go through the dictionary and create a Category for each studio
- List<IBNItem<Year>> list = new List<IBNItem<Year>>();
+ IEnumerable<Year> entities = await Task.WhenAll<Year>(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<Year>()
- {
- Item = entity,
- BaseItemCount = data[key]
- });
- }
- }
-
- return list;
+ return entities.Select(e => new IBNItem<Year>() { Item = e, BaseItemCount = data[int.Parse(e.Name)] });
}
}
}