diff --git a/tools/chatgui-android/jni_bridge/android_jni_bridge.c b/tools/chatgui-android/jni_bridge/android_jni_bridge.c index 315e90600..c4b605154 100644 --- a/tools/chatgui-android/jni_bridge/android_jni_bridge.c +++ b/tools/chatgui-android/jni_bridge/android_jni_bridge.c @@ -369,7 +369,7 @@ static void bridge_get_node_name(sqlite3* db, uint64_t node_id, const char* chan if (!channel_id || !channel_id[0]) return; char peers_tbl[80], sql[256]; peers_table_name(channel_id, peers_tbl, sizeof(peers_tbl)); - snprintf(sql, sizeof(sql), "SELECT userinfo FROM \"%s\" WHERE node_id=?", peers_tbl); + snprintf(sql, sizeof(sql), "SELECT userinfo FROM \"%s\" WHERE node_id=? AND record_state=0", peers_tbl); if (sqlite3_prepare_v2(db, sql, -1, &st, NULL) != SQLITE_OK) return; sqlite3_bind_int64(st, 1, (sqlite3_int64)node_id); if (sqlite3_step(st) == SQLITE_ROW) { @@ -466,7 +466,7 @@ char* utun_bridge_get_channels_json(void) { snprintf(preview, sizeof(preview), "%s: %s", author_name, body); } else if (last_rc != SQLITE_DONE) goto failed; sqlite3_finalize(last); last = NULL; - snprintf(sql, sizeof(sql), "SELECT node_id FROM \"%s\" WHERE admitted=1", peers_table); + snprintf(sql, sizeof(sql), "SELECT node_id FROM \"%s\" WHERE record_state=0 AND admitted=1", peers_table); if (sqlite3_prepare_v2(db, sql, -1, &peers, NULL) != SQLITE_OK) goto failed; int online = 0, peer_rc; while ((peer_rc = sqlite3_step(peers)) == SQLITE_ROW) { @@ -766,7 +766,7 @@ char* utun_bridge_get_channel_members_json(const char* channel_id) { "COALESCE(p.node_type,0),COALESCE(p.node_RTT,0),COALESCE(p.storage,0),COALESCE(p.userinfo,'')," "p.source,length(p.adm_tags_sig),COALESCE(p.deleted,0),p.radio_muted" " FROM \"%s\" p LEFT JOIN nodes n ON p.node_id=n.node_id" - " WHERE p.admitted=1 OR p.source!=0 OR p.deleted!=0 ORDER BY p.node_id ASC", peers_tbl); + " WHERE p.record_state=0 AND (p.admitted=1 OR p.source!=0 OR p.deleted!=0) ORDER BY p.node_id ASC", peers_tbl); struct strbuf out = strbuf_new(); sqlite3_stmt* st = NULL; int rc = sqlite3_prepare_v2(db, sql, -1, &st, NULL); @@ -868,8 +868,8 @@ char* utun_bridge_get_member_detail_json(const char* channel_id, uint64_t node_i char sql[512]; snprintf(sql, sizeof(sql), "SELECT p.signed_by, length(p.signature), p.source, COALESCE(NULLIF(i.local_nick,''),n.name,'')" - " FROM \"%s\" p LEFT JOIN \"%s\" i ON i.node_id=p.signed_by" - " LEFT JOIN nodes n ON n.node_id=p.signed_by WHERE p.node_id=?", peers_tbl, peers_tbl); + " FROM \"%s\" p LEFT JOIN \"%s\" i ON i.node_id=p.signed_by AND i.record_state=0" + " LEFT JOIN nodes n ON n.node_id=p.signed_by WHERE p.node_id=? AND p.record_state=0", peers_tbl, peers_tbl); int rc = sqlite3_prepare_v2(db, sql, -1, &st, NULL); if (rc == SQLITE_OK) rc = sqlite3_bind_int64(st, 1, (sqlite3_int64)node_id); if (rc == SQLITE_OK) rc = sqlite3_step(st); @@ -966,7 +966,7 @@ void utun_bridge_set_member_nick(const char* channel_id, uint64_t node_id, const char peers_tbl[80]; peers_table_name(channel_id, peers_tbl, sizeof(peers_tbl)); char sql[256]; - snprintf(sql, sizeof(sql), "UPDATE \"%s\" SET local_nick=? WHERE node_id=?", peers_tbl); + snprintf(sql, sizeof(sql), "UPDATE \"%s\" SET local_nick=? WHERE node_id=? AND record_state=0", peers_tbl); sqlite3_stmt* st = NULL; int rc = sqlite3_prepare_v2(db, sql, -1, &st, NULL); diff --git a/tools/chatgui/tests/test_member_files_browser.cpp b/tools/chatgui/tests/test_member_files_browser.cpp index 9448ecd04..adea82456 100644 --- a/tools/chatgui/tests/test_member_files_browser.cpp +++ b/tools/chatgui/tests/test_member_files_browser.cpp @@ -132,7 +132,8 @@ private slots: QCOMPARE(sqlite3_exec(sql, "CREATE TABLE accounts(node_id INTEGER,display_name TEXT);" "INSERT INTO accounts VALUES(22,'Me'),(33,'Server');" "CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" - "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", + "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); DbManager db; db.setDb(sql); db.setMyNodeId(22); { @@ -370,7 +371,8 @@ private slots: "INSERT INTO accounts VALUES(11,'Other'),(22,'Me'),(33,'Server');" "CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" "INSERT INTO peers_42 VALUES(11,'{}',NULL,0,0),(22,'{}',NULL,0,0)," - "(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", nullptr, nullptr, nullptr), SQLITE_OK); + "(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); DbManager db; db.setDb(sql); db.setMyNodeId(22); { MemberFileBrowser browser(&db); browser.setChannel("42", 22); browser.show(); browser.activateWindow(); @@ -451,7 +453,8 @@ private slots: "INSERT INTO accounts VALUES(11,'Other'),(22,'Me'),(33,'Server');" "CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" "INSERT INTO peers_42 VALUES(11,'{}',NULL,0,0),(22,'{}',NULL,0,0)," - "(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", nullptr, nullptr, nullptr), SQLITE_OK); + "(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); DbManager db; db.setDb(sql); db.setMyNodeId(22); QString exported; { MemberFileBrowser browser(&db); browser.setChannel("42", 11); browser.show(); @@ -536,7 +539,8 @@ private slots: "INSERT INTO accounts VALUES(11,'Other'),(22,'Me'),(33,'Server');" "CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" "INSERT INTO peers_42 VALUES(11,'{}',NULL,0,0),(22,'{}',NULL,0,0)," - "(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", nullptr, nullptr, nullptr), SQLITE_OK); + "(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); DbManager db; db.setDb(sql); db.setMyNodeId(22); QTemporaryDir dir; QVERIFY(dir.isValid()); QString path = dir.filePath("dropped.txt"); { QFile file(path); QVERIFY(file.open(QIODevice::WriteOnly)); QCOMPARE(file.write("test"), 4LL); } @@ -623,7 +627,8 @@ private slots: QCOMPARE(sqlite3_exec(sql, "CREATE TABLE accounts(node_id INTEGER,display_name TEXT);" "INSERT INTO accounts VALUES(22,'Me'),(33,'Server');" "CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" - "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", + "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); DbManager db; db.setDb(sql); db.setMyNodeId(22); QTemporaryDir dir; QVERIFY(dir.isValid()); QStringList paths; @@ -684,7 +689,8 @@ private slots: "INSERT INTO accounts VALUES(11,'Author'),(22,'Reader'),(33,'Server');" "CREATE TABLE peers_42(node_id INTEGER,storage INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" "INSERT INTO peers_42 VALUES(11,0,'{}',NULL,0,0),(22,0,'{}',NULL,0,0)," - "(33,0,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", nullptr, nullptr, nullptr), SQLITE_OK); + "(33,0,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); DbManager db; db.setDb(sql); db.setMyNodeId(22); { MemberFileBrowser browser(&db); browser.setChannel("42", 11); diff --git a/tools/chatgui/tests/test_member_files_lifecycle.cpp b/tools/chatgui/tests/test_member_files_lifecycle.cpp index 875cde9fe..8801cf7b6 100644 --- a/tools/chatgui/tests/test_member_files_lifecycle.cpp +++ b/tools/chatgui/tests/test_member_files_lifecycle.cpp @@ -243,7 +243,8 @@ private slots: QCOMPARE(sqlite3_exec(sql, "CREATE TABLE accounts(node_id INTEGER,display_name TEXT);" "INSERT INTO accounts VALUES(22,'Me'),(33,'Storage');" "CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" - "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", + "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); db.setDb(sql); db.setMyNodeId(22); MemberFileBrowser browser(&db); activeBrowser = &browser; @@ -292,7 +293,8 @@ private slots: QCOMPARE(sqlite3_exec(sql, "CREATE TABLE accounts(node_id INTEGER,display_name TEXT);" "INSERT INTO accounts VALUES(22,'Me'),(33,'Storage');" "CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);" - "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", + "INSERT INTO peers_42 VALUES(22,'{}',NULL,0,0),(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);" + "ALTER TABLE peers_42 ADD COLUMN record_state INTEGER NOT NULL DEFAULT 0;", nullptr, nullptr, nullptr), SQLITE_OK); db.setDb(sql); db.setMyNodeId(22); MemberFileBrowser browser(&db); activeBrowser = &browser; browser.setChannel("42", 22);