From 131e9525be948dab3446026d8d0f5602bcd5bba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Stensg=C3=A5rd?= Date: Tue, 8 Jul 2025 23:21:23 +0200 Subject: generic import_booking -> update --- .gitignore | 2 +- Makefile | 10 +++--- import_booking.c | 93 -------------------------------------------------------- update.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 99 deletions(-) delete mode 100644 import_booking.c create mode 100644 update.c diff --git a/.gitignore b/.gitignore index 035286d..ff3310f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,8 @@ /check_ical /check_ical_out.txt /events.ical -/import_booking /opplysning /select_booking /sqlite3 +/update core diff --git a/Makefile b/Makefile index 607e8c7..48ddd20 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ LIBS = -lraylib -lm -lpthread -lGLESv2 -lEGL \ -lical -licalss -licalvcal \ $$([ `uname -m` = aarch64 ] && echo '-lvcos -lvchiq_arm -lgbm -ldrm') -all: check_ical import_booking opplysning select_booking +all: check_ical opplysning select_booking update check: all ./check_ical < check_ical_in.ical > check_ical_out.txt @@ -13,20 +13,17 @@ check: all clean: rm -f check_ical check_ical_out.txt - rm -f import_booking rm -f opplysning rm -f select_booking rm -f sqlite.o rm -f sqlite3 + rm -f update .PHONY: all check clean check_ical: check_ical.c $(CC) $(CFLAGS) -o $@ check_ical.c $(LIBS) -import_booking: import_booking.c sqlite.o - $(CC) $(CFLAGS) -o $@ import_booking.c sqlite.o -lical -licalss -licalvcal - opplysning: opplysning.c sqlite.o $(CC) $(CFLAGS) -o $@ opplysning.c sqlite.o $(LIBS) @@ -38,3 +35,6 @@ sqlite.o: sqlite/sqlite3.c sqlite3: sqlite/shell.c sqlite/sqlite3.c $(CC) $(CFLAGS) -o sqlite3 sqlite/shell.c sqlite/sqlite3.c -lm + +update: update.c sqlite.o + $(CC) $(CFLAGS) -o $@ update.c sqlite.o -lical -licalss -licalvcal diff --git a/import_booking.c b/import_booking.c deleted file mode 100644 index 4fbb046..0000000 --- a/import_booking.c +++ /dev/null @@ -1,93 +0,0 @@ -#include -#include -#include - -#include - -#include "sqlite/sqlite3.h" - -static const char *DATABASE = "booking.db"; - -static char *SCHEMA = "CREATE TABLE event (" - " start TIMESTAMP," - " end TIMESTAMP," - " summary TEXT" - ")"; - -static char * -read_stream(char *s, size_t size, void *d) -{ - return fgets(s, (int)size, (FILE *)d); -} - -static void -component(sqlite3 *db, icalcomponent *c) -{ - struct icaltimetype dts = icalcomponent_get_dtstart(c); - struct icaltimetype dte = icalcomponent_get_dtend(c); - - time_t start = icaltime_as_timet(dts); - time_t end = icaltime_as_timet(dte); - const char *summary = icalcomponent_get_summary(c); - - sqlite3_stmt *stmt = NULL; - const char *sql = "INSERT INTO event (start, end, summary) VALUES (" - "datetime(?, 'unixepoch')," - "datetime(?, 'unixepoch')" - ", ?)"; - if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL)) - errx(1, "sqlite3_prepare_v2"); - - if (sqlite3_bind_int64(stmt, 1, start)) - errx(1, "sqlite3_bind_int64"); - if (sqlite3_bind_int64(stmt, 2, end)) - errx(1, "sqlite3_bind_int64"); - if (sqlite3_bind_text(stmt, 3, summary, -1, SQLITE_STATIC)) - errx(1, "sqlite3_bind_text"); - if (SQLITE_DONE != sqlite3_step(stmt)) - errx(1, "sqlite3_step"); -} - -int -main(void) -{ - sqlite3 *db; - char *errmsg = NULL; - if (sqlite3_open(DATABASE, &db)) - errx(1, "sqlite3_open: %s", errmsg); - - if (sqlite3_exec(db, SCHEMA, NULL, NULL, &errmsg)) - errx(1, "sqlite3_exec: %s", errmsg); - - icalparser *parser = icalparser_new(); - assert(parser); - - FILE *stream = stdin; - assert(stream); - - if (sqlite3_exec(db, "BEGIN", NULL, NULL, &errmsg)) - errx(1, "sqlite3_exec: %s", errmsg); - icalparser_set_gen_data(parser, stream); - for (;;) { - char *line = icalparser_get_line(parser, read_stream); - if (!line) { - break; - } - icalcomponent *c = icalparser_add_line(parser, line); - if (!c) { - continue; - } - for (icalcompiter i = icalcomponent_begin_component( - c, ICAL_VEVENT_COMPONENT); - icalcompiter_deref(&i); icalcompiter_next(&i)) { - icalcomponent *ic = icalcompiter_deref(&i); - component(db, ic); - } - icalcomponent_free(c); - } - if (sqlite3_exec(db, "COMMIT", NULL, NULL, &errmsg)) - errx(1, "sqlite3_exec: %s", errmsg); - - icalparser_free(parser); - sqlite3_close(db); -} diff --git a/update.c b/update.c new file mode 100644 index 0000000..2686943 --- /dev/null +++ b/update.c @@ -0,0 +1,91 @@ +#include +#include +#include + +#include + +#include "sqlite/sqlite3.h" + +static char *SCHEMA = "CREATE TABLE event (" + " start TIMESTAMP," + " end TIMESTAMP," + " summary TEXT" + ")"; + +static char * +read_stream(char *s, size_t size, void *d) +{ + return fgets(s, (int)size, (FILE *)d); +} + +static void +component(sqlite3 *db, icalcomponent *c) +{ + struct icaltimetype dts = icalcomponent_get_dtstart(c); + struct icaltimetype dte = icalcomponent_get_dtend(c); + + time_t start = icaltime_as_timet(dts); + time_t end = icaltime_as_timet(dte); + const char *summary = icalcomponent_get_summary(c); + + sqlite3_stmt *stmt = NULL; + const char *sql = "INSERT INTO event (start, end, summary) VALUES (" + "datetime(?, 'unixepoch')," + "datetime(?, 'unixepoch')" + ", ?)"; + if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL)) + errx(1, "sqlite3_prepare_v2"); + + if (sqlite3_bind_int64(stmt, 1, start)) + errx(1, "sqlite3_bind_int64"); + if (sqlite3_bind_int64(stmt, 2, end)) + errx(1, "sqlite3_bind_int64"); + if (sqlite3_bind_text(stmt, 3, summary, -1, SQLITE_STATIC)) + errx(1, "sqlite3_bind_text"); + if (SQLITE_DONE != sqlite3_step(stmt)) + errx(1, "sqlite3_step"); +} + +int +main(int argc, const char *argv[static argc]) +{ + if (2 != argc) + errx(1, "usage: %s dbfile < icalfile", argv[0]); + + icalparser *parser = icalparser_new(); + assert(parser); + FILE *stream = stdin; + assert(stream); + icalparser_set_gen_data(parser, stream); + + sqlite3 *db; + char *errmsg = NULL; + if (sqlite3_open(argv[1], &db)) + errx(1, "sqlite3_open: %s", errmsg); + if (sqlite3_exec(db, "BEGIN", NULL, NULL, &errmsg)) + errx(1, "sqlite3_exec: %s", errmsg); + if (sqlite3_exec(db, "DROP TABLE IF EXISTS event", NULL, NULL, &errmsg)) + errx(1, "sqlite3_exec: %s", errmsg); + if (sqlite3_exec(db, SCHEMA, NULL, NULL, &errmsg)) + errx(1, "sqlite3_exec: %s", errmsg); + for (;;) { + char *line = icalparser_get_line(parser, read_stream); + if (!line) + break; + icalcomponent *c = icalparser_add_line(parser, line); + if (!c) + continue; + for (icalcompiter i = icalcomponent_begin_component( + c, ICAL_VEVENT_COMPONENT); + icalcompiter_deref(&i); icalcompiter_next(&i)) { + icalcomponent *ic = icalcompiter_deref(&i); + component(db, ic); + } + icalcomponent_free(c); + } + if (sqlite3_exec(db, "COMMIT", NULL, NULL, &errmsg)) + errx(1, "sqlite3_exec: %s", errmsg); + sqlite3_close(db); + + icalparser_free(parser); +} -- cgit v1.2.3