diff options
Diffstat (limited to 'MediaBrowser.Api/ApiService.cs')
| -rw-r--r-- | MediaBrowser.Api/ApiService.cs | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/MediaBrowser.Api/ApiService.cs b/MediaBrowser.Api/ApiService.cs index 44ba98864..93daba73d 100644 --- a/MediaBrowser.Api/ApiService.cs +++ b/MediaBrowser.Api/ApiService.cs @@ -26,6 +26,34 @@ namespace MediaBrowser.Api {
DTOBaseItem dto = new DTOBaseItem();
+ List<Task> tasks = new List<Task>();
+
+ tasks.Add(AttachStudios(dto, item));
+
+ if (includeChildren)
+ {
+ tasks.Add(AttachChildren(dto, item, user));
+ tasks.Add(AttachLocalTrailers(dto, item, user));
+ }
+
+ if (includePeople)
+ {
+ tasks.Add(AttachPeople(dto, item));
+ }
+
+ // Make sure all the tasks we kicked off have completed.
+ if (tasks.Count > 0)
+ {
+ await Task.WhenAll(tasks).ConfigureAwait(false);
+ }
+
+ AttachBasicFields(dto, item, user);
+
+ return dto;
+ }
+
+ private static void AttachBasicFields(DTOBaseItem dto, BaseItem item, User user)
+ {
dto.AspectRatio = item.AspectRatio;
dto.BackdropCount = item.BackdropImagePaths == null ? 0 : item.BackdropImagePaths.Count();
dto.DateCreated = item.DateCreated;
@@ -81,18 +109,6 @@ namespace MediaBrowser.Api dto.UserData = item.GetUserData(user);
- await AttachStudios(dto, item).ConfigureAwait(false);
-
- if (includeChildren)
- {
- await AttachChildren(dto, item, user).ConfigureAwait(false);
- }
-
- if (includePeople)
- {
- await AttachPeople(dto, item).ConfigureAwait(false);
- }
-
Folder folder = item as Folder;
if (folder != null)
@@ -132,8 +148,6 @@ namespace MediaBrowser.Api ScanType = video.ScanType
};
}
-
- return dto;
}
private static async Task AttachStudios(DTOBaseItem dto, BaseItem item)
@@ -171,13 +185,16 @@ namespace MediaBrowser.Api dto.Children = await Task.WhenAll<DTOBaseItem>(children.Select(c => GetDTOBaseItem(c, user, false, false))).ConfigureAwait(false);
}
+ }
+ private static async Task AttachLocalTrailers(DTOBaseItem dto, BaseItem item, User user)
+ {
if (item.LocalTrailers != null && item.LocalTrailers.Any())
{
dto.LocalTrailers = await Task.WhenAll<DTOBaseItem>(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)
|
