creature-bird-dwarf/Program.cs

122 lines
5.1 KiB
C#
Raw Permalink Normal View History

2021-10-07 06:27:33 -04:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Linq;
using System.Net;
using Newtonsoft.Json;
using System.Threading.Tasks;
using System.Diagnostics;
2021-11-06 00:41:00 -04:00
using Sharpfall;
2021-10-07 06:27:33 -04:00
namespace creatureBirdDwarf
{
class Program
{
static async Task Main(string[] args)
{
var request = WebRequest.Create("https://api.scryfall.com/bulk-data");
var response = request.GetResponse();
BulkMetaEntry oracleMeta, defaultMeta;
using (var dataStream = new StreamReader(response.GetResponseStream()))
{
string responseFromServer = dataStream.ReadToEnd();
var bulk = JsonConvert.DeserializeObject<BulkDataList>(responseFromServer);
oracleMeta = bulk.data.FirstOrDefault(d => d.type == "oracle_cards");
defaultMeta = bulk.data.FirstOrDefault(d => d.type == "default_cards");
}
Console.WriteLine("found oracle download uri");
Console.WriteLine("scryfall requests 50-100 ms between requests...");
await Task.Delay(100);
Console.WriteLine("should be good.");
request = WebRequest.Create(oracleMeta.download_uri);
response = request.GetResponse();
var OracleIDd = new List<Card>();
using (var dataStream = new StreamReader(response.GetResponseStream()))
{
string responseFromServer = dataStream.ReadToEnd();
OracleIDd = JsonConvert.DeserializeObject<List<Card>>(responseFromServer);
}
File.WriteAllText("./oracle-now.json", JsonConvert.SerializeObject(OracleIDd, Formatting.Indented, new Newtonsoft.Json.Converters.StringEnumConverter()));
2021-10-07 06:27:33 -04:00
if (!File.Exists("./oracled.json"))
{
File.CreateText("./oracled.json");
Console.WriteLine("no oracled.json, can't help but assume contents will be different");
2021-10-07 06:27:33 -04:00
}
if (needUpdate("./oracle-now.json", "./oracled.json"))
2021-10-07 06:27:33 -04:00
{
Console.WriteLine("looks different, going to have to update.");
Console.WriteLine("scryfall requests 50-100 ms between requests. Granted I can't imagine it hasn't been that long.");
2021-10-07 06:27:33 -04:00
await Task.Delay(100);
Console.WriteLine("should be good.");
File.Delete("./oracled.json");
File.Move("./oracle-now.json", "./oracled.json");
request = WebRequest.Create(defaultMeta.download_uri);
response = request.GetResponse();
var defaultList = new List<Card>();
using (var dataStream = new StreamReader(response.GetResponseStream()))
{
string responseFromServer = dataStream.ReadToEnd();
defaultList = JsonConvert.DeserializeObject<List<Card>>(responseFromServer);
File.WriteAllText("./default.json", JsonConvert.SerializeObject(defaultList, Formatting.Indented, new Newtonsoft.Json.Converters.StringEnumConverter()));
2021-10-07 06:27:33 -04:00
}
}
else
{
Console.Write("same checksum (no update)");
File.Delete("./oracle-now.json");
}
}
public static bool needUpdate(string path1, string path2)
{
2021-11-06 00:41:00 -04:00
if (File.Exists(path1) && File.Exists(path2))
{
var lhs = JsonConvert.DeserializeObject<List<Card>>(File.ReadAllText(path1));
var rhs = JsonConvert.DeserializeObject<List<Card>>(File.ReadAllText(path2));
2021-11-06 00:41:00 -04:00
if (lhs == null || rhs == null)
{
Console.WriteLine($"one list not found.");
return true;
}
2021-11-06 00:41:00 -04:00
foreach (var lhsCard in lhs)
{
var rhsCard = rhs.FirstOrDefault(c => c.oracle_id == lhsCard.oracle_id);
2021-11-06 00:41:00 -04:00
if (rhsCard == null || lhsCard.oracle_text != rhsCard.oracle_text)
{
Console.WriteLine($"{lhsCard.name} looks updated.");
2021-11-06 00:41:00 -04:00
if (rhsCard == null)
{
Console.WriteLine($"no rhs card. added or removed.");
}
else
{
Console.WriteLine("oracle text different:");
Console.WriteLine(lhsCard.oracle_text);
Console.WriteLine(rhsCard.oracle_text);
}
return true;
}
rhs.Remove(rhsCard);
}
2021-11-06 00:41:00 -04:00
if (rhs.Count() > 0)
{
Console.WriteLine($"at least 1 card added or removed: {rhs.First().name}");
return true;
}
return false;
}
else
2021-10-07 06:27:33 -04:00
{
Console.WriteLine("1 path not found.");
return true;
2021-10-07 06:27:33 -04:00
}
}
}
}