diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Dto/DtoService.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Dto/DtoService.cs | 95 |
1 files changed, 43 insertions, 52 deletions
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 6339fb7b1..388dfd515 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -86,7 +86,7 @@ namespace MediaBrowser.Server.Implementations.Dto return GetBaseItemDto(item, options, user, owner); } - public IEnumerable<BaseItemDto> GetBaseItemDtos(IEnumerable<BaseItem> items, DtoOptions options, User user = null, BaseItem owner = null) + public async Task<List<BaseItemDto>> GetBaseItemDtos(IEnumerable<BaseItem> items, DtoOptions options, User user = null, BaseItem owner = null) { var syncJobItems = GetSyncedItemProgress(options); var syncDictionary = GetSyncedItemProgressDictionary(syncJobItems); @@ -97,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.Dto foreach (var item in items) { - var dto = GetBaseItemDtoInternal(item, options, syncDictionary, user, owner); + var dto = await GetBaseItemDtoInternal(item, options, syncDictionary, user, owner).ConfigureAwait(false); var tvChannel = item as LiveTvChannel; if (tvChannel != null) @@ -131,8 +131,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (programTuples.Count > 0) { - var task = _livetvManager().AddInfoToProgramDto(programTuples, options.Fields, user); - Task.WaitAll(task); + await _livetvManager().AddInfoToProgramDto(programTuples, options.Fields, user).ConfigureAwait(false); } if (channelTuples.Count > 0) @@ -159,7 +158,7 @@ namespace MediaBrowser.Server.Implementations.Dto { var syncProgress = GetSyncedItemProgress(options); - var dto = GetBaseItemDtoInternal(item, options, GetSyncedItemProgressDictionary(syncProgress), user, owner); + var dto = GetBaseItemDtoInternal(item, options, GetSyncedItemProgressDictionary(syncProgress), user, owner).Result; var tvChannel = item as LiveTvChannel; if (tvChannel != null) { @@ -300,7 +299,7 @@ namespace MediaBrowser.Server.Implementations.Dto } } - private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, Dictionary<string, SyncedItemProgress> syncProgress, User user = null, BaseItem owner = null) + private async Task<BaseItemDto> GetBaseItemDtoInternal(BaseItem item, DtoOptions options, Dictionary<string, SyncedItemProgress> syncProgress, User user = null, BaseItem owner = null) { var fields = options.Fields; @@ -349,7 +348,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (user != null) { - AttachUserSpecificInfo(dto, item, user, fields, syncProgress); + await AttachUserSpecificInfo(dto, item, user, fields, syncProgress).ConfigureAwait(false); } var hasMediaSources = item as IHasMediaSources; @@ -416,7 +415,7 @@ namespace MediaBrowser.Server.Implementations.Dto { var syncProgress = GetSyncedItemProgress(options); - var dto = GetBaseItemDtoInternal(item, options, GetSyncedItemProgressDictionary(syncProgress), user); + var dto = GetBaseItemDtoInternal(item, options, GetSyncedItemProgressDictionary(syncProgress), user).Result; if (taggedItems != null && options.Fields.Contains(ItemFields.ItemCounts)) { @@ -465,21 +464,26 @@ namespace MediaBrowser.Server.Implementations.Dto /// <param name="user">The user.</param> /// <param name="fields">The fields.</param> /// <param name="syncProgress">The synchronize progress.</param> - private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields, Dictionary<string, SyncedItemProgress> syncProgress) + private async Task AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields, Dictionary<string, SyncedItemProgress> syncProgress) { if (item.IsFolder) { var folder = (Folder)item; - // Skip the user data manager because we've already looped through the recursive tree and don't want to do it twice - // TODO: Improve in future - dto.UserData = GetUserItemDataDto(_userDataRepository.GetUserData(user, item)); - - if (item.SourceType == SourceType.Library && folder.SupportsUserDataFromChildren) + if (item.SourceType == SourceType.Library && folder.SupportsUserDataFromChildren && fields.Contains(ItemFields.SyncInfo)) { - SetSpecialCounts(folder, user, dto, fields, syncProgress); + // Skip the user data manager because we've already looped through the recursive tree and don't want to do it twice + // TODO: Improve in future + dto.UserData = GetUserItemDataDto(_userDataRepository.GetUserData(user, item)); - dto.UserData.Played = dto.UserData.PlayedPercentage.HasValue && dto.UserData.PlayedPercentage.Value >= 100; + await SetSpecialCounts(folder, user, dto, fields, syncProgress).ConfigureAwait(false); + + dto.UserData.Played = dto.UserData.PlayedPercentage.HasValue && + dto.UserData.PlayedPercentage.Value >= 100; + } + else + { + dto.UserData = await _userDataRepository.GetUserDataDto(item, dto, user).ConfigureAwait(false); } if (item.SourceType == SourceType.Library) @@ -500,7 +504,7 @@ namespace MediaBrowser.Server.Implementations.Dto else { - dto.UserData = _userDataRepository.GetUserDataDto(item, user); + dto.UserData = _userDataRepository.GetUserDataDto(item, user).Result; } dto.PlayAccess = item.GetPlayAccess(user); @@ -515,7 +519,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (season != null) { - dto.SeasonUserData = _userDataRepository.GetUserDataDto(season, user); + dto.SeasonUserData = await _userDataRepository.GetUserDataDto(season, user).ConfigureAwait(false); } } } @@ -1588,32 +1592,25 @@ namespace MediaBrowser.Server.Implementations.Dto /// <param name="fields">The fields.</param> /// <param name="syncProgress">The synchronize progress.</param> /// <returns>Task.</returns> - private void SetSpecialCounts(Folder folder, User user, BaseItemDto dto, List<ItemFields> fields, Dictionary<string, SyncedItemProgress> syncProgress) + private async Task SetSpecialCounts(Folder folder, User user, BaseItemDto dto, List<ItemFields> fields, Dictionary<string, SyncedItemProgress> syncProgress) { - var addSyncInfo = fields.Contains(ItemFields.SyncInfo); - - if (!addSyncInfo) - { - return; - } - var recursiveItemCount = 0; var unplayed = 0; double totalPercentPlayed = 0; double totalSyncPercent = 0; - var children = folder.GetItems(new InternalItemsQuery + var children = await folder.GetItems(new InternalItemsQuery { IsFolder = false, Recursive = true, - ExcludeLocationTypes = new[] { LocationType.Virtual }, + ExcludeLocationTypes = new[] {LocationType.Virtual}, User = user - }).Result.Items; + }).ConfigureAwait(false); // Loop through each recursive child - foreach (var child in children) + foreach (var child in children.Items) { var userdata = _userDataRepository.GetUserData(user, child); @@ -1643,26 +1640,23 @@ namespace MediaBrowser.Server.Implementations.Dto unplayed++; } - if (addSyncInfo) + double percent = 0; + SyncedItemProgress syncItemProgress; + if (syncProgress.TryGetValue(child.Id.ToString("N"), out syncItemProgress)) { - double percent = 0; - SyncedItemProgress syncItemProgress; - if (syncProgress.TryGetValue(child.Id.ToString("N"), out syncItemProgress)) + switch (syncItemProgress.Status) { - switch (syncItemProgress.Status) - { - case SyncJobItemStatus.Synced: - percent = 100; - break; - case SyncJobItemStatus.Converting: - case SyncJobItemStatus.ReadyToTransfer: - case SyncJobItemStatus.Transferring: - percent = 50; - break; - } + case SyncJobItemStatus.Synced: + percent = 100; + break; + case SyncJobItemStatus.Converting: + case SyncJobItemStatus.ReadyToTransfer: + case SyncJobItemStatus.Transferring: + percent = 50; + break; } - totalSyncPercent += percent; } + totalSyncPercent += percent; } dto.RecursiveItemCount = recursiveItemCount; @@ -1672,13 +1666,10 @@ namespace MediaBrowser.Server.Implementations.Dto { dto.UserData.PlayedPercentage = totalPercentPlayed / recursiveItemCount; - if (addSyncInfo) + var pct = totalSyncPercent / recursiveItemCount; + if (pct > 0) { - var pct = totalSyncPercent / recursiveItemCount; - if (pct > 0) - { - dto.SyncPercent = pct; - } + dto.SyncPercent = pct; } } } |
