diff --git a/GamesDoneQuickCalendarFactory/CalendarGenerator.cs b/GamesDoneQuickCalendarFactory/CalendarGenerator.cs index 397f856..1376bbf 100644 --- a/GamesDoneQuickCalendarFactory/CalendarGenerator.cs +++ b/GamesDoneQuickCalendarFactory/CalendarGenerator.cs @@ -1,4 +1,5 @@ -using Ical.Net; +using GamesDoneQuickCalendarFactory.Data; +using Ical.Net; using Ical.Net.CalendarComponents; using Ical.Net.DataTypes; @@ -17,7 +18,7 @@ public sealed class CalendarGenerator(IEventDownloader eventDownloader, ILogger< public async Task generateCalendar() { logger.LogDebug("Downloading schedule from Games Done Quick website"); - GdqEvent gdqEvent = await eventDownloader.downloadSchedule(); + Event gdqEvent = await eventDownloader.downloadSchedule(); Calendar calendar = new() { Method = CalendarMethods.Publish }; calendar.Events.AddRange(gdqEvent.runs diff --git a/GamesDoneQuickCalendarFactory/Data/Event.cs b/GamesDoneQuickCalendarFactory/Data/Event.cs new file mode 100644 index 0000000..a5ac3ce --- /dev/null +++ b/GamesDoneQuickCalendarFactory/Data/Event.cs @@ -0,0 +1,3 @@ +namespace GamesDoneQuickCalendarFactory.Data; + +public record Event(string title, IEnumerable runs); \ No newline at end of file diff --git a/GamesDoneQuickCalendarFactory/Data/GDQ/GdqEvent.cs b/GamesDoneQuickCalendarFactory/Data/GDQ/GdqEvent.cs new file mode 100644 index 0000000..0ca42a6 --- /dev/null +++ b/GamesDoneQuickCalendarFactory/Data/GDQ/GdqEvent.cs @@ -0,0 +1,15 @@ +using System.Text.Json.Serialization; + +namespace GamesDoneQuickCalendarFactory.Data.GDQ; + +public record GdqEvent( + string type, + int id, + string @short, + string name, + string hashtag, + DateTimeOffset datetime, + string timezone, + [property: JsonPropertyName("use_one_step_screening")] + bool useOneStepScreening +); \ No newline at end of file diff --git a/GamesDoneQuickCalendarFactory/Data/GDQ/GdqRuns.cs b/GamesDoneQuickCalendarFactory/Data/GDQ/GdqRuns.cs new file mode 100644 index 0000000..91be380 --- /dev/null +++ b/GamesDoneQuickCalendarFactory/Data/GDQ/GdqRuns.cs @@ -0,0 +1,75 @@ +using System.Text.Json.Serialization; + +// ReSharper disable ClassNeverInstantiated.Global - these are instantiated by deserializers + +namespace GamesDoneQuickCalendarFactory.Data.GDQ; + +public record GdqRuns( + int count, + object? next, + object? previous, + IReadOnlyList results +); + +/// always the same as +/// always "" +/// before a run ends, this is the estimated duration, but after a run ends, this changes to the actual duration +public record Run( + string type, + int id, + string name, + [property: JsonPropertyName("display_name")] string displayName, + string description, + string category, + string console, + IReadOnlyList runners, + IReadOnlyList hosts, + IReadOnlyList commentators, + [property: JsonPropertyName("starttime")] DateTimeOffset startTime, + [property: JsonPropertyName("endtime")] DateTimeOffset endTime, + int order, + [property: JsonPropertyName("run_time")] string runTime, + [property: JsonPropertyName("setup_time")] TimeSpan setupTime, + [property: JsonPropertyName("anchor_time")] DateTimeOffset? anchorTime, + [property: JsonPropertyName("video_links")] IReadOnlyList