private static void MainOld(string[] args) { var exeFolder = PathHelper.ExeFolder; MagicSetDefinition lastSet = null; var relativeToSource = @"..\..\..\MyMagicCollection.Shared"; var exportFileName = Path.Combine(exeFolder, relativeToSource, "CSV", "MagicDatabase.csv"); if (File.Exists(exportFileName)) { File.Delete(exportFileName); } var exportSetFileName = Path.Combine(exeFolder, relativeToSource, "CSV", "MagicDatabaseSets.csv"); if (File.Exists(exportSetFileName)) { File.Delete(exportSetFileName); } int count = 0; var inputFiles = Directory.EnumerateFiles(exeFolder, "set_*.csv", SearchOption.AllDirectories).ToList(); var textWriter = new StreamWriter(exportFileName); var config = new CsvConfiguration() { Encoding = Encoding.UTF8, HasHeaderRecord = true, CultureInfo = CultureInfo.InvariantCulture, }; // config.RegisterClassMap(new MagicCardDefinitionCsvMapper()); var availableSets = new Dictionary <string, MagicSetDefinition>(); var writer = new CsvWriter(textWriter, config); writer.WriteHeader <MagicCardDefinition>(); var setWriter = new CsvWriter(new StreamWriter(exportSetFileName), config); setWriter.WriteField <string>("Code"); setWriter.WriteField <string>("Name"); setWriter.WriteField <string>("CodeMagicCardsInfo"); setWriter.WriteField <string>("ReleaseDate"); setWriter.WriteField <string>("Block"); setWriter.WriteField <string>("IsPromoEdition"); setWriter.NextRecord(); var uniqueList = new Dictionary <string, string>(); // Write Tokens: writer.WriteRecords(TokenDefinitions.TockenDefinition); foreach (var inputCsvName in inputFiles) { Console.WriteLine("Reading file " + new FileInfo(inputCsvName).Name); var inputCsv = new CsvReader(new StringReader(File.ReadAllText(inputCsvName))); inputCsv.Configuration.Delimiter = "||"; while (inputCsv.Read()) { count += 1; var setCode = PatchSetCode(inputCsv.GetField <string>("set_code")); var card = new MagicCardDefinition(); card.NameDE = inputCsv.GetField <string>("name_DE"); card.NameEN = inputCsv.GetField <string>("name"); card.CardId = inputCsv.GetField <string>("id"); card.CardType = inputCsv.GetField <string>("type"); card.MagicCardType = GetCardType(card.CardType); card.NumberInSet = SafeGetInt(inputCsv, "number_int").ToString(); card.LegalityModern = ComputeLegality(inputCsv.GetField <string>("legality_Modern")); card.LegalityStandard = ComputeLegality(inputCsv.GetField <string>("legality_Standard")); card.LegalityLegacy = ComputeLegality(inputCsv.GetField <string>("legality_Legacy")); card.LegalityVintage = ComputeLegality(inputCsv.GetField <string>("legality_Vintage")); card.LegalityPauper = ComputeLegality(inputCsv.GetField <string>("legality_Pauper")); card.LegalityCommander = ComputeLegality(inputCsv.GetField <string>("legality_Commander")); card.LegalityFrenchCommander = ComputeLegality(inputCsv.GetField <string>("legality_French_Commander")); card.Rarity = CardDatabaseHelper.ComputeRarity(inputCsv.GetField <string>("rarity")); card.ManaCost = inputCsv.GetField <string>("manacost"); card.ConvertedManaCost = CardDatabaseHelper.ComputeConvertedManaCost(inputCsv.GetField <string>("converted_manacost")); if (!IsSetIncluded(setCode)) { continue; } // TODO: Add Patch for MKM Name (multiple versions, etc.) string mkmName = null; if (PatchCardDefinitions.PatchMkmCardDefinition.TryGetValue(card.CardId, out mkmName)) { card.NameMkm = mkmName; } //else //{ // card.NameMkm = card.NameEN; //} card.RulesText = inputCsv.GetField <string>("ability"); // .Replace("£", Environment.NewLine); card.RulesTextDE = inputCsv.GetField <string>("ability_DE"); // .Replace("£", Environment.NewLine); var setName = CardDatabaseHelper.PatchSetName(inputCsv.GetField <string>("set")); if (!string.IsNullOrWhiteSpace(setName) && !availableSets.ContainsKey(setCode)) { MagicSetDefinition blockData; if (SetDefinitions.BlockDefinition.TryGetValue(setCode, out blockData)) { availableSets.Add(setCode, blockData); } else { var definition = new MagicSetDefinition { Name = setName, Code = setCode, CodeMagicCardsInfo = PatchSetCodeMagicCardsInfo(setCode), }; availableSets.Add(setCode, definition); } } if (availableSets.TryGetValue(setCode, out lastSet)) { card.SetCode = lastSet.Code; } else { card.SetCode = setCode; } var unique = StaticMagicData.MakeNameSetCode(setCode, card.NameEN, card.NumberInSet); if (uniqueList.ContainsKey(unique)) { // Ignore variants of continue; } uniqueList.Add(unique, unique); writer.WriteRecord(card); Console.WriteLine(count + " Reading " + card.NameEN + "(" + card.SetCode + ")..."); } inputCsv.Dispose(); } // Write Sets foreach (var set in availableSets.OrderBy(s => s.Key)) { // setWriter.WriteRecord(set.Value); setWriter.WriteField <string>(set.Value.Code); setWriter.WriteField <string>(set.Value.Name); setWriter.WriteField <string>(set.Value.CodeMagicCardsInfo); setWriter.WriteField <string>(set.Value.ReleaseDate); setWriter.WriteField <string>(set.Value.Block); setWriter.WriteField <bool>(set.Value.IsPromoEdition); setWriter.NextRecord(); } writer.Dispose(); setWriter.Dispose(); }
private static void Main(string[] args) { var exeFolder = PathHelper.ExeFolder; MagicSetDefinition lastSet = null; var relativeToSource = @"..\..\..\MyMagicCollection.Shared"; var exportFileName = Path.Combine(exeFolder, relativeToSource, "CSV", "MagicDatabase.csv"); if (File.Exists(exportFileName)) { File.Delete(exportFileName); } var exportSetFileName = Path.Combine(exeFolder, relativeToSource, "CSV", "MagicDatabaseSets.csv"); if (File.Exists(exportSetFileName)) { File.Delete(exportSetFileName); } int count = 0; var inputFiles = Directory.EnumerateFiles(exeFolder, "AllSets-x.json", SearchOption.AllDirectories).ToList(); var textWriter = new StreamWriter(exportFileName); var config = new CsvConfiguration() { Encoding = Encoding.UTF8, HasHeaderRecord = true, CultureInfo = CultureInfo.InvariantCulture, }; // config.RegisterClassMap(new MagicCardDefinitionCsvMapper()); var availableSets = new Dictionary <string, MagicSetDefinition>(); var availableCards = new List <MagicCardDefinition>(); var writer = new CsvWriter(textWriter, config); writer.WriteHeader <MagicCardDefinition>(); var setWriter = new CsvWriter(new StreamWriter(exportSetFileName), config); setWriter.WriteField <string>("Code"); setWriter.WriteField <string>("Name"); setWriter.WriteField <string>("CodeMagicCardsInfo"); setWriter.WriteField <string>("ReleaseDate"); setWriter.WriteField <string>("Block"); setWriter.WriteField <string>("IsPromoEdition"); setWriter.NextRecord(); var uniqueList = new Dictionary <string, string>(); foreach (var inputCsvName in inputFiles) { Console.WriteLine("Reading file " + new FileInfo(inputCsvName).Name); var jsonContent = File.ReadAllText(inputCsvName); var allCardsAndSets = JObject.Parse(jsonContent); var numberOfCards = allCardsAndSets.Count; foreach (var setAndCards in allCardsAndSets) { var casted = setAndCards.Value as JObject; if (casted != null) { var block = casted.GetValue("block"); var mkmCode = casted.GetValue("magicCardsInfoCode"); var code = casted.GetValue("code").ToString(); var releaseDate = casted.GetValue("releaseDate"); var onlineOnly = casted.GetValue("onlineOnly"); if (onlineOnly != null) // && onlineOnly.Value.ToString() == "true") { continue; } var setData = new MagicSetDefinition { Code = code, CodeMagicCardsInfo = mkmCode != null?mkmCode.ToString() : code, Name = CardDatabaseHelper.PatchSetName(casted.GetValue("name").ToString()), Block = block != null?block.ToString() : null, ReleaseDate = releaseDate != null?releaseDate.ToString() : null, }; availableSets.Add(setData.Code, setData); Console.WriteLine("Working set " + setData.Name + "..."); var cards = casted.GetValue("cards"); foreach (var card in cards.Cast <JObject>()) { var cardName = card.GetValue("name").ToString().Trim(); var nameParts = card.GetValue("names"); if (nameParts != null) { cardName = string.Join(" // ", nameParts.Select(c => c.ToString())); } var multiverseId = card.GetValue("multiverseid"); if (multiverseId == null) { continue; // multiverseId = setData.Code + "_" + cardName; } var rulesText = card.GetValue("originalText"); var manaCost = card.GetValue("manaCost"); var convertedManaCost = card.GetValue("cmc"); var rarity = card.GetValue("rarity"); var numberInSet = card.GetValue("number"); var cardLayout = card.GetValue("layout"); MagicCardType magicCardType = MagicCardType.Unknown; var cardLayoutValue = cardLayout != null?cardLayout.ToString() : null; if (cardLayoutValue == "token") { cardName += " Token"; magicCardType = MagicCardType.Token; } // TODO: Card Type var cardDefinition = new MagicCardDefinition { CardId = multiverseId != null?multiverseId.ToString() : "", NameEN = cardName, CardType = card.GetValue("type").ToString(), RulesText = rulesText != null?rulesText.ToString() : null, ManaCost = manaCost != null?manaCost.ToString() : null, ConvertedManaCost = convertedManaCost != null?CardDatabaseHelper.ComputeConvertedManaCost(convertedManaCost.ToString()) : (int?)null, SetCode = setData.Code, NumberInSet = numberInSet != null?numberInSet.ToString() : null, Rarity = CardDatabaseHelper.ComputeRarity(rarity != null ? rarity.ToString() : null), CardLayout = cardLayoutValue, MagicCardType = magicCardType, }; // Patch special names for MKM (land versions, etc.) string mkmName = null; if (PatchCardDefinitions.PatchMkmCardDefinition.TryGetValue(cardDefinition.CardId, out mkmName)) { cardDefinition.NameMkm = mkmName.Trim(); } else { cardDefinition.NameMkm = cardDefinition.NameEN; } var legalities = card.GetValue("legalities") as JObject; if (legalities != null) { foreach (var legality in legalities.Cast <JProperty>().ToList()) { var legalityName = legality.Name.ToLowerInvariant(); if (legalityName.EndsWith(" block")) { continue; } switch (legalityName) { case "modern": cardDefinition.LegalityModern = true; break; case "standard": cardDefinition.LegalityStandard = true; break; case "pauper": cardDefinition.LegalityPauper = true; break; case "legacy": cardDefinition.LegalityLegacy = true; break; case "commander": cardDefinition.LegalityCommander = true; break; case "vintage": cardDefinition.LegalityVintage = true; break; case "singleton 100": case "freeform": case "prismatic": case "time spiral block": case "tribal wars legacy": // known but unsupported break; default: break; } } } // Foreign languages var languages = card.GetValue("foreignNames"); if (languages != null) { foreach (var language in languages.Cast <JObject>().ToList()) { var languageName = language.GetValue("language").ToString().ToLowerInvariant(); switch (languageName) { case "german": cardDefinition.NameDE = language.GetValue("name").ToString(); break; default: break; } } } availableCards.Add(cardDefinition); //Console.WriteLine("Working card " + cardDefinition.NameEN + "..."); } } } } // Remove split card duplicates CardDatabaseHelper.RemoveSplitCardDuplicates(availableCards); // Add Tokens availableCards.AddRange(TokenDefinitions.TockenDefinition); // Find duplicates var duplicates = availableCards.GroupBy(c => c.CardId).Where(g => g.Count() > 1).ToList(); foreach (var duplicate in duplicates) { Console.WriteLine("DUPLICATE CARD! " + duplicate.Count() + " " + duplicate.First().NameEN); foreach (var item in duplicate) { item.CardId = item.CardId + "_" + item.NumberInSet; } } duplicates = availableCards.GroupBy(c => c.CardId).Where(g => g.Count() > 1).ToList(); foreach (var duplicate in duplicates) { Console.WriteLine("DUPLICATE CARD AFTER FIX! " + duplicate.Count() + " " + duplicate.First().NameEN); //foreach (var item in duplicate) //{ // item.CardId = item.CardId + "_" + item.NumberInSet; //} } // Add Version string to cards: CardDatabaseHelper.PatchPotentialVersionCardData(availableCards); // Write cards writer.WriteRecords(availableCards.OrderBy(c => c.SetCode).ThenBy(c => c.NameEN).ToList()); // Write Sets var cardsBySet = availableCards.GroupBy(c => c.SetCode).ToList(); foreach (var set in availableSets.OrderBy(s => s.Key)) { if (!cardsBySet.Any(c => c.Key == set.Key)) { continue; } // setWriter.WriteRecord(set.Value); setWriter.WriteField <string>(set.Value.Code); setWriter.WriteField <string>(set.Value.Name); setWriter.WriteField <string>(set.Value.CodeMagicCardsInfo); setWriter.WriteField <string>(set.Value.ReleaseDate); setWriter.WriteField <string>(set.Value.Block); setWriter.WriteField <bool>(set.Value.IsPromoEdition); setWriter.NextRecord(); } writer.Dispose(); setWriter.Dispose(); // Dump potential cards to be fixed: var dump = CardDatabaseHelper.GetPotentialVersionCardData(availableCards); Console.WriteLine(dump); Debug.WriteLine(dump); }