/// <summary>Remove Tag</summary> /// <param name="gamer">GamerCard</param> public void Remove(GamerCard gamer) { DeleteFile(gamer.Picture.Filename); DeleteFile(gamer.Avatar.Filename); foreach (Game game in gamer.Games) { DeleteFile(game.Image.Filename); } GamerCards.Remove(gamer); Save(); }
/// <summary>Clear Tags</summary> public void Clear() { Delete(PATTERN_ALL); GamerCards.Clear(); }
/// <summary>Parse</summary> /// <param name="source">Source HTML</param> /// <param name="tag">Gamer Tag</param> private void Parse(string source, string tag) { try { GamerCard gamer = new GamerCard(); xml = XElement.Parse(Sanitise(GetBody(source))); // Parse HTML // Card XElement xmlCard = (from element in xml.Descendants() where element.Name == HTML_DIV select element).First(); // Link gamer.Link = (from element in xmlCard.Descendants() where (string)element.Attribute(ATTR_ID) == VALUE_GAMERTAG select element).Single().Attribute(ATTR_HREF).Value; // Gamer Tag gamer.Tag = (from element in xmlCard.Descendants() where (string)element.Attribute(ATTR_ID) == VALUE_GAMERTAG select element).Single().Value; // Avatar gamer.Avatar = PictureFromUri(new Uri(String.Format(URL_AVATAR, gamer.Tag))); // Account gamer.Account = xmlCard.FirstAttribute.Value.Contains(VALUE_GOLD) ? GamerCard.AccountType.Gold : GamerCard.AccountType.Free; // Gamer Picture gamer.Picture = PictureFromUri(new Uri((from element in xmlCard.Descendants() where (string)element.Attribute(ATTR_ID) == VALUE_GAMERPIC select element).Single().Attribute(ATTR_SRC).Value)); // Gamer Score try { gamer.Score = int.Parse(GetGamerItem(xmlCard, VALUE_GAMERSCORE)); } catch { gamer.Score = ZERO; } // Location gamer.Location = GetGamerItem(xmlCard, VALUE_LOCATION); // Motto gamer.Motto = GetGamerItem(xmlCard, VALUE_MOTTO); // Name gamer.Name = GetGamerItem(xmlCard, VALUE_NAME); // Bio gamer.Bio = GetGamerItem(xmlCard, VALUE_BIO); // Reputation Container XElement xmlRep = (from element in xmlCard.Descendants() where (string)element.Attribute(ATTR_CLASS) == VALUE_REPUTATION select element).Single(); // Repututation IEnumerable <XElement> reputation = (from element in xmlRep.Descendants(HTML_DIV) where element.Attribute(ATTR_CLASS).Value.StartsWith(VALUE_STAR) select element); // Stars List <StarControl> stars = new List <StarControl>(); foreach (XElement element in reputation) { StarControl star = new StarControl(); switch (element.Attribute(ATTR_CLASS).Value) { case VALUE_STAR_FULL: star.Display = StarControl.DisplayValue.Full; stars.Add(star); break; case VALUE_STAR_HALF: star.Display = StarControl.DisplayValue.Half; stars.Add(star); break; case VALUE_STAR_QUARTER: star.Display = StarControl.DisplayValue.Quarter; stars.Add(star); break; case VALUE_STAR_THREE_QUARTER: star.Display = StarControl.DisplayValue.ThreeQuarter; stars.Add(star); break; default: break; } ; } gamer.Stars = stars; // Played Section XElement xmlPlayed = (from element in xmlCard.Descendants() where (string)element.Attribute(ATTR_ID) == VALUE_PLAYED_GAMES select element).Single(); // Played Games List <Game> games = new List <Game>(); foreach (XElement element in xmlPlayed.Descendants(HTML_ITEM)) { try { Game game = new Game(); game.Link = element.Element(HTML_ANCHOR).Attribute(ATTR_HREF).Value; game.Image = PictureFromUri(new Uri(element.Element(HTML_ANCHOR).Element(HTML_IMG).Attribute(ATTR_SRC).Value)); game.ID = GetID(game.Link); game.Cover = PictureFromUri(GetCover(game.ID, false)); game.Title = GetGameItem(element, VALUE_TITLE); game.LastPlayed = GetGameItem(element, VALUE_LAST_PLAYED); game.EarnedGamerscore = GetGameItem(element, VALUE_EARNED_GAMERSCORE); game.AvailableGamerscore = GetGameItem(element, VALUE_AVAILABLE_GAMERSCORE); game.EarnedAchievements = GetGameItem(element, VALUE_EARNED_ACHIEVEMENTS); game.AvailableAchievements = GetGameItem(element, VALUE_AVAILABLE_ACHIEVEMENTS); game.PercentageComplete = GetGameItem(element, VALUE_PERCENTAGE_COMPLETE); games.Add(game); } catch { // Do Nothing } } gamer.Games = games; // Date Updated gamer.Updated = DateTime.Now; if (Exists(tag)) { int position; GamerCard previous = new GamerCard(); previous = Get(tag); position = GamerCards.IndexOf(previous); Remove(previous); GamerCards.Insert(position, gamer); } else { GamerCards.Add(gamer); } Save(); Completed(this, EventArgs.Empty); gamer = null; } catch { message = String.Format(ERR_PARSE, tag); Failed(this, EventArgs.Empty); } }