Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
 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;
     }
 }
Ejemplo n.º 3
0
        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");
            }
        }
Ejemplo n.º 4
0
        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();
                }
            }
        }
Ejemplo n.º 5
0
        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");
            }
        }