public async void InitiateGenreRetrieval(Action <Genre> genreAvailableCallback) { var genreDoc = await NetflixXmlParser.GetGenresXml(); foreach (var entryNode in genreDoc.Descendants(NetflixXmlParser.AtomNodeNames.Entry)) { await ProcessGenre(entryNode, genreAvailableCallback); } }
private async Task ProcessGenre(XElement genreElement, Action <Genre> genreAvailableCallback) { string titleResponse; string titleListingUrl = string.Format( TITLE_URL_FORMAT, genreElement.Element(NetflixXmlParser.AtomNodeNames.Id).Value); using (var titleClient = new HttpClient()) { titleClient.MaxResponseContentBufferSize = int.MaxValue; titleResponse = await titleClient.GetStringAsync(titleListingUrl); } var titleDoc = XDocument.Parse(titleResponse); var titleObjects = titleDoc.Descendants(NetflixXmlParser.AtomNodeNames.Entry).Select(e => NetflixXmlParser.ParseTitle(e)); var genre = new Genre { Name = genreElement.Element(NetflixXmlParser.AtomNodeNames.Title).Value, Titles = new ObservableCollection <Title>() }; foreach (var title in titleObjects) { genre.Titles.Add(title); } CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, (() => genreAvailableCallback(genre))); }