diff options
Diffstat (limited to '')
-rw-r--r-- | events.c | 37 |
1 files changed, 36 insertions, 1 deletions
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) { |