private async void UpdateHomeItems() { #region Subscriptions Log.Info("Updating the videos on the home page"); PlaylistDataType YTItemsListTemp = new PlaylistDataType() { Title = "Today" }; PlaylistDataType YTItemsListTempYesterday = new PlaylistDataType() { Title = "Yesterday" }; PlaylistDataType YTItemsListTempTwoDays = new PlaylistDataType() { Title = "Two Days Ago" }; PlaylistDataType YTItemsListTempThreeDays = new PlaylistDataType() { Title = "Three Days Ago" }; PlaylistDataType YTItemsListTempFourDays = new PlaylistDataType() { Title = "Four Days Ago" }; PlaylistDataType YTItemsListTempFiveDays = new PlaylistDataType() { Title = "Five Days Ago" }; System.Collections.Concurrent.BlockingCollection <Google.Apis.YouTube.v3.Data.SearchResult> searchResponseList = new System.Collections.Concurrent.BlockingCollection <Google.Apis.YouTube.v3.Data.SearchResult>(); var service = await YoutubeMethodsStatic.GetServiceAsync(); await Task.Run(() => { Parallel.ForEach(Constants.MainPageRef.subscriptionsList, subscription => { try { var tempService = service.Search.List("snippet"); tempService.ChannelId = subscription.Id; tempService.Order = SearchResource.ListRequest.OrderEnum.Date; tempService.MaxResults = 8; var response = tempService.Execute(); foreach (var video in response.Items) { searchResponseList.Add(video); } } catch (Exception ex) { Log.Error("A subscription's videos failed to load."); subscription.Thumbnail = null; Log.Error(JsonConvert.SerializeObject(subscription)); Log.Error(ex.Message); } }); }); var orderedSearchResponseList = searchResponseList.OrderByDescending(x => x.Snippet.PublishedAt).ToList(); Log.Info("Ordering videos by date and placing them in the correct list"); foreach (var video in orderedSearchResponseList) { var methods = new YoutubeMethods(); if (video != null && video.Id.Kind == "youtube#video" && video.Id.VideoId != null && video.Snippet.LiveBroadcastContent != "live") { try { DateTime now = DateTime.Now; var ytubeItem = methods.VideoToYoutubeItem(video); if (ytubeItem.Failed != true) { if (video.Snippet.PublishedAt > now.AddHours(-24)) { YTItemsListTemp.Items.Add(ytubeItem); } else if (video.Snippet.PublishedAt > now.AddHours(-48)) { YTItemsListTempYesterday.Items.Add(ytubeItem); } else if (video.Snippet.PublishedAt > now.AddHours(-72)) { YTItemsListTempTwoDays.Items.Add(ytubeItem); } else if (video.Snippet.PublishedAt > now.AddHours(-96)) { YTItemsListTempThreeDays.Items.Add(ytubeItem); } else if (video.Snippet.PublishedAt > now.AddHours(-120)) { YTItemsListTempFourDays.Items.Add(ytubeItem); } else if (video.Snippet.PublishedAt > now.AddHours(-144) && video.Snippet.PublishedAt <= now) { YTItemsListTempFiveDays.Items.Add(ytubeItem); } } } catch (Exception ex) { Log.Error(String.Format("A video failed to load into the home page. Json: {0}", JsonConvert.SerializeObject(video))); Log.Error(ex.Message); } } } YTItems.Add(YTItemsListTemp); YTItems.Add(YTItemsListTempYesterday); YTItems.Add(YTItemsListTempTwoDays); YTItems.Add(YTItemsListTempThreeDays); YTItems.Add(YTItemsListTempFourDays); YTItems.Add(YTItemsListTempFiveDays); #endregion LoadingRing.IsActive = false; Parallel.ForEach(YTItems, playlist => { var methodsLocal = new YoutubeMethods(); methodsLocal.FillInViews(playlist.Items, service); }); }