| 
														
															@@ -86,7 +86,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return GetBaseItemDto(item, options, user, owner); 
														 | 
														
														 | 
														
															             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 syncJobItems = GetSyncedItemProgress(options); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var syncDictionary = GetSyncedItemProgressDictionary(syncJobItems); 
														 | 
														
														 | 
														
															             var syncDictionary = GetSyncedItemProgressDictionary(syncJobItems); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -97,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             foreach (var item in items) 
														 | 
														
														 | 
														
															             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; 
														 | 
														
														 | 
														
															                 var tvChannel = item as LiveTvChannel; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 if (tvChannel != null) 
														 | 
														
														 | 
														
															                 if (tvChannel != null) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -131,8 +131,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if (programTuples.Count > 0) 
														 | 
														
														 | 
														
															             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) 
														 | 
														
														 | 
														
															             if (channelTuples.Count > 0) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -159,7 +158,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var syncProgress = GetSyncedItemProgress(options); 
														 | 
														
														 | 
														
															             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; 
														 | 
														
														 | 
														
															             var tvChannel = item as LiveTvChannel; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if (tvChannel != null) 
														 | 
														
														 | 
														
															             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; 
														 | 
														
														 | 
														
															             var fields = options.Fields; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -349,7 +348,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if (user != null) 
														 | 
														
														 | 
														
															             if (user != null) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             { 
														 | 
														
														 | 
														
															             { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                AttachUserSpecificInfo(dto, item, user, fields, syncProgress); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                await AttachUserSpecificInfo(dto, item, user, fields, syncProgress).ConfigureAwait(false); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var hasMediaSources = item as IHasMediaSources; 
														 | 
														
														 | 
														
															             var hasMediaSources = item as IHasMediaSources; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -416,7 +415,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var syncProgress = GetSyncedItemProgress(options); 
														 | 
														
														 | 
														
															             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)) 
														 | 
														
														 | 
														
															             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="user">The user.</param> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         /// <param name="fields">The fields.</param> 
														 | 
														
														 | 
														
															         /// <param name="fields">The fields.</param> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         /// <param name="syncProgress">The synchronize progress.</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) 
														 | 
														
														 | 
														
															             if (item.IsFolder) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             { 
														 | 
														
														 | 
														
															             { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 var folder = (Folder)item; 
														 | 
														
														 | 
														
															                 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) 
														 | 
														
														 | 
														
															                 if (item.SourceType == SourceType.Library) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -500,7 +504,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             else 
														 | 
														
														 | 
														
															             else 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             { 
														 | 
														
														 | 
														
															             { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                dto.UserData = _userDataRepository.GetUserDataDto(item, user); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                dto.UserData = _userDataRepository.GetUserDataDto(item, user).Result; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             dto.PlayAccess = item.GetPlayAccess(user); 
														 | 
														
														 | 
														
															             dto.PlayAccess = item.GetPlayAccess(user); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -515,7 +519,7 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     if (season != null) 
														 | 
														
														 | 
														
															                     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="fields">The fields.</param> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         /// <param name="syncProgress">The synchronize progress.</param> 
														 | 
														
														 | 
														
															         /// <param name="syncProgress">The synchronize progress.</param> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         /// <returns>Task.</returns> 
														 | 
														
														 | 
														
															         /// <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 recursiveItemCount = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var unplayed = 0; 
														 | 
														
														 | 
														
															             var unplayed = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             double totalPercentPlayed = 0; 
														 | 
														
														 | 
														
															             double totalPercentPlayed = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             double totalSyncPercent = 0; 
														 | 
														
														 | 
														
															             double totalSyncPercent = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            var children = folder.GetItems(new InternalItemsQuery 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            var children = await folder.GetItems(new InternalItemsQuery 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             { 
														 | 
														
														 | 
														
															             { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 IsFolder = false, 
														 | 
														
														 | 
														
															                 IsFolder = false, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 Recursive = true, 
														 | 
														
														 | 
														
															                 Recursive = true, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                ExcludeLocationTypes = new[] { LocationType.Virtual }, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                ExcludeLocationTypes = new[] {LocationType.Virtual}, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 User = user 
														 | 
														
														 | 
														
															                 User = user 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            }).Result.Items; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            }).ConfigureAwait(false); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             // Loop through each recursive child 
														 | 
														
														 | 
														
															             // Loop through each recursive child 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            foreach (var child in children) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            foreach (var child in children.Items) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             { 
														 | 
														
														 | 
														
															             { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 var userdata = _userDataRepository.GetUserData(user, child); 
														 | 
														
														 | 
														
															                 var userdata = _userDataRepository.GetUserData(user, child); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1643,26 +1640,23 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     unplayed++; 
														 | 
														
														 | 
														
															                     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; 
														 | 
														
														 | 
														
															             dto.RecursiveItemCount = recursiveItemCount; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1672,13 +1666,10 @@ namespace MediaBrowser.Server.Implementations.Dto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             { 
														 | 
														
														 | 
														
															             { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 dto.UserData.PlayedPercentage = totalPercentPlayed / recursiveItemCount; 
														 | 
														
														 | 
														
															                 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; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 } 
														 | 
														
														 | 
														
															                 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 |