122 lines
5.1 KiB
C#
122 lines
5.1 KiB
C#
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;
|
|
using Sharpfall;
|
|
|
|
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()));
|
|
|
|
if (!File.Exists("./oracled.json"))
|
|
{
|
|
File.CreateText("./oracled.json");
|
|
Console.WriteLine("no oracled.json, can't help but assume contents will be different");
|
|
}
|
|
|
|
if (needUpdate("./oracle-now.json", "./oracled.json"))
|
|
{
|
|
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.");
|
|
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()));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.Write("same checksum (no update)");
|
|
File.Delete("./oracle-now.json");
|
|
}
|
|
}
|
|
public static bool needUpdate(string path1, string path2)
|
|
{
|
|
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));
|
|
if (lhs == null || rhs == null)
|
|
{
|
|
Console.WriteLine($"one list not found.");
|
|
return true;
|
|
}
|
|
foreach (var lhsCard in lhs)
|
|
{
|
|
var rhsCard = rhs.FirstOrDefault(c => c.oracle_id == lhsCard.oracle_id);
|
|
if (rhsCard == null || lhsCard.oracle_text != rhsCard.oracle_text)
|
|
{
|
|
Console.WriteLine($"{lhsCard.name} looks updated.");
|
|
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);
|
|
}
|
|
if (rhs.Count() > 0)
|
|
{
|
|
Console.WriteLine($"at least 1 card added or removed: {rhs.First().name}");
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("1 path not found.");
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|