forked from cory/tildefriends
Minor cleanup while pondering syncing faster.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4322 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
486212f22a
commit
ef5afc1e23
@ -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)
|
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)
|
||||||
{
|
{
|
||||||
if (request->cleanup)
|
if (request->cleanup)
|
||||||
|
84
src/ssb.db.c
84
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 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;
|
bool stored = false;
|
||||||
|
|
||||||
JSValue previousval = JS_GetPropertyStr(context, val, "previous");
|
JSValue previousval = JS_GetPropertyStr(context, val, "previous");
|
||||||
const char* previous = JS_IsNull(previousval) ? NULL : JS_ToCString(context, previousval);
|
const char* previous = JS_IsNull(previousval) ? NULL : JS_ToCString(context, previousval);
|
||||||
|
JS_FreeValue(context, previousval);
|
||||||
|
|
||||||
JSValue authorval = JS_GetPropertyStr(context, val, "author");
|
JSValue authorval = JS_GetPropertyStr(context, val, "author");
|
||||||
const char* author = JS_ToCString(context, authorval);
|
const char* author = JS_ToCString(context, authorval);
|
||||||
|
JS_FreeValue(context, authorval);
|
||||||
|
|
||||||
int64_t sequence = -1;
|
int64_t sequence = -1;
|
||||||
JSValue sequenceval = JS_GetPropertyStr(context, val, "sequence");
|
JSValue sequenceval = JS_GetPropertyStr(context, val, "sequence");
|
||||||
JS_ToInt64(context, &sequence, sequenceval);
|
JS_ToInt64(context, &sequence, sequenceval);
|
||||||
JS_FreeValue(context, 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* db = tf_ssb_get_db(ssb);
|
||||||
sqlite3_stmt* statement;
|
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))
|
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";
|
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)
|
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));
|
tf_printf("prepare failed: %s\n", sqlite3_errmsg(db));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JS_FreeCString(context, contentstr);
|
||||||
|
JS_FreeValue(context, content);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tf_printf("Previous message doesn't exist.\n");
|
tf_printf("Previous message doesn't exist.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (last_row_id != -1)
|
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";
|
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_prepare(db, query, -1, &statement, NULL) == SQLITE_OK)
|
||||||
{
|
{
|
||||||
if (sqlite3_bind_int64(statement, 1, last_row_id) == 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)
|
sqlite3_bind_int(statement, 2, k_blob_id_len - 1) == SQLITE_OK)
|
||||||
{
|
{
|
||||||
int r = SQLITE_OK;
|
int r = SQLITE_OK;
|
||||||
while ((r = sqlite3_step(statement)) == SQLITE_ROW)
|
while ((r = sqlite3_step(statement)) == SQLITE_ROW)
|
||||||
{
|
{
|
||||||
tf_ssb_notify_blob_want_added(ssb, (const char*)sqlite3_column_text(statement, 0));
|
tf_ssb_notify_blob_want_added(ssb, (const char*)sqlite3_column_text(statement, 0));
|
||||||
}
|
}
|
||||||
if (r != SQLITE_DONE)
|
if (r != SQLITE_DONE)
|
||||||
{
|
{
|
||||||
tf_printf("%s\n", sqlite3_errmsg(db));
|
tf_printf("%s\n", sqlite3_errmsg(db));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlite3_finalize(statement);
|
sqlite3_finalize(statement);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tf_printf("prepare failed: %s\n", sqlite3_errmsg(db));
|
tf_printf("prepare failed: %s\n", sqlite3_errmsg(db));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JS_FreeValue(context, previousval);
|
|
||||||
JS_FreeCString(context, author);
|
JS_FreeCString(context, author);
|
||||||
JS_FreeValue(context, authorval);
|
|
||||||
JS_FreeCString(context, previous);
|
JS_FreeCString(context, previous);
|
||||||
JS_FreeCString(context, contentstr);
|
|
||||||
JS_FreeValue(context, content);
|
|
||||||
return stored;
|
return stored;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user