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()); }
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); }
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); }
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); }