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); }
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) { 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); }
public string MakePage(DeckInfo deck, string deckPath) { string pageContent = GetPageMarkup(deck, deckPath); string fileName = GetFilename(); File.WriteAllText(fileName, pageContent); return(fileName); }
public DeckInfo ReadDeck(string deckDefinition) { string deckJson = ExtractDeckJson(deckDefinition); dynamic deck = JObject.Parse(deckJson); DeckInfo deckInfo = new DeckInfo((string)deck.name); GetCards(deck, deckInfo); return(deckInfo); }
private string ShowMissingCards(string deckPath) { string content = GetDeckDocument(deckPath); _worker.ReportProgress(50); DeckInfo deckInfo = DeckReaders.GetReader(deckPath).ReadDeck(content); deckInfo.GetOwned(_cards, _correctCardNames); DisplayMissingPage(deckInfo, deckPath); return(deckInfo.DeckName); }
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); }
private string GetPageMarkup(DeckInfo deck, string deckPath) { IEnumerable <DeckEntry> neededCards = deck.Cards.Where(x => !x.Unknown && x.Shortfall > 0); IEnumerable <DeckEntry> unknownCards = deck.Cards.Where(x => x.Unknown); IEnumerable <DeckEntry> possessedCards = deck.Cards.Where(x => x.Owned > 0); SectionData sectionData = new SectionData { TotalNeeded = neededCards.Sum(x => x.Shortfall), TotalPossessed = possessedCards.Sum(x => x.Possessed), NeededMarkup = _itemTemplate.GetAllItemsMarkup(neededCards, true), UnknownMarkup = _unknownItemTemplate.GetAllItemsMarkup(unknownCards, false), PossessedMarkup = _possessedItemTemplate.GetAllItemsMarkup(possessedCards, false), TemplatePath = _templatePath, Deck = deck, DeckPath = deckPath, }; StringBuilder page = _pageTemplate.GetSectionMarkup(sectionData); if (_pageTemplate.ContainsDeckLinkSection) { if (Utils.IsHttpPath(deckPath)) { string deckLinkSection = _deckLinkSectionTemplate.GetSectionMarkup(sectionData).ToString(); page.Replace(PageTemplateFields.DeckLinkSection, deckLinkSection); } else { page.Replace(PageTemplateFields.DeckLinkSection, ""); } } if (_pageTemplate.ContainsPossesedCardsSection) { if (possessedCards.Any()) { string possessedCardsSection = _possessedSectionTemplate.GetSectionMarkup(sectionData).ToString(); page.Replace(PageTemplateFields.PossesedCardsSection, possessedCardsSection); } else { page.Replace(PageTemplateFields.PossesedCardsSection, ""); } } if (_pageTemplate.ContainsUnknownCardsSection) { if (unknownCards.Any()) { string unknownCardsSection = _unknownSectionTemplate.GetSectionMarkup(sectionData).ToString(); page.Replace(PageTemplateFields.UnknownCardsSection, unknownCardsSection); } else { page.Replace(PageTemplateFields.UnknownCardsSection, ""); } } return(page.ToString()); }
private void DisplayMissingPage(DeckInfo deckInfo, string deckPath) { string fileName = _pageGenerator.MakePage(deckInfo, deckPath); Process.Start(fileName); }