TraktShowsPopular GetPopularShows(int page) { TraktShowsPopular PopularShows = null; if (PopularShowPages == null || LastRequest < DateTime.UtcNow.Subtract(new TimeSpan(0, TraktSettings.WebRequestCacheMinutes, 0))) { // get the first page PopularShows = TraktAPI.TraktAPI.GetPopularShows(1, TraktSettings.MaxPopularShowsRequest); // reset to defaults LastRequest = DateTime.UtcNow; CurrentPage = 1; PreviousSelectedIndex = 0; // clear the cache if (PopularShowPages == null) { PopularShowPages = new Dictionary <int, TraktShowsPopular>(); } else { PopularShowPages.Clear(); } // add page to cache PopularShowPages.Add(1, PopularShows); } else { // get page from cache if it exists if (PopularShowPages.TryGetValue(page, out PopularShows)) { return(PopularShows); } // request next page PopularShows = TraktAPI.TraktAPI.GetPopularShows(page, TraktSettings.MaxPopularShowsRequest); if (PopularShows != null && PopularShows.Shows != null) { // add to cache PopularShowPages.Add(page, PopularShows); } } return(PopularShows); }
private void SendPopularShowsToFacade(TraktShowsPopular PopularItems) { // clear facade GUIControl.ClearControl(GetID, Facade.GetID); if (PopularItems == null) { GUIUtils.ShowNotifyDialog(Translation.Error, Translation.ErrorGeneral); GUIWindowManager.ShowPreviousWindow(); PopularShowPages = null; return; } // filter shows var filteredPopularList = FilterPopularShows(PopularItems.Shows).Where(s => !string.IsNullOrEmpty(s.Title)).ToList(); // sort shows filteredPopularList.Sort(new GUIListItemShowSorter(TraktSettings.SortByPopularShows.Field, TraktSettings.SortByPopularShows.Direction)); int itemId = 0; var showImages = new List <GUITmdbImage>(); // Add Previous Page Button if (PopularItems.CurrentPage != 1) { var prevPageItem = new GUIShowListItem(Translation.PreviousPage, (int)TraktGUIWindows.PopularShows); prevPageItem.IsPrevPageItem = true; prevPageItem.IconImage = "traktPreviousPage.png"; prevPageItem.IconImageBig = "traktPreviousPage.png"; prevPageItem.ThumbnailImage = "traktPreviousPage.png"; prevPageItem.OnItemSelected += OnPreviousPageSelected; prevPageItem.IsFolder = true; Facade.Add(prevPageItem); itemId++; } foreach (var popularItem in filteredPopularList) { var item = new GUIShowListItem(popularItem.Title, (int)TraktGUIWindows.PopularShows); // add image for download var image = new GUITmdbImage { ShowImages = new TmdbShowImages { Id = popularItem.Ids.Tmdb } }; showImages.Add(image); item.Label2 = popularItem.Year.ToString(); item.TVTag = popularItem; item.Show = popularItem; item.Images = image; item.ItemId = Int32.MaxValue - itemId; item.IconImage = GUIImageHandler.GetDefaultPoster(false); item.IconImageBig = GUIImageHandler.GetDefaultPoster(); item.ThumbnailImage = GUIImageHandler.GetDefaultPoster(); item.OnItemSelected += OnShowSelected; Utils.SetDefaultIcons(item); Facade.Add(item); itemId++; } // Add Next Page Button if (PopularItems.CurrentPage != PopularItems.TotalPages) { var nextPageItem = new GUIShowListItem(Translation.NextPage, (int)TraktGUIWindows.PopularShows); nextPageItem.IsNextPageItem = true; nextPageItem.IconImage = "traktNextPage.png"; nextPageItem.IconImageBig = "traktNextPage.png"; nextPageItem.ThumbnailImage = "traktNextPage.png"; nextPageItem.OnItemSelected += OnNextPageSelected; nextPageItem.IsFolder = true; Facade.Add(nextPageItem); itemId++; } // Set Facade Layout Facade.SetCurrentLayout(Enum.GetName(typeof(Layout), CurrentLayout)); GUIControl.FocusControl(GetID, Facade.GetID); Facade.SelectIndex(PreviousSelectedIndex); // set facade properties GUIUtils.SetProperty("#itemcount", filteredPopularList.Count().ToString()); GUIUtils.SetProperty("#Trakt.Items", string.Format("{0} {1}", filteredPopularList.Count(), filteredPopularList.Count() > 1 ? Translation.SeriesPlural : Translation.Series)); // Page Properties GUIUtils.SetProperty("#Trakt.Facade.CurrentPage", PopularItems.CurrentPage.ToString()); GUIUtils.SetProperty("#Trakt.Facade.TotalPages", PopularItems.TotalPages.ToString()); GUIUtils.SetProperty("#Trakt.Facade.TotalItemsPerPage", TraktSettings.MaxPopularShowsRequest.ToString()); // Download show images Async and set to facade GUIShowListItem.GetImages(showImages); }