Esempio n. 1
0
        private static string ContinueUploadMessage(ValidateDeckResult valid)
        {
            StringBuilder msg = new StringBuilder("The deck contains the following error");

            if ((valid & (valid - 1)) != 0)
            {
                msg.Append("s");
            }
            msg.Append(".\n\n");
            if ((valid & ValidateDeckResult.ContainsDuplicates) != 0)
            {
                msg.Append("Duplicates; ");
            }
            if ((valid & ValidateDeckResult.UnknownCard) != 0)
            {
                msg.Append("Unknown cards; ");
            }
            if ((valid & ValidateDeckResult.MaxInHandExceeded) != 0)
            {
                msg.Append("Invalid amounts; ");
            }
            if ((valid & ValidateDeckResult.LessThan60Cards) != 0)
            {
                msg.Append("Less than 60 cards; ");
            }
            msg.Remove(msg.Length - 2, 2);
            msg.Append(". \n\nContinue with upload?");
            return(msg.ToString());
        }
Esempio n. 2
0
        private async void buttonUpload_Click(object sender, EventArgs e)
        {
            ValidateDeckResult valid = ValidateDeck();

            if (!ShouldContinueWithUpload(valid))
            {
                return;
            }
            UpdateUI(true);
            _deck.Cards = richTextBoxDeck.Text;
            try
            {
                await _deck.UploadAsync();

                ShowMessage("Deck has been uploaded.");
            }
            catch (WikiaEditConflictException)
            {
                ShowMessage("Unable to upload. Someone else is editing this deck. Please use 'view' to check their changes before trying again.");
            }
            catch (WikiaEditException ex)
            {
                if (ex.ErrorCode == "blocked")
                {
                    BlockedUser(); // will exit app
                }
                ShowMessage("Upload failed. " + ex.Message);
            }
            catch (WebException)
            {
                ShowMessage("Upload failed due to a network error.");
            }
            UpdateUI(false);
        }
Esempio n. 3
0
 private bool ShouldContinueWithUpload(ValidateDeckResult valid)
 {
     if ((valid & ValidateDeckResult.BadFormat) != 0)
     {
         ShowMessage("The deck contains entries with an invalid format (shown in red). Please correct them before uploading.");
         return(false);
     }
     else if (valid != ValidateDeckResult.Valid)
     {
         if (ShowMessage(ContinueUploadMessage(valid), MessageButtons.ContinueCancel) != DialogResult.OK)
         {
             return(false);
         }
     }
     return(true);
 }
Esempio n. 4
0
        private ValidateDeckResult ValidateDeck()
        {
            int cardCount             = 0;
            ValidateDeckResult result = ValidateDeckResult.Valid;

            char[]   sep       = { '\n' };
            string[] cardLines = richTextBoxDeck.Text.Split(sep, StringSplitOptions.RemoveEmptyEntries);
            richTextBoxDeck.Text = "";
            Regex         cardEntry         = new Regex(@"^(\d+)\s*x?\s+(.+)$");
            List <Card>   processedCards    = new List <Card>();
            List <String> processedUnknowns = new List <string>();

            foreach (string line in cardLines)
            {
                string trimmedLine = line.Trim();
                if (trimmedLine.Length == 0)
                {
                    continue; // foreach
                }
                Match match = cardEntry.Match(trimmedLine);
                if (!match.Success)
                {
                    richTextBoxDeck.AppendText(trimmedLine, validationColors[ValidateDeckResult.BadFormat].Color);
                    richTextBoxDeck.AppendText("\n");
                    result |= ValidateDeckResult.BadFormat;
                    continue;
                }

                int amount;
                if (!int.TryParse(match.Groups[1].Value, out amount) || amount < 0)
                {
                    richTextBoxDeck.AppendText(trimmedLine, validationColors[ValidateDeckResult.BadFormat].Color);
                    richTextBoxDeck.AppendText("\n");
                    result |= ValidateDeckResult.BadFormat;
                    continue;
                }
                cardCount += amount;

                Card card = _cards.GetByName(match.Groups[2].Value);
                if (card == null)
                {
                    string lowerCaseName = match.Groups[2].Value.ToLowerInvariant();
                    if (processedUnknowns.Contains(lowerCaseName))
                    {
                        richTextBoxDeck.AppendText(trimmedLine, validationColors[ValidateDeckResult.ContainsDuplicates].Color);
                        richTextBoxDeck.AppendText("\n");
                        result |= ValidateDeckResult.ContainsDuplicates;
                        continue;
                    }
                    else
                    {
                        processedUnknowns.Add(lowerCaseName);
                        richTextBoxDeck.AppendText(trimmedLine, validationColors[ValidateDeckResult.UnknownCard].Color);
                        richTextBoxDeck.AppendText("\n");
                        result |= ValidateDeckResult.UnknownCard;
                        continue;
                    }
                }

                if (processedCards.Contains(card))
                {
                    richTextBoxDeck.AppendText(trimmedLine, validationColors[ValidateDeckResult.ContainsDuplicates].Color);
                    richTextBoxDeck.AppendText("\n");
                    result |= ValidateDeckResult.ContainsDuplicates;
                    continue;
                }
                processedCards.Add(card);

                if (amount > (_useRarityForMaxInHand ? card.MaxInHandFromRarity : card.MaxInHand))
                {
                    richTextBoxDeck.AppendText(trimmedLine, validationColors[ValidateDeckResult.MaxInHandExceeded].Color);
                    richTextBoxDeck.AppendText("\n");
                    result |= ValidateDeckResult.MaxInHandExceeded;
                    continue;
                }

                string correctCaseLine = match.Groups[1].Value + " " + card.Name;
                richTextBoxDeck.AppendText(correctCaseLine, validationColors[ValidateDeckResult.Valid].Color);
                richTextBoxDeck.AppendText("\n");
            }
            if (cardCount < 60)
            {
                result |= ValidateDeckResult.LessThan60Cards;
            }
            SetCardCountText(cardCount);
            return(result);
        }