summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--litterbox.c112
1 files changed, 56 insertions, 56 deletions
diff --git a/litterbox.c b/litterbox.c
index c3192ec..8ba0923 100644
--- a/litterbox.c
+++ b/litterbox.c
@@ -190,62 +190,6 @@ static void handleReplyEndOfMOTD(struct Message *msg) {
 	memset(&motd, 0, sizeof(motd));
 }
 
-static void insertContext(const char *context, bool query) {
-	static sqlite3_stmt *stmt;
-	const char *sql = SQL(
-		INSERT OR IGNORE INTO contexts (network, name, query)
-		VALUES (:network, :context, :query);
-	);
-	dbPersist(&stmt, sql);
-	dbBindText(stmt, ":network", network);
-	dbBindText(stmt, ":context", context);
-	dbBindInt(stmt, ":query", query);
-	dbRun(stmt);
-}
-
-static void insertName(const struct Message *msg) {
-	static sqlite3_stmt *stmt;
-	const char *sql = SQL(
-		INSERT OR IGNORE INTO names (nick, user, host)
-		VALUES (:nick, :user, :host);
-	);
-	dbPersist(&stmt, sql);
-	dbBindText(stmt, ":nick", msg->nick);
-	dbBindText(stmt, ":user", msg->user);
-	dbBindText(stmt, ":host", msg->host);
-	dbRun(stmt);
-}
-
-static void insertEvent(
-	const struct Message *msg, enum Type type, const char *context,
-	const char *target, const char *message
-) {
-	static sqlite3_stmt *stmt;
-	const char *sql = SQL(
-		INSERT INTO events (time, type, context, name, target, message)
-		SELECT
-			coalesce(datetime(:time), datetime('now')),
-			:type, context, names.name, :target, :message
-		FROM contexts, names
-		WHERE contexts.network = :network
-			AND contexts.name = :context
-			AND names.nick = :nick
-			AND names.user = :user
-			AND names.host = :host;
-	);
-	dbPersist(&stmt, sql);
-	dbBindText(stmt, ":time", msg->time);
-	dbBindInt(stmt, ":type", type);
-	dbBindText(stmt, ":network", network);
-	dbBindText(stmt, ":context", context);
-	dbBindText(stmt, ":nick", msg->nick);
-	dbBindText(stmt, ":user", msg->user);
-	dbBindText(stmt, ":host", msg->host);
-	dbBindText(stmt, ":target", target);
-	dbBindText(stmt, ":message", message);
-	dbRun(stmt);
-}
-
 static int color(const char *user) {
 	if (*user == '~') user++;
 	uint32_t hash = 0;
@@ -344,6 +288,62 @@ static void querySearch(struct Message *msg) {
 	sqlite3_reset(stmt);
 }
 
+static void insertContext(const char *context, bool query) {
+	static sqlite3_stmt *stmt;
+	const char *sql = SQL(
+		INSERT OR IGNORE INTO contexts (network, name, query)
+		VALUES (:network, :context, :query);
+	);
+	dbPersist(&stmt, sql);
+	dbBindText(stmt, ":network", network);
+	dbBindText(stmt, ":context", context);
+	dbBindInt(stmt, ":query", query);
+	dbRun(stmt);
+}
+
+static void insertName(const struct Message *msg) {
+	static sqlite3_stmt *stmt;
+	const char *sql = SQL(
+		INSERT OR IGNORE INTO names (nick, user, host)
+		VALUES (:nick, :user, :host);
+	);
+	dbPersist(&stmt, sql);
+	dbBindText(stmt, ":nick", msg->nick);
+	dbBindText(stmt, ":user", msg->user);
+	dbBindText(stmt, ":host", msg->host);
+	dbRun(stmt);
+}
+
+static void insertEvent(
+	const struct Message *msg, enum Type type, const char *context,
+	const char *target, const char *message
+) {
+	static sqlite3_stmt *stmt;
+	const char *sql = SQL(
+		INSERT INTO events (time, type, context, name, target, message)
+		SELECT
+			coalesce(datetime(:time), datetime('now')),
+			:type, context, names.name, :target, :message
+		FROM contexts, names
+		WHERE contexts.network = :network
+			AND contexts.name = :context
+			AND names.nick = :nick
+			AND names.user = :user
+			AND names.host = :host;
+	);
+	dbPersist(&stmt, sql);
+	dbBindText(stmt, ":time", msg->time);
+	dbBindInt(stmt, ":type", type);
+	dbBindText(stmt, ":network", network);
+	dbBindText(stmt, ":context", context);
+	dbBindText(stmt, ":nick", msg->nick);
+	dbBindText(stmt, ":user", msg->user);
+	dbBindText(stmt, ":host", msg->host);
+	dbBindText(stmt, ":target", target);
+	dbBindText(stmt, ":message", message);
+	dbRun(stmt);
+}
+
 static void handlePrivmsg(struct Message *msg) {
 	require(msg, true, 2);
 
ubject'>Parse capabilitiesJune McEnroe The list that I've defined are the ones that I expect to be able to enable probably without any clients breaking... And of course server-time which pounce implements itself. 2019-11-09Avoid the reserved _A names with BIT macroJune McEnroe 2019-11-09Define macro for bit flag enumsJune McEnroe 2019-11-08Check that password is hashedJune McEnroe 2019-11-08Avoid calling getopt_long again after it returns -1June McEnroe On GNU, calling getopt_long again will reset optind back to the first non-option argument, which would cause an infinite loop of reading the same configurtion file forever. 2019-11-08Only change AWAY status for registered clientsJune McEnroe Turns out I did eventually fix this, because I may want to implement "passive clients" for logging or notification stuff, which wouldn't affect AWAY status either. 2019-11-07Just write the example normallyJune McEnroe 2019-11-07Include path in readlinkat errorJune McEnroe 2019-11-07Call clientConsume before clientRecvJune McEnroe This might reduce the frequency of a client getting its own message back because it was behind in the ring when it sent it. 2019-11-06Use -l:filename in Linux.mkJune McEnroe 2019-11-06Fix compat.h for #defined strlcpyJune McEnroe 2019-11-06Allow unsetting LIBRESSL_PREFIXJune McEnroe 2019-11-06Document calico service configurationJune McEnroe 2019-11-06Document SASL EXTERNAL configuration in more detailJune McEnroe 2019-11-06Document pounce service configurationJune McEnroe 2019-11-06Mention Darwin and GNU/Linux in READMEJune McEnroe 2019-11-06Assume LibreSSL from brew on DarwinJune McEnroe 2019-11-06Remove -DNO_EXPLICIT_BZERO from Darwin.mkJune McEnroe 2019-11-06Don't install rc scripts or dirs on LinuxJune McEnroe