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 class='logmsg'> 2021-09-25Sandbox up on both FreeBSD and OpenBSDJune McEnroe This is a bit messy. pledge(2) calls based on [1]. [1]: https://kristaps.bsd.lv/kcgi/tutorial6.html 2021-09-25Set SO_REUSEADDR in quickJune McEnroe 2021-09-25Revert "Add cat alias using less"June McEnroe This reverts commit a64c3653d5df5e823fcdd07a540e240283816683. Yeah this really doesn't work on OpenBSD. I kind of got into the habit of explicitly running less anyway. 2021-09-24Pledge downgradeJune McEnroe 2021-09-24Set original socket CLOEXECJune McEnroe 2021-09-24Consume request headers using MSG_PEEKJune McEnroe Use MSG_PEEK to determine where the request headers end and consume only up to there, leaving the CGI process to read any request body directly from the socket. 2021-09-24Set only HTTP_HOSTJune McEnroe And only because kcgi expects it. This is what I wrote originally, because every HTTP_ variable should be unset between each request, but this doesn't track them. 2021-09-23Scroll by single lines in xtermJune McEnroe 2021-09-23Hide htop "function bar"June McEnroe Useless thing... 2021-09-23Allow FocusEvents in xtermJune McEnroe Oops! This whole time I thought OpenBSD xterm for some reason didn't support focus events. It turns out allowMouseOps: false disables them by default. Replace the disallowedMouseOps list with everything but. 2021-09-23Use NI_NUMERICSERVJune McEnroe 2021-09-23Make up build away from FreeBSDJune McEnroe 2021-09-23Add quickJune McEnroe 2021-09-23Add The HobbitJune McEnroe Surprisingly good for something written by a man like a hundred years ago! 2021-09-22Remove PSF fontsJune McEnroe They were fun to make but I never actually used them. 2021-09-22Remove Linux-specific utilitiesJune McEnroe I haven't used these in ages. 2021-09-22Call sandbox in CGI modeJune McEnroe Otherwise upload won't actually work. 2021-09-22Support HTTP PUT in upJune McEnroe For use by Palaver[1]. Unfortunately, at least in the current App Store version of Palaver, this doesn't work correctly with basic auth. [1]: https://palaverapp.com/guides/commands/set.html#ui-image_service 2021-09-22Remove default faviconJune McEnroe I hate these things and also this one sucks. 2021-09-21Use Z_FILTERED strategyJune McEnroe 2021-09-21Recalculate various lengths only as neededJune McEnroe This actually speeds things up quite a bit, saving roughly a second on a big PNG screenshot. Almost all the remaining time is spent in deflate. 2021-09-21Rewrite pngo, add explicit optionsJune McEnroe Interesting to see how my code habits have changed. 2021-09-16Fix /* **/ comment matchingJune McEnroe 2021-09-15Remove typer, add downgrade to READMEJune McEnroe 2021-09-15Set bot mode on downgradeJune McEnroe 2021-09-15Enter capsicum in downgradeJune McEnroe 2021-09-15Factor out common parts of downgrade messagesJune McEnroe Also bump the message cap to 1024 because that is ostensibly useful for replying to older messages. 2021-09-14Add downgrade IRC botJune McEnroe 2021-09-14Sort by title if authors matchJune McEnroe There are probably better things to sort by but title definitely always exists. 2021-09-13Swap-remove tags as they're foundJune McEnroe This makes it even faster. From ~1s on a sqlite3.c amalgamation to ~0.85s. 2021-09-12Replace htagml regex with strncmpJune McEnroe Since ctags only ever produces regular expressions of the form /^re$/ or /^re/ with no other special characters, instead unescape the pattern and simply use strncmp. Running on a sqlite3.c amalgamation, the regex version takes ~37s while the strncmp version takes ~1s, producing identical output. Big win! 2021-09-11Also defer printing comment for lone close-parensJune McEnroe 2021-09-10Publish "git-comment"June McEnroe 2021-09-10Add git comment --pretty optionJune McEnroe 2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe This fixes badly indented comments. 2021-09-08Up default min-repeat to 30 linesJune McEnroe 2021-09-08Handle dirty lines in git-commentJune McEnroe 2021-09-08Document and install git-commentJune McEnroe 2021-09-08Add repeat and all options to git-commentJune McEnroe 2021-09-08Add group threshold to git-commentJune McEnroe