/// <summary> /// Loads common and foil badges for a single game /// </summary> /// <param name="appId"></param> /// <param name="args"></param> /// <returns></returns> public async Task <BadgeShowcase> GetBadgeShowcase(string appId, IDictionary <string, string> args) { string site = "http://www.st3amcard3xchang3.n3t/ind3x.php?gam3pag3-appid-".Replace("3", "e") + appId; var dataRequest = (HttpWebRequest)HttpWebRequest.Create(site); dataRequest.CookieContainer = new CookieContainer(); var dataResponse = (HttpWebResponse)(await dataRequest.GetResponseAsync()); string response; using (var responseRdr = new StreamReader(dataResponse.GetResponseStream(), Encoding.UTF8)) { response = responseRdr.ReadToEnd(); } var showcase = new BadgeShowcase(appId, appId); var doc = new HtmlDocument(); doc.LoadHtml(response); // parse common badges HtmlNode badgesDiv = doc.DocumentNode.SelectSingleNode("//div[@id='badges']"); if (badgesDiv != null) { badgesDiv = badgesDiv.SelectSingleNode("div[@class='showcase-element-container badge']"); } if (badgesDiv != null) { var levels = ParseBadgesContainer(badgesDiv).Take(5); foreach (var item in levels) { showcase.CommonBadges.Add(item); } } // parse foil badge HtmlNode foilDiv = doc.DocumentNode.SelectSingleNode("//div[@id='foilbadges']"); if (foilDiv != null) { foilDiv = foilDiv.SelectSingleNode("div[@class='showcase-element-container badge']"); } if (foilDiv != null) { showcase.FoilBadge = ParseBadgesContainer(foilDiv).FirstOrDefault(); if (showcase.FoilBadge != null) { showcase.FoilBadge.Level = "Foil"; } } return(showcase); }
private static void UpdateCompletion(BadgeShowcase showcase, BadgeModel badge) { showcase.UnlockedBadge = badge.UnlockedBadge; showcase.IsCompleted = badge.UnlockedBadge != null; showcase.CanCraft = badge.CanCraft; foreach (var level in showcase.CommonBadges) { level.IsCompleted = level.Name == badge.UnlockedBadge; } }
private void ReadLocalStorage() { if (_cache != null) { return; } _cache = new Dictionary <string, BadgeShowcase>(); string db = Storage.ReadContent(); if (String.IsNullOrWhiteSpace(db)) { return; } try { var xml = XDocument.Parse(db).Root; if (xml != null) { foreach (var xeBadge in xml.Elements("badge")) { var appId = (string)xeBadge.Attribute("app_id"); var showcase = new BadgeShowcase(appId, appId); foreach (var xeLevel in xeBadge.Elements("level")) { showcase.CommonBadges.Add(BadgeFromXml(xeLevel)); } var xeFoil = xeBadge.Element("foil"); if (xeFoil != null) { var foilBadge = BadgeFromXml(xeFoil); if (false == String.IsNullOrEmpty(foilBadge.PictureUrl)) { showcase.FoilBadge = foilBadge; } } _cache.Add(appId, showcase); } } Logger.Info("Showcase storage initialized"); } catch (Exception ex) { Logger.Exception(ex, "Showcase storage"); } }
public async Task LoadShowcases(IEnumerable <BadgeModel> badges, ICollection <BadgeShowcase> showcases) { var args = new Dictionary <string, string>(); BadgeModel badge = null; int unknownBadges = 0; ReadLocalStorage(); try { foreach (var b in badges) { badge = b; BadgeShowcase showcase = showcases.FirstOrDefault(s => s.AppId == b.AppId); if (showcase != null) { UpdateCompletion(showcase, badge); continue; } bool unknownBadge = false; if (false == _cache.TryGetValue(badge.AppId, out showcase)) { unknownBadge = true; showcase = await new SteamParser().GetBadgeShowcase(badge.AppId, args); _cache.Add(badge.AppId, showcase); } showcase.Title = badge.Title; UpdateCompletion(showcase, badge); showcases.Add(showcase); if (unknownBadge) { unknownBadges++; await Task.Delay(1500); } } } catch (Exception ex) { Logger.Exception(ex, String.Format("Showcase loading failed for {0}", badge.AppId)); } finally { if (unknownBadges > 0) { SaveLocalStorage(); } } }
private async Task ReadLocalStorage() { if (_cache != null) { return; } _cache = new Dictionary <string, BadgeShowcase>(); string db = Storage.ReadContent(); if (String.IsNullOrWhiteSpace(db)) { return; } var apps = await SteamParser.GetSteamApps(); try { var xml = XDocument.Parse(db).Root; if (xml != null) { foreach (var xeBadge in xml.Elements("badge")) { var appId = (string)xeBadge.Attribute("app_id"); string title = appId; GameIdentity app; bool marketable = apps.TryGetValue(appId, out app); if (marketable) { title = app.name; } var showcase = new BadgeShowcase(appId, title); showcase.IsMarketable = marketable; BadgeStockModel stock; if (_pricesUpdater.Prices.TryGetValue(appId, out stock)) { showcase.CardPrice = stock.CardValue; showcase.BadgePrice = stock.Normal; if (!marketable) { showcase.Title = stock.Name; } } foreach (var xeLevel in xeBadge.Elements("level")) { showcase.CommonBadges.Add(BadgeFromXml(xeLevel)); } var xeFoil = xeBadge.Element("foil"); if (xeFoil != null) { var foilBadge = BadgeFromXml(xeFoil); if (false == String.IsNullOrEmpty(foilBadge.PictureUrl)) { showcase.FoilBadge = foilBadge; } } _cache.Add(appId, showcase); } } Logger.Info("Showcase storage initialized"); } catch (Exception ex) { Logger.Exception(ex, "Showcase storage"); } }