コード例 #1
0
        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);
        }
コード例 #2
0
 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,
                     });
                 }
             }
         }
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        public string MakePage(DeckInfo deck, string deckPath)
        {
            string pageContent = GetPageMarkup(deck, deckPath);
            string fileName    = GetFilename();

            File.WriteAllText(fileName, pageContent);
            return(fileName);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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());
        }
コード例 #10
0
        private void DisplayMissingPage(DeckInfo deckInfo, string deckPath)
        {
            string fileName = _pageGenerator.MakePage(deckInfo, deckPath);

            Process.Start(fileName);
        }