private async Task RunDay(int part) { StartNewLog(SelectedDay.Year, SelectedDay.Day); var input = GetInput(SelectedDay); LogMessage($"====== Input ======"); LogMessage(input); LogMessage($"======= Running Day {SelectedDay.Year}.{SelectedDay.Day} Part {part} ======="); var day = GetDayInstance(SelectedDay); var dayTask = new Task <(string result, long elapsed)>(() => RunDay(input, day, part)); dayTask.Start(); // TODO: disable buttons and show spinner await dayTask; LogMessage($"========= DONE (Elapsed: {dayTask.Result.elapsed}ms) ========="); LogMessage($"ANSWER: {dayTask.Result.result}"); Clipboard.SetText(dayTask.Result.result); _lastRunDay = SelectedDay; _lastRunPart = part; _lastRunInput = input; _lastRunOutput = dayTask.Result.result; }
private void CreateTestFile(string testName, DayAttribute testDay, int testPart, string input, string output) { var fileName = GetTestFileName(testName, testDay, testPart); Directory.CreateDirectory(AdventConfig.TestFileFolder); File.WriteAllText(fileName, CreateTestFileContents(input, output)); LogMessage($"Test Created: {fileName}"); }
private BaseDay GetDayInstance(DayAttribute day) { var dayType = GetDayType(day); var instance = (BaseDay)Activator.CreateInstance(dayType); instance.Log = LogMessage; return(instance); }
private void DownloadInput(DayAttribute day, string inputFile) { var url = $"https://adventofcode.com/{day.Year}/day/{day.Day}/input"; if (!File.Exists(AdventConfig.SessionCookieFile)) { throw new ArgumentException($"Cannot find Session Cookie file, please check AdventConfig.cs [{AdventConfig.SessionCookieFile}]"); } var sessionCookie = File.ReadAllText(AdventConfig.SessionCookieFile); using var client = new WebClient(); client.Headers.Add(HttpRequestHeader.Cookie, sessionCookie); client.DownloadFile(url, inputFile); }
private string GetInput(DayAttribute day) { if (InputText?.Trim().Length > 0) { return(InputText); } Directory.CreateDirectory(AdventConfig.InputFileFolder); var inputFileName = $"{day.ToString()}.txt"; var inputFile = Path.Combine(AdventConfig.InputFileFolder, inputFileName); if (!File.Exists(inputFile)) { DownloadInput(day, inputFile); } InputText = File.ReadAllText(inputFile); NotifyChange(nameof(InputText)); return(InputText); }
private Type GetDayType(DayAttribute day) { return(GetDayTypes().Single(t => t.GetCustomAttribute <DayAttribute>().Year == day.Year && t.GetCustomAttribute <DayAttribute>().Day == day.Day)); }
private string GetTestFileName(string testName, DayAttribute testDay, int testPart) { var fileName = $"{testDay.Year}-{testDay.Day}-{testPart}-{testName}.test"; return(Path.Combine(AdventConfig.TestFileFolder, fileName)); }
private bool IsTestNameUnique(string testName, DayAttribute testDay, int testPart) { var fileName = GetTestFileName(testName, testDay, testPart); return(!File.Exists(fileName)); }