aldaviva / gamesdonequickcalendarfactory Goto Github PK
View Code? Open in Web Editor NEW๐ Generate a list of events for GDQ in iCalendar (ICS) format
Home Page: https://aldaviva.com/docs/gdq.ics
License: Apache License 2.0
๐ Generate a list of events for GDQ in iCalendar (ICS) format
Home Page: https://aldaviva.com/docs/gdq.ics
License: Apache License 2.0
As a viewer who doesn't keep track of GDQ and its dozens if not hundreds of unpredictable annual events, I want to be notified by my calendar client when an event is about to start, so that I don't miss it.
The schedule unfortunately insists on putting fake runs in empty times when nothing is happening, like intermissions between days in schedules that aren't 24 hours per day, for example the "Sleep" events in GDQ Express 2023. These result in unnecessary clutter in the calendar, and unhelpful alerts that no one cares about.
These are hard to identify because there is no consistent naming or tagging for these filler events, so it might just be subject name whack-a-mole each time they dream up a new one.
Intermission$
, duration > 14h (GDQ Express 2023)^Sleep$
, duration > 11h (Flame Fatales 2023)^Sleep$
, duration > 11h (Frost Fatales 2023)^Sleep$
, duration > 0 (Flame Fatales 2022)The duration, host, runners, and subject are all unreliable, but subject seems the most consistent.
Maybe a heuristic like this would work:
subject == "Sleep" || duration > TimeSpan.FromHours(11)
CalendarGeneratorImpl
to EventDownloaderImpl
.367
- Tech Crew1434
- Interview Crew1884
- Faith1885
- Everyone!2071
- Frame Fatales Interstitial TeamFor many years, GDQ's schedule was a server-side rendered HTML page with progressive JS enhancement, and this project parsed that HTML to generate an iCalendar file.
Now, right when AGDQ 2024 started, the schedule page switched to a client-side rendered JS webapp based on a JSON API. The two schedule pages are 0% compatible with each other. This project is currently returning an empty calendar because it can't find the HTML elements it expects.
In order to make this project work with the new JSON API, it needs to be almost completely rewritten.
46
.
https://gamesdonequick.com/schedule
Location
header, which will contain a URL with the event ID in a path parameter, and will be in the form https://gamesdonequick.com/schedule/46
.https://gamesdonequick.com/tracker/api/v2/events/{id}/runs/
null
values for both the previous
and next
properties (with count
equal to 140
) for AGDQ 2024.results
array in order to construct GameRun
instances.
start
- starttime
, which is a zoned ISO 8601 datetimeduration
- endtime-starttime
, subtract two zoned ISO 8601 datetimes to get the TimeSpan
. Don't use runtime
because that gets mutated after a run finishes to be the actual duration, instead of the expected duration.name
- either name
or display_name
, which both seem to always contain the same valuedescription
- category + " โ " + console
; don't use the description
property, which is always the empty string in AGDQ 2024runners
- runners[*].name
host
- hosts[0].name
; previously there were either 0 or 1 hosts for each run, but in AGDQ 2024 there is one run (The Legend of Zelda: Majora's Mask) with two hosts (brutal_melo and cartridgeblowers), which I think is a mistake because there are 0 commentators for that runsetupDuration
- setuptime
which is an ISO 8601 duration (h:mm:ss
), or it can be 0
. Not used for anything and probably safe to remove, unless we want to add it to the starttime
in an attempt to make the event start when the run starts, not when the waiting screen appears.commentators[*].name
After almost three months with no commits, GitHub showed a warning on the Publish Calendar workflow page that the workflow was going to be disabled unless there was repository activity or I clicked a button.
This is inconvenient because it will be confusing for viewers of this iCalendar file when it's mysteriously out-of-date while a new GDQ event is running. This repository doesn't need new commits or other activity to justify running the workflows because the calendar needs to be rebuilt when external data changes (the GDQ calendar), not when the repository contents change. The code is reusable across events because it's written generically, so we don't need to commit every time a new event starts.
Maybe making an action that commits something to the repo would be enough? Another possibility might be using an external API client in a scheduled task to do the equivalent of pressing the button in the workflow warning.
Endpoint Badge to return from a new API GET method on the webapp server
Try to get a vector logo from https://gamesdonequick.com/crowd/, turn it white, and minify it through SVGO to pass as a custom logo.
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2MCA1OSI+PHN0eWxlPi5ze2ZpbGw6I2ZmZn08L3N0eWxlPjxwYXRoIGQ9Ik05MCAyMEg3N2MtMyAwLTUgMC03IDJsLTggNSA2IDhoMTRjMiAwIDQtMiA0LTNsNC0xMnoiIGNsYXNzPSJzIi8+PHBhdGggZD0iTTUwIDIwSDM2Yy0yIDAtNCAxLTUgM2wtMyAxMmg4YzggMCAxMy01IDEzLTUtNyAxMi0xOCAxMi0xOSAxMi05IDAtMTUtNi0xNC0xMyAwIDAtMS0xNSAxOC0xOGwtMSA0aDEyYzIgMCA0LTEgNC0zbDQtMTJIMzdDMTkgMCA2IDggMSAyNWMtNCAxNSA4IDI5IDIzIDI5IDYgMCAxMyAwIDIwLTVsLTEgNWgxMmM1IDAgNS0zIDUtNWw0LTEyLTE0LTE3em05MCAxNC0xIDFjLTYtOS04LTE2LTgtMTYtNiA0LTkgOC0xMSAxMXY2YzkgMTkgMzEgMjMgMzEgMjNsOS0zLTEzLTExaDFjNS01IDgtMTEgMTAtMTggNS0xNS01LTI3LTIyLTI3LTEyIDAtMTkgNC0yNiAxMGwtMyAyQzEwNCA1IDk2IDAgNzkgMEg2MmMtMiAwLTQgMS00IDNsLTQgMTQgNiA3IDEwLTggMS00aDljOCAwIDE3IDMgMTQgMTUtMSA4LTggMTUtMTYgMTVINjhsLTIgOS0yIDNoMTBjMTIgMCAxOS0zIDI2LTEwIDMgNiAxMSAxMCAyMCAxMGwxMi0xYy0xNC00LTE4LTE0LTE5LTE3di05YzMtOCAxMC0xNSAxOS0xNXMxNCA3IDExIDE1YzAgMy0yIDUtMyA3eiIgY2xhc3M9InMiLz48L3N2Zz4=
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDYyLjIgNTQuMyI+PHN0eWxlPi5ze2ZpbGw6I2ZmZn08L3N0eWxlPjxwYXRoIGQ9Ik02Mi4yIDE5LjZINDljLTIuNSAwLTQuOS43LTYuOSAyLjFsLTcuNSA1LjQgNi4xIDcuNmgxMy41YzIgMCAzLjktMS4zIDQuNC0zLjFsMy42LTEyek0xNi40IDQ5LjJsLTEuMyA1LjFoMTIuMmM0LjggMCA0LjctMi45IDUuNC00LjhsMy44LTEyLjgtMTQuMS0xNy4xSDhjLTIgMC0zLjkgMS4zLTQuNCAzLjFMMCAzNC43aDcuOGM4LjggMCAxNi41LTIgMTkuMy00LjQtMS4zIDQuMS03LjkgNy43LTcuOSA3LjdsLTIuOCAxMS4yek00Ny40IDBIMzQuNWMtMiAwLTMuOCAxLjMtNC4zIDMuMmwtNCAxMy41IDUuNyA2LjlMNDIuNiAxNmwxLjItNCAzLjYtMTJ6IiBjbGFzcz0icyIvPjwvc3ZnPg==
{
"schemaVersion": 1,
"label": "AGDQ 2024",
"message": "150 runs",
"color": "success",
"isError": false,
"logoSvg": "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 62.2 54.3\"><style>.s{fill:#fff}</style><path d=\"M62.2 19.6H49c-2.5 0-4.9.7-6.9 2.1l-7.5 5.4 6.1 7.6h13.5c2 0 3.9-1.3 4.4-3.1l3.6-12zM16.4 49.2l-1.3 5.1h12.2c4.8 0 4.7-2.9 5.4-4.8l3.8-12.8-14.1-17.1H8c-2 0-3.9 1.3-4.4 3.1L0 34.7h7.8c8.8 0 16.5-2 19.3-4.4-1.3 4.1-7.9 7.7-7.9 7.7l-2.8 11.2zM47.4 0H34.5c-2 0-3.8 1.3-4.3 3.2l-4 13.5 5.7 6.9L42.6 16l1.2-4 3.6-12z\" class=\"s\"/></svg>"
}
It's visually annoying when GDQ is over but the old events from a week ago are cluttering up my calendar and making it hard to read future events. They will eventually disappear when a new GDQ event becomes marked as current, but this can take weeks or months.
When all events in the GDQ calendar are in the past, or maybe more than 24 hours in the past, return 0 events. This cleans up the calendar once GDQ ends, but still lets you see previous events during GDQ week that you may want to refer to or watch a replay of.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.