From bf3decb0deda6f17ecf1fbcd1f11be82ff0dd0e4 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 12 Jul 2020 13:42:48 -0400 Subject: Add topic to events page --- events.c | 37 ++++++++++++++++++++++++++++++++++++- server.h | 4 ++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/events.c b/events.c index c516631..5dbb6b7 100644 --- a/events.c +++ b/events.c @@ -66,6 +66,18 @@ dateForm(struct khtmlreq *html, struct Scope scope, const char *_time) { || khtml_closeelem(html, 1); } +const char *EventsTopicQuery = SQL( + SELECT topics.topic + FROM topics + JOIN contexts USING (context) + WHERE contexts.network = :network + AND contexts.name = :context + AND contexts.query <= NOT :public + AND topics.time <= strftime('%s', :time) + ORDER BY topics.time DESC + LIMIT 1; +); + const char *EventsAfterQuery = SQL( SELECT events.event, @@ -147,6 +159,30 @@ enum kcgi_err eventsPage(struct kreq *req) { || khtml_elem(&html, KELEM_TABLE); if (error) return error; + sqlite3_reset(stmt.eventsTopic); + dbBindText(stmt.eventsTopic, ":network", scope.network); + dbBindText(stmt.eventsTopic, ":context", scope.context); + dbBindText(stmt.eventsTopic, ":time", time); + dbBindInt(stmt.eventsTopic, ":public", contextsPublic); + + int result = sqlite3_step(stmt.eventsTopic); + if (result == SQLITE_ROW) { + error = 0 + || khtml_elem(&html, KELEM_THEAD) + || khtml_elem(&html, KELEM_TR) + || khtml_attr( + &html, KELEM_TH, + KATTR_CLASS, "topic", + KATTR_COLSPAN, "3", + KATTR__MAX + ) + || khtml_puts(&html, sqlite3_column_text(stmt.eventsTopic, 0)) + || khtml_closeelem(&html, 3); + if (error) return error; + result = sqlite3_step(stmt.eventsTopic); + } + if (result != SQLITE_DONE) errx(EX_SOFTWARE, "%s", sqlite3_errmsg(db)); + sqlite3_stmt *events = stmt.eventsAfter; if (req->fieldmap[Before]) events = stmt.eventsBefore; @@ -158,7 +194,6 @@ enum kcgi_err eventsPage(struct kreq *req) { dbBindInt(events, ":limit", eventsLimit); int rows; - int result; time_t prevTime = 0; int64_t prevEvent = 0; for (rows = 0; SQLITE_ROW == (result = sqlite3_step(events)); ++rows) { diff --git a/server.h b/server.h index eee5419..4a18ef0 100644 --- a/server.h +++ b/server.h @@ -90,6 +90,7 @@ enum kcgi_err contextsPage(struct kreq *req); extern int eventsGap; extern int eventsOverlap; extern int eventsLimit; +extern const char *EventsTopicQuery; extern const char *EventsAfterQuery; extern const char *EventsBeforeQuery; extern const char *SearchQuery; @@ -102,6 +103,7 @@ extern struct Statements { sqlite3_stmt *networks; sqlite3_stmt *contexts; sqlite3_stmt *contextsMOTD; + sqlite3_stmt *eventsTopic; sqlite3_stmt *eventsAfter; sqlite3_stmt *eventsBefore; sqlite3_stmt *search; @@ -118,6 +120,7 @@ static inline void dbPrepareAll(void) { dbPrepare(&stmt.networks, NetworksQuery); dbPrepare(&stmt.contexts, ContextsQuery); dbPrepare(&stmt.contextsMOTD, ContextsMOTDQuery); + dbPrepare(&stmt.eventsTopic, EventsTopicQuery); dbPrepare(&stmt.eventsAfter, EventsAfterQuery); dbPrepare(&stmt.eventsBefore, EventsBeforeQuery); dbPrepare(&stmt.search, SearchQuery); @@ -127,6 +130,7 @@ static inline void dbClose(void) { sqlite3_finalize(stmt.networks); sqlite3_finalize(stmt.contexts); sqlite3_finalize(stmt.contextsMOTD); + sqlite3_finalize(stmt.eventsTopic); sqlite3_finalize(stmt.eventsAfter); sqlite3_finalize(stmt.eventsBefore); sqlite3_finalize(stmt.search); -- cgit 1.4.1 ='2024-10-07 18:05:03 -0400'>2024-10-07Add photos from September 28June McEnroe 2024-10-07Add photos from September 22June McEnroe 2024-09-25Add photos from September 15June McEnroe 2024-09-24Add photos from September 14June McEnroe 2024-09-24Add photos from September 12June McEnroe 2024-09-24Add photos from September 7June McEnroe 2024-09-24Allow not having descriptionsJune McEnroe 2024-09-23Automatically select the last used lens for a bodyJune McEnroe 2024-09-19Add photos from September 5June McEnroe 2024-09-15Add some more film stocks to the listJune McEnroe 2024-09-13Add photos from September 2June McEnroe 2024-09-13Add Fomapan 200 to films listJune McEnroe 2024-09-10Add August 29 picnic photosJune McEnroe 2024-09-08Apply some bold to trips renderingJune McEnroe 2024-09-08Render trips hopefully more efficientlyJune McEnroe 2024-09-08Allow removing bodies and lensesJune McEnroe 2024-09-08Limit body width so it looks less silly on desktopJune McEnroe 2024-09-07Handle no film being loadedJune McEnroe 2024-09-07Fancy up the text a littleJune McEnroe0'>2021-05-27Fix ENVIRONMENT formatting in pounce-notify(1)June McEnroe 2021-05-27Add note about Libera.Chat SASL-only rangesJune McEnroe 2021-05-25Add QUIRKS fileJune McEnroe 2021-05-19Replace freenode with tilde.chatJune McEnroe 2021-05-04notify: Reword pounce-notify manualJune McEnroe 2021-05-02Clean up Makefiles, configure scriptsJune McEnroe 2021-04-30palaver: Exit on getopt failureJune McEnroe 2021-04-30notify: Implement pounce-notifyJune McEnroe