public DeckInfo ReadDeck(string deckDefinition) { HtmlParser parser = new HtmlParser(); IHtmlDocument doc = parser.Parse(deckDefinition); var deckTitle = doc.QuerySelector("h1.page-header__title").TextContent; var deckList = doc.QuerySelectorAll("div.div-col.columns.column-count.column-count-2 span.card-image-tooltip"); const string titlePrefix = "Decks/"; if (deckTitle.StartsWith(titlePrefix)) { deckTitle = deckTitle.Substring(titlePrefix.Length); } DeckInfo deckInfo = new DeckInfo(deckTitle); foreach (var entry in deckList) { string cardName = entry.TextContent; if (!MagicDuelsHelper.IsBasicLand(cardName)) { string numberOf = entry.PreviousSibling.TextContent.Trim(); int number = int.Parse(numberOf); deckInfo.Cards.Add(new DeckEntry { Required = number, CardName = cardName, }); } } return(deckInfo); }
public DeckInfo ReadDeck(string deckDefinition) { HtmlParser parser = new HtmlParser(); IHtmlDocument doc = parser.Parse(deckDefinition); var deckTitle = doc.QuerySelector("h1").TextContent; var deckList = doc.QuerySelector("#deckList"); var cards = deckList.QuerySelectorAll("img[data-cardName]"); var amounts = deckList.QuerySelectorAll("label[data-cardCount=count]"); const string titlePrefix = "Magic Duels Deck: "; if (deckTitle.StartsWith(titlePrefix)) { deckTitle = deckTitle.Substring(titlePrefix.Length); } DeckInfo deckInfo = new DeckInfo(deckTitle); for (int k = 0; k < cards.Length; k++) { string cardName = WebUtility.HtmlDecode(cards[k].GetAttribute("data-cardName")); if (!MagicDuelsHelper.IsBasicLand(cardName)) { int number = int.Parse(amounts[k].TextContent); deckInfo.Cards.Add(new DeckEntry { Required = number, CardName = cardName, }); } } return(deckInfo); }
public DeckInfo ReadDeck(string deckDefinition) { HtmlParser parser = new HtmlParser(); IHtmlDocument doc = parser.Parse(deckDefinition); var deckTitle = doc.QuerySelector("title").TextContent.Trim(); var deckList = doc.QuerySelectorAll("ul.boardlist li.member > a:first-child"); const string titlePostfix = " (Magic Duels MTG Deck)"; if (deckTitle.EndsWith(titlePostfix)) { deckTitle = deckTitle.Substring(0, deckTitle.Length - titlePostfix.Length); } DeckInfo deckInfo = new DeckInfo(deckTitle); foreach (var entry in deckList) { string cardName = AdjustTwoFacedCardNames(entry.GetAttribute("data-name")); if (!MagicDuelsHelper.IsBasicLand(cardName)) { string numberOf = entry.TextContent.Trim(); int number = int.Parse(numberOf.Substring(0, numberOf.Length - 1)); deckInfo.Cards.Add(new DeckEntry { Required = number, CardName = cardName, }); } } return(deckInfo); }
private void GetCards(dynamic deck, DeckInfo deckInfo) { foreach (var section in deck.sections) { dynamic cards; try { cards = section.cards; } catch (RuntimeBinderException) { cards = null; } if (cards != null) { foreach (var card in cards) { if ((bool)card.isSideboard) { continue; } string cardName = AdjustTwoFacedCardNames((string)card.name); if (!MagicDuelsHelper.IsBasicLand(cardName)) { deckInfo.Cards.Add(new DeckEntry { Required = (int)card.amount, CardName = cardName, }); } } } } }
public DeckInfo ReadDeck(string deckDefinition) { deckDefinition = StripSideboard(deckDefinition); MatchCollection cardLines = Regex.Matches(deckDefinition, @"^(\d+)\s*[x|X]?\s+(.*)$", RegexOptions.Multiline); DeckInfo deckInfo = new DeckInfo("Magic Duels Deck"); foreach (Match match in cardLines) { string cardName = AdjustTwoFacedCardNames(match.Groups[2].Value.TrimEnd()); if (!MagicDuelsHelper.IsBasicLand(cardName)) { deckInfo.Cards.Add(new DeckEntry { Required = int.Parse(match.Groups[1].Value), CardName = cardName, }); } } return(deckInfo); }