diff options
| author | Martin Stensgård <mastensg@mastensg.net> | 2025-07-06 22:01:10 +0200 |
|---|---|---|
| committer | Martin Stensgård <mastensg@mastensg.net> | 2025-07-06 22:01:10 +0200 |
| commit | d5c102558c9cc14fd6d7e5355c559046ec3f3c08 (patch) | |
| tree | c518a59a1b3c3d77cde4dcd8dd27aa5424c2cc94 | |
| parent | 6b274b041c40c4c7c71894d82e6b02733006609e (diff) | |
opplysning: meetup + booking
| -rw-r--r-- | opplysning.c | 117 |
1 files changed, 29 insertions, 88 deletions
diff --git a/opplysning.c b/opplysning.c index 3d47da8..56a8f2b 100644 --- a/opplysning.c +++ b/opplysning.c @@ -18,21 +18,6 @@ enum { SCREEN_H = 1080, }; -static const char *DATABASE = "booking.db"; - -// Unfortunately, 0 = Sunday. -int -weekday(int year, int month, int day) -{ - struct tm tm = { - .tm_year = year - 1900, - .tm_mon = month - 1, - .tm_mday = day, - }; - mktime(&tm); - return tm.tm_wday; -} - const char *maaned[] = { "", "JANUAR", "FEBRUAR", "MARS", "APRIL", "MAI", "JUNI", "JULI", "AUGUST", "SEPTEMBER", "OKTOBER", "NOVEMBER", "DESEMBER", @@ -45,6 +30,7 @@ enum { MAX_EVENTS = 64, SIZEOF_TITLE = 60, }; + struct event { int year; int month; @@ -56,68 +42,13 @@ struct event { int end_minute; char title[SIZEOF_TITLE]; }; -struct event the_events[MAX_EVENTS]; -int num_events; -char * -read_stream(char *s, size_t size, void *d) -{ - return fgets(s, (int)size, (FILE *)d); -} -void -load_the_events_old(void) -{ - icalparser *p = icalparser_new(); - assert(p); - FILE *f = fopen("events.ical", "r"); - assert(f); - - icalparser_set_gen_data(p, f); - for (;;) { - char *line = icalparser_get_line(p, read_stream); - if (!line) { - break; - } - - icalcomponent *comp = icalparser_add_line(p, line); - if (!comp) { - continue; - } - - for (icalcompiter i = icalcomponent_begin_component( - comp, ICAL_VEVENT_COMPONENT); - icalcompiter_deref(&i); icalcompiter_next(&i)) { - if (MAX_EVENTS <= num_events) { - warnx("MAX_EVENTS exceeded at %u", num_events); - break; - } - icalcomponent *c = icalcompiter_deref(&i); - - struct icaltimetype dts = icalcomponent_get_dtstart(c); - const char *sum = icalcomponent_get_summary(c); - - the_events[num_events].year = dts.year; - the_events[num_events].month = dts.month; - the_events[num_events].day = dts.day; - the_events[num_events].hour = dts.hour; - the_events[num_events].minute = dts.minute; - strncpy(the_events[num_events].title, sum, - SIZEOF_TITLE); - the_events[num_events].wday = - weekday(dts.year, dts.month, dts.day); - ++num_events; - } - - icalcomponent_free(comp); - } - - icalparser_free(p); -} void -load_the_events(void) +load_events(size_t *num_events, struct event events[static MAX_EVENTS], + const char *database) { sqlite3 *db; - if (sqlite3_open(DATABASE, &db)) + if (sqlite3_open(database, &db)) errx(1, "sqlite3_open: %s", sqlite3_errmsg(db)); const char *sql = "SELECT " @@ -138,6 +69,7 @@ load_the_events(void) if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL)) errx(1, "sqlite3_prepare_v2: %s", sqlite3_errmsg(db)); + size_t n = 0; for (;;) { int step = sqlite3_step(stmt); if (SQLITE_DONE == step) @@ -145,8 +77,8 @@ load_the_events(void) if (SQLITE_ROW != step) errx(1, "sqlite3_step: %s", sqlite3_errmsg(db)); - if (MAX_EVENTS <= num_events) { - warnx("MAX_EVENTS exceeded at %u", num_events); + if (MAX_EVENTS <= n) { + warnx("MAX_EVENTS exceeded at %zu", n); break; } @@ -162,16 +94,16 @@ load_the_events(void) (const void *)sqlite3_column_text(stmt, 8); assert(summary); - the_events[num_events].year = year; - the_events[num_events].month = month; - the_events[num_events].day = day; - the_events[num_events].hour = hour; - the_events[num_events].minute = minute; - the_events[num_events].end_hour = end_hour; - the_events[num_events].end_minute = end_minute; - strncpy(the_events[num_events].title, summary, SIZEOF_TITLE); - the_events[num_events].wday = wday; - ++num_events; + events[n].year = year; + events[n].month = month; + events[n].day = day; + events[n].hour = hour; + events[n].minute = minute; + events[n].end_hour = end_hour; + events[n].end_minute = end_minute; + strncpy(events[n].title, summary, SIZEOF_TITLE); + events[n].wday = wday; + ++n; } if (sqlite3_finalize(stmt)) @@ -179,6 +111,8 @@ load_the_events(void) if (sqlite3_close(db)) errx(1, "sqlite3_close: %s", sqlite3_errmsg(db)); + + *num_events = n; } struct ray { @@ -300,14 +234,21 @@ draw_events(int x, int y, size_t numevents, int main(void) { + size_t ne_booking = 0; + size_t ne_meetup = 0; + struct event ev_booking[MAX_EVENTS] = {0}; + struct event ev_meetup[MAX_EVENTS] = {0}; + + load_events(&ne_booking, ev_booking, "booking.db"); + load_events(&ne_meetup, ev_meetup, "meetup.db"); + ray_init(); while (!WindowShouldClose()) { - num_events = 0; - load_the_events(); BeginDrawing(); ClearBackground(R.bg); draw_time(SCREEN_W / 2, 0); - draw_events(SCREEN_W / 2, 0, num_events, the_events); + draw_events(0, 0, ne_meetup, ev_meetup); + draw_events(SCREEN_W / 2, 0, ne_booking, ev_booking); EndDrawing(); } CloseWindow(); |
