public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, User user) { var recursiveItemCount = 0; var unplayed = 0; double totalPercentPlayed = 0; IEnumerable<BaseItem> children; var folder = this; var season = folder as Season; if (season != null) { children = season.GetEpisodes(user).Where(i => i.LocationType != LocationType.Virtual); } else { children = folder.GetRecursiveChildren(user) .Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual); } // Loop through each recursive child foreach (var child in children) { recursiveItemCount++; var isUnplayed = true; var itemUserData = UserDataManager.GetUserData(user.Id, child.GetUserDataKey()); // Incrememt totalPercentPlayed if (itemUserData != null) { if (itemUserData.Played) { totalPercentPlayed += 100; isUnplayed = false; } else if (itemUserData.PlaybackPositionTicks > 0 && child.RunTimeTicks.HasValue && child.RunTimeTicks.Value > 0) { double itemPercent = itemUserData.PlaybackPositionTicks; itemPercent /= child.RunTimeTicks.Value; totalPercentPlayed += itemPercent; } } if (isUnplayed) { unplayed++; } } dto.UnplayedItemCount = unplayed; if (recursiveItemCount > 0) { dto.PlayedPercentage = totalPercentPlayed / recursiveItemCount; dto.Played = dto.PlayedPercentage.Value >= 100; } }
public override async Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user) { if (!SupportsUserDataFromChildren) { return; } var unplayedQueryResult = await GetItems(new InternalItemsQuery(user) { Recursive = true, IsFolder = false, IsVirtualItem = false, EnableTotalRecordCount = true, Limit = 0, IsPlayed = false }).ConfigureAwait(false); var allItemsQueryResult = await GetItems(new InternalItemsQuery(user) { Recursive = true, IsFolder = false, IsVirtualItem = false, EnableTotalRecordCount = true, Limit = 0 }).ConfigureAwait(false); if (itemDto != null) { itemDto.RecursiveItemCount = allItemsQueryResult.TotalRecordCount; } var recursiveItemCount = allItemsQueryResult.TotalRecordCount; double unplayedCount = unplayedQueryResult.TotalRecordCount; if (recursiveItemCount > 0) { var unplayedPercentage = (unplayedCount / recursiveItemCount) * 100; dto.PlayedPercentage = 100 - unplayedPercentage; dto.Played = dto.PlayedPercentage.Value >= 100; dto.UnplayedItemCount = unplayedQueryResult.TotalRecordCount; } if (itemDto != null) { if (this is Season || this is MusicAlbum) { itemDto.ChildCount = recursiveItemCount; } } }
public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, User user) { if (!SupportsUserDataFromChildren) { return; } var recursiveItemCount = 0; var unplayed = 0; double totalPercentPlayed = 0; var itemsResult = GetItems(new InternalItemsQuery(user) { Recursive = true, IsFolder = false, ExcludeLocationTypes = new[] { LocationType.Virtual } }).Result; var children = itemsResult.Items; // Loop through each recursive child foreach (var child in children) { recursiveItemCount++; var isUnplayed = true; var itemUserData = UserDataManager.GetUserData(user, child); // Incrememt totalPercentPlayed if (itemUserData != null) { if (itemUserData.Played) { totalPercentPlayed += 100; isUnplayed = false; } else if (itemUserData.PlaybackPositionTicks > 0 && child.RunTimeTicks.HasValue && child.RunTimeTicks.Value > 0) { double itemPercent = itemUserData.PlaybackPositionTicks; itemPercent /= child.RunTimeTicks.Value; totalPercentPlayed += itemPercent; } } if (isUnplayed) { unplayed++; } } dto.UnplayedItemCount = unplayed; if (recursiveItemCount > 0) { dto.PlayedPercentage = totalPercentPlayed / recursiveItemCount; dto.Played = dto.PlayedPercentage.Value >= 100; } }
public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, User user) { // Nothing meaninful here and will only waste resources }