From ef5afc1e23ebdab4cedbb5f864f4878662dd811c Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Wed, 14 Jun 2023 21:59:04 +0000 Subject: [PATCH] Minor cleanup while pondering syncing faster. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4322 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- src/ssb.c | 4 ++- src/ssb.db.c | 84 +++++++++++++++++++++++++++------------------------- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/src/ssb.c b/src/ssb.c index 630fa6d4..ca236569 100644 --- a/src/ssb.c +++ b/src/ssb.c @@ -681,7 +681,9 @@ void tf_ssb_connection_remove_new_message_request(tf_ssb_connection_t* connectio void tf_ssb_connection_remove_request(tf_ssb_connection_t* connection, int32_t request_number) { - tf_ssb_request_t* request = bsearch(&request_number, connection->requests, connection->requests_count, sizeof(tf_ssb_request_t), _request_compare); + tf_ssb_request_t* request = connection->requests_count ? + bsearch(&request_number, connection->requests, connection->requests_count, sizeof(tf_ssb_request_t), _request_compare) : + NULL; if (request) { if (request->cleanup) diff --git a/src/ssb.db.c b/src/ssb.db.c index fbae0bb7..d68a06c0 100644 --- a/src/ssb.db.c +++ b/src/ssb.db.c @@ -252,24 +252,19 @@ static bool _tf_ssb_db_previous_message_exists(sqlite3* db, const char* author, bool tf_ssb_db_store_message(tf_ssb_t* ssb, JSContext* context, const char* id, JSValue val, const char* signature, bool sequence_before_author) { bool stored = false; + JSValue previousval = JS_GetPropertyStr(context, val, "previous"); const char* previous = JS_IsNull(previousval) ? NULL : JS_ToCString(context, previousval); + JS_FreeValue(context, previousval); + JSValue authorval = JS_GetPropertyStr(context, val, "author"); const char* author = JS_ToCString(context, authorval); + JS_FreeValue(context, authorval); + int64_t sequence = -1; JSValue sequenceval = JS_GetPropertyStr(context, val, "sequence"); JS_ToInt64(context, &sequence, sequenceval); JS_FreeValue(context, sequenceval); - double timestamp = -1.0; - JSValue timestampval = JS_GetPropertyStr(context, val, "timestamp"); - JS_ToFloat64(context, ×tamp, timestampval); - JS_FreeValue(context, timestampval); - - JSValue contentval = JS_GetPropertyStr(context, val, "content"); - JSValue content = JS_JSONStringify(context, contentval, JS_NULL, JS_NULL); - size_t content_len; - const char* contentstr = JS_ToCStringLen(context, &content_len, content); - JS_FreeValue(context, contentval); sqlite3* db = tf_ssb_get_db(ssb); sqlite3_stmt* statement; @@ -277,6 +272,17 @@ bool tf_ssb_db_store_message(tf_ssb_t* ssb, JSContext* context, const char* id, if (_tf_ssb_db_previous_message_exists(db, author, sequence, previous)) { + double timestamp = -1.0; + JSValue timestampval = JS_GetPropertyStr(context, val, "timestamp"); + JS_ToFloat64(context, ×tamp, timestampval); + JS_FreeValue(context, timestampval); + + JSValue contentval = JS_GetPropertyStr(context, val, "content"); + JSValue content = JS_JSONStringify(context, contentval, JS_NULL, JS_NULL); + size_t content_len; + const char* contentstr = JS_ToCStringLen(context, &content_len, content); + JS_FreeValue(context, contentval); + const char* query = "INSERT INTO messages (id, previous, author, sequence, timestamp, content, hash, signature, sequence_before_author) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT DO NOTHING"; if (sqlite3_prepare(db, query, -1, &statement, NULL) == SQLITE_OK) { @@ -311,45 +317,43 @@ bool tf_ssb_db_store_message(tf_ssb_t* ssb, JSContext* context, const char* id, { tf_printf("prepare failed: %s\n", sqlite3_errmsg(db)); } + + JS_FreeCString(context, contentstr); + JS_FreeValue(context, content); } else { tf_printf("Previous message doesn't exist.\n"); } - if (last_row_id != -1) - { - const char* query = "SELECT DISTINCT json.value FROM messages, json_tree(messages.content) AS json LEFT OUTER JOIN blobs ON json.value = blobs.id WHERE messages.rowid = ?1 AND json.value LIKE '&%%.sha256' AND length(json.value) = ?2 AND blobs.content IS NULL"; - if (sqlite3_prepare(db, query, -1, &statement, NULL) == SQLITE_OK) - { - if (sqlite3_bind_int64(statement, 1, last_row_id) == SQLITE_OK && - sqlite3_bind_int(statement, 2, k_blob_id_len - 1) == SQLITE_OK) - { - int r = SQLITE_OK; - while ((r = sqlite3_step(statement)) == SQLITE_ROW) - { - tf_ssb_notify_blob_want_added(ssb, (const char*)sqlite3_column_text(statement, 0)); - } - if (r != SQLITE_DONE) - { - tf_printf("%s\n", sqlite3_errmsg(db)); - } - } - sqlite3_finalize(statement); - } - else - { - tf_printf("prepare failed: %s\n", sqlite3_errmsg(db)); - } - } + if (last_row_id != -1) + { + const char* query = "SELECT DISTINCT json.value FROM messages, json_tree(messages.content) AS json LEFT OUTER JOIN blobs ON json.value = blobs.id WHERE messages.rowid = ?1 AND json.value LIKE '&%%.sha256' AND length(json.value) = ?2 AND blobs.content IS NULL"; + if (sqlite3_prepare(db, query, -1, &statement, NULL) == SQLITE_OK) + { + if (sqlite3_bind_int64(statement, 1, last_row_id) == SQLITE_OK && + sqlite3_bind_int(statement, 2, k_blob_id_len - 1) == SQLITE_OK) + { + int r = SQLITE_OK; + while ((r = sqlite3_step(statement)) == SQLITE_ROW) + { + tf_ssb_notify_blob_want_added(ssb, (const char*)sqlite3_column_text(statement, 0)); + } + if (r != SQLITE_DONE) + { + tf_printf("%s\n", sqlite3_errmsg(db)); + } + } + sqlite3_finalize(statement); + } + else + { + tf_printf("prepare failed: %s\n", sqlite3_errmsg(db)); + } + } - - JS_FreeValue(context, previousval); JS_FreeCString(context, author); - JS_FreeValue(context, authorval); JS_FreeCString(context, previous); - JS_FreeCString(context, contentstr); - JS_FreeValue(context, content); return stored; }