public async Task <DetailedAlbumInfo[]> GetAllAlbums( ShortBandInfo bandInfo, CancellationToken token = default ) { var detailedInfo = await this.GetDetailedBandInfo(bandInfo); return(await this.GetAllAlbums(detailedInfo, token)); }
public static DetailedBandInfo BandInfoFromDetailsPage(string html, ShortBandInfo shortInfo) { var documentNode = GetDocumentNode(html); var imageStr = documentNode.QuerySelector("div.artist-header__bg > img.artist-header__bg__img") .GetAttributeValue("src", null); var imageUrl = imageStr == null ? null : new Uri(imageStr); var topTracks = GetTracks(documentNode.QuerySelector(TracksTableBodySelector), true); var albums = GetAlbums(documentNode.QuerySelector("div.albumCollection__albums.js-grid")); return(new DetailedBandInfo(shortInfo, imageUrl, albums, topTracks)); }
public async Task <DetailedBandInfo> GetDetailedBandInfo(ShortBandInfo info) { var cached = WimpCache.ReadDetailedBandInfo(info.Id); if (cached != null) { return(cached); } var parsed = await Utils.WithRetry(async() => { var html = await SeleniumRequests.GetHtml(info.Uri, CancellationToken.None); return(WimpHtmlParsing.BandInfoFromDetailsPage(html, info)); }); WimpCache.SaveDetailedBandInfo(parsed); return(parsed); }
public async void Init(ShortBandInfo info) { this.ShortInfo = info; var detailedInfo = await App.InfoProvider.GetDetailedBandInfo(info); this.DetailedInfo = detailedInfo; this.TopTracks.Clear(); foreach (var topTrack in detailedInfo.TopTracks) { this.TopTracks.Add(topTrack); } this.Albums.Clear(); foreach (var album in detailedInfo.AlbumInfos) { this.Albums.Add(album); } }
public static void SaveShortBandInfo(ShortBandInfo info) { JsonCacheUtils.SaveIntoJsonCache(info, ShortBandClz, info.Id); }
public static void SaveSearchBandExact(string query, ShortBandInfo info) { JsonCacheUtils.SaveIntoJsonCache(info, SearchBandExact, query); }