summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Stensgård <mastensg@mastensg.net>2025-07-06 22:01:10 +0200
committerMartin Stensgård <mastensg@mastensg.net>2025-07-06 22:01:10 +0200
commitd5c102558c9cc14fd6d7e5355c559046ec3f3c08 (patch)
treec518a59a1b3c3d77cde4dcd8dd27aa5424c2cc94
parent6b274b041c40c4c7c71894d82e6b02733006609e (diff)
opplysning: meetup + booking
-rw-r--r--opplysning.c117
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();