diff --git a/lib/types/sqlite-types.js b/lib/types/sqlite-types.js --- a/lib/types/sqlite-types.js +++ b/lib/types/sqlite-types.js @@ -16,6 +16,7 @@ +timestamp: string, +plaintext: string, +ciphertext: string, + +status: string, }; export type SQLiteAPI = { diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp --- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp +++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp @@ -42,7 +42,7 @@ "olm_persist_account", "olm_persist_sessions", "metadata", - "messages_to_device", + "outbound_p2p_messages", "integrity_store", "persist_storage", "keyservers", @@ -640,6 +640,26 @@ return create_table(db, query, "received_messages_to_device"); } +bool recreate_outbound_p2p_messages_table(sqlite3 *db) { + std::string query = + "DROP TABLE IF EXISTS messages_to_device;" + "CREATE TABLE IF NOT EXISTS outbound_p2p_messages (" + " message_id TEXT NOT NULL," + " device_id TEXT NOT NULL," + " user_id TEXT NOT NULL," + " timestamp BIGINT NOT NULL," + " plaintext TEXT NOT NULL," + " ciphertext TEXT NOT NULL," + " status TEXT NOT NULL," + " PRIMARY KEY (message_id, device_id)" + ");" + + "CREATE INDEX IF NOT EXISTS outbound_p2p_messages_idx_id_timestamp" + " ON outbound_p2p_messages (device_id, timestamp);"; + + return create_table(db, query, "outbound_p2p_messages"); +} + bool create_schema(sqlite3 *db) { char *error; sqlite3_exec( @@ -739,13 +759,14 @@ " community_info TEXT NOT NULL" ");" - "CREATE TABLE IF NOT EXISTS messages_to_device (" + "CREATE TABLE IF NOT EXISTS outbound_p2p_messages (" " message_id TEXT NOT NULL," " device_id TEXT NOT NULL," " user_id TEXT NOT NULL," " timestamp BIGINT NOT NULL," " plaintext TEXT NOT NULL," " ciphertext TEXT NOT NULL," + " status TEXT NOT NULL," " PRIMARY KEY (message_id, device_id)" ");" @@ -783,8 +804,8 @@ "CREATE INDEX IF NOT EXISTS messages_idx_thread_time" " ON messages (thread, time);" - "CREATE INDEX IF NOT EXISTS messages_to_device_idx_id_timestamp" - " ON messages_to_device (device_id, timestamp);", + "CREATE INDEX IF NOT EXISTS outbound_p2p_messages_idx_id_timestamp" + " ON outbound_p2p_messages (device_id, timestamp);", nullptr, nullptr, @@ -1030,7 +1051,8 @@ {41, {create_aux_user_table, true}}, {42, {add_version_column_to_olm_persist_sessions_table, true}}, {43, {create_thread_activity_table, true}}, - {44, {create_received_messages_to_device, true}}}}; + {44, {create_received_messages_to_device, true}}, + {45, {recreate_outbound_p2p_messages_table, true}}}}; enum class MigrationResult { SUCCESS, FAILURE, NOT_APPLIED }; @@ -2080,9 +2102,10 @@ void SQLiteQueryExecutor::addOutboundP2PMessages( const std::vector &messages) const { static std::string addMessage = - "REPLACE INTO messages_to_device (" - " message_id, device_id, user_id, timestamp, plaintext, ciphertext) " - "VALUES (?, ?, ?, ?, ?, ?);"; + "REPLACE INTO outbound_p2p_messages (" + " message_id, device_id, user_id, timestamp," + " plaintext, ciphertext, status) " + "VALUES (?, ?, ?, ?, ?, ?, ?);"; for (const OutboundP2PMessage &clientMessage : messages) { SQLiteOutboundP2PMessage message = @@ -2095,7 +2118,7 @@ std::vector SQLiteQueryExecutor::getAllOutboundP2PMessages( const std::string &deviceID) const { std::string query = - "SELECT * FROM messages_to_device " + "SELECT * FROM outbound_p2p_messages " "WHERE device_id = ? " "ORDER BY timestamp;"; @@ -2119,7 +2142,7 @@ void SQLiteQueryExecutor::removeOutboundP2PMessagesOlderThan( const OutboundP2PMessage &lastConfirmedMessageClient) const { static std::string query = - "DELETE FROM messages_to_device " + "DELETE FROM outbound_p2p_messages " "WHERE timestamp <= ? AND device_id IN (?);"; SQLiteOutboundP2PMessage lastConfirmedMessage = @@ -2149,7 +2172,7 @@ void SQLiteQueryExecutor::removeAllOutboundP2PMessages( const std::string &deviceID) const { static std::string removeMessagesSQL = - "DELETE FROM messages_to_device " + "DELETE FROM outbound_p2p_messages " "WHERE device_id IN (?);"; std::vector keys = {deviceID}; removeEntitiesByKeys( diff --git a/native/cpp/CommonCpp/DatabaseManagers/entities/OutboundP2PMessage.h b/native/cpp/CommonCpp/DatabaseManagers/entities/OutboundP2PMessage.h --- a/native/cpp/CommonCpp/DatabaseManagers/entities/OutboundP2PMessage.h +++ b/native/cpp/CommonCpp/DatabaseManagers/entities/OutboundP2PMessage.h @@ -15,6 +15,7 @@ int64_t timestamp; std::string plaintext; std::string ciphertext; + std::string status; static SQLiteOutboundP2PMessage fromSQLResult(sqlite3_stmt *sqlRow, int idx) { return SQLiteOutboundP2PMessage{ @@ -24,6 +25,7 @@ getInt64FromSQLRow(sqlRow, idx + 3), getStringFromSQLRow(sqlRow, idx + 4), getStringFromSQLRow(sqlRow, idx + 5), + getStringFromSQLRow(sqlRow, idx + 6), }; } @@ -33,7 +35,8 @@ bindStringToSQL(user_id, sql, idx + 2); bindInt64ToSQL(timestamp, sql, idx + 3); bindStringToSQL(plaintext, sql, idx + 4); - return bindStringToSQL(ciphertext, sql, idx + 5); + bindStringToSQL(ciphertext, sql, idx + 5); + return bindStringToSQL(status, sql, idx + 6); } }; @@ -44,6 +47,7 @@ std::string timestamp; std::string plaintext; std::string ciphertext; + std::string status; OutboundP2PMessage() = default; @@ -54,6 +58,7 @@ timestamp = std::to_string(msg.timestamp); plaintext = msg.plaintext; ciphertext = msg.ciphertext; + status = msg.status; } SQLiteOutboundP2PMessage toSQLiteOutboundP2PMessage() const { @@ -64,6 +69,7 @@ msg.timestamp = std::stoll(timestamp); msg.plaintext = plaintext; msg.ciphertext = ciphertext; + msg.status = status; return msg; } }; diff --git a/web/cpp/SQLiteQueryExecutorBindings.cpp b/web/cpp/SQLiteQueryExecutorBindings.cpp --- a/web/cpp/SQLiteQueryExecutorBindings.cpp +++ b/web/cpp/SQLiteQueryExecutorBindings.cpp @@ -120,7 +120,8 @@ .field("userID", &OutboundP2PMessage::user_id) .field("timestamp", &OutboundP2PMessage::timestamp) .field("plaintext", &OutboundP2PMessage::plaintext) - .field("ciphertext", &OutboundP2PMessage::ciphertext); + .field("ciphertext", &OutboundP2PMessage::ciphertext) + .field("status", &OutboundP2PMessage::status); value_object("InboundP2PMessage") .field("messageID", &InboundP2PMessage::message_id) diff --git a/web/shared-worker/_generated/comm_query_executor.wasm b/web/shared-worker/_generated/comm_query_executor.wasm index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@