From ed99ecc2fe913fa047bc6e87cc363b60010befab Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Wed, 25 Dec 2019 15:46:41 -0500 Subject: Insert existing topics into the database Not sure how to handle the 333 reply that contains the user who set the topic and the timestamp of when it was set, since they're two separate messages that aren't really easily correlated since there's no guarantee that you're even going to get a 333 at all. --- database.h | 6 ++++++ litterbox.c | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/database.h b/database.h index 8d8c985..3d88757 100644 --- a/database.h +++ b/database.h @@ -218,6 +218,12 @@ static const char *InitSQL = SQL( UNIQUE (network, name) ); + CREATE TABLE topics ( + context INTEGER NOT NULL REFERENCES contexts, + time DATETIME NOT NULL, + topic TEXT + ); + CREATE TABLE names ( name INTEGER PRIMARY KEY, nick TEXT NOT NULL, diff --git a/litterbox.c b/litterbox.c index 181227a..964a6ea 100644 --- a/litterbox.c +++ b/litterbox.c @@ -29,6 +29,7 @@ static struct { sqlite3_stmt *context; + sqlite3_stmt *topic; sqlite3_stmt *event; sqlite3_stmt *events; } insert; @@ -49,6 +50,13 @@ static void prepare(void) { ); dbPersist(&insert.context, InsertContext); + const char *InsertTopic = SQL( + INSERT INTO topics (context, time, topic) + SELECT context, coalesce(datetime(:time), datetime('now')), :topic + FROM contexts WHERE network = :network AND name = :context; + ); + dbPersist(&insert.topic, InsertTopic); + const char *InsertEvent = SQL( INSERT INTO events (time, type, context, name, target, message) SELECT @@ -81,6 +89,7 @@ static void prepare(void) { static void bindNetwork(const char *network) { dbBindTextCopy(insert.context, ":network", network); + dbBindTextCopy(insert.topic, ":network", network); dbBindTextCopy(insert.event, ":network", network); dbBindTextCopy(insert.events, ":network", network); } @@ -91,6 +100,15 @@ static void insertContext(const char *context, bool query) { dbRun(insert.context); } +static void insertTopic( + const char *context, const char *time, const char *topic +) { + dbBindText(insert.topic, ":context", context); + dbBindText(insert.topic, ":time", time); + dbBindText(insert.topic, ":topic", topic); + dbRun(insert.topic); +} + static void insertEvent( const char *time, enum Type type, const char *context, const char *nick, const char *user, const char *host, @@ -316,6 +334,12 @@ static void handlePrivmsg(struct Message *msg) { ); } +static void handleReplyTopic(struct Message *msg) { + require(msg, false, 2); + if (!strcmp(msg->cmd, "331")) msg->params[2] = NULL; + insertTopic(msg->params[1], msg->time, msg->params[2]); +} + static void handleReplyNames(struct Message *msg) { require(msg, false, 3); char *names = msg->params[3]; @@ -411,6 +435,8 @@ static const struct { } Handlers[] = { { "001", false, handleReplyWelcome }, { "005", false, handleReplyISupport }, + { "331", true, handleReplyTopic }, + { "332", true, handleReplyTopic }, { "353", true, handleReplyNames }, { "CAP", false, handleCap }, { "JOIN", true, handleJoin }, -- cgit 1.4.1 30 12:54:45 -0400'>2017-07-30Add ` commandJune McEnroe 2017-07-30Add sshd_configJune McEnroe 2017-07-30Add termcap patchJune McEnroeogheader'>2025-04-12Allow setting exposures when loading filmJune McEnroe 2025-04-08Those were supposed to be en-dashes...June McEnroe 2025-04-08Generate pages per rollJune McEnroe 2025-04-08Add metadata from many rolls of filmJune McEnroe 2025-03-25Add emoji for lens, replace all f/'sJune McEnroe 2024-12-29Add photos from December 28June McEnroe 2024-12-29Fancify the manual lens textJune McEnroe 2024-12-28Update film preset list with what I expect to keep shootingJune McEnroe 2024-12-28Add the past few months of rolls of filmJune McEnroe 2024-11-13Add Tea with the Black DragonJune McEnroe I found this in a box on the side of the road being thrown own. It's decent pulp but nothing special. Not even as racist as I expected it to be. Also as one might guess, the author using their initials is a woman, so I only broke one of my rules when it comes to book selection. 2024-11-05Add a bunch of photosJune McEnroe 2024-10-12Publish "film review"June McEnroe 2024-10-12Add photos from October 6June McEnroe 2024-10-12Add photos from October 5June McEnroe 2024-10-09Add photos from October 1June McEnroe Ok the first 3 are from September 29 but I didn't want to spoil the black and white roll. 2024-10-07Add photos from September 29June McEnroe 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 I'm sorry, I can't keep writing descriptions. It makes posting photos take too long, I often don't know the words for what I'm looking at, and a good description is an entirely different work of art than the photo I took, and I'm just a photographer. It's visual art. 2024-09-23Automatically select the last used lens for a bodyJune McEnroe 2024-09-19Add photos from September 5June McEnroe Had to prefix the folder number onto these file names manually because they must have come out of a different scanner or something. 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 This seems easier to visually scan. The only other thing I'd like is a nicer date rendering but JavaScript is useless for that. 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 McEnroe