From c48362f2f3e62f9ee796a535f4429e2f0a6d171a Mon Sep 17 00:00:00 2001
From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
Date: Tue, 7 Jul 2026 12:49:20 +0400
Subject: [PATCH] wip
---
.../Views/Chat/ChatItem/CIMetaView.swift | 2 +-
.../Shared/Views/Chat/ChatItemInfoView.swift | 7 +++++++
.../Chat/ComposeMessage/SendMessageView.swift | 2 +-
.../common/views/chat/ChatItemInfoView.kt | 4 ++++
.../commonMain/resources/MR/base/strings.xml | 2 ++
.../SQLite/Migrations/chat_query_plans.txt | 19 ++++++++++++++++++-
6 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift
index 6eff179197..de1885dd1a 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift
@@ -149,7 +149,7 @@ func ciMetaText(
}
if meta.msgSigned == .verified {
appendSpace()
- r = r + statusIconText("checkmark.seal", resolved)
+ r = r + colored(Text(Image("signature.plain")), resolved)
space = textSpace
}
if showTimesamp {
diff --git a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
index bd0e549d38..09ae7554f5 100644
--- a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
@@ -162,6 +162,13 @@ struct ChatItemInfoView: View {
if let deleteAt = meta.itemTimed?.deleteAt {
infoRow("Disappears at", localTimestamp(deleteAt))
}
+ if meta.msgSigned == .verified {
+ let signedText: LocalizedStringKey = ci.chatDir.sent ? "Signed" : "Signed & verified"
+ HStack {
+ Label(signedText, image: "signature.plain")
+ Spacer()
+ }
+ }
if developerTools {
infoRow("Database ID", "\(meta.itemId)")
infoRow("Record updated at", localTimestamp(meta.updatedAt))
diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift
index 8d6d8dc1e4..6ec43ae4ef 100644
--- a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift
+++ b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift
@@ -250,7 +250,7 @@ struct SendMessageView: View {
Button {
startSignedMessage()
} label: {
- Label("Sign message", systemImage: "checkmark.seal")
+ Label("Sign message", image: "signature.plain")
}
}
}
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt
index affe5ce326..a7d04626cf 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt
@@ -272,6 +272,10 @@ fun ChatItemInfoView(chatRh: Long?, ci: ChatItem, ciInfo: ChatItemInfo, devTools
if (deleteAt != null) {
InfoRow(stringResource(MR.strings.info_row_disappears_at), localTimestamp(deleteAt))
}
+ if (ci.meta.msgSigned == MsgSigStatus.Verified) {
+ val signedRes = if (sent) MR.strings.info_row_signed else MR.strings.info_row_signed_verified
+ InfoRow(stringResource(signedRes), "", icon = painterResource(MR.images.ic_verified))
+ }
if (devTools) {
InfoRow(stringResource(MR.strings.info_row_database_id), ci.meta.itemId.toString())
InfoRow(stringResource(MR.strings.info_row_updated_at), localTimestamp(ci.meta.updatedAt))
diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
index 7225831d99..04f87049f0 100644
--- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
+++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
@@ -756,6 +756,8 @@
Send
Sign message
Signing proves you authored this message and can\'t be denied later.
+ Signed
+ Signed & verified
Live message!
Send a live message - it will update for the recipient(s) as you type it
Send
diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt
index 5d7b56fc8f..2693b910ab 100644
--- a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt
+++ b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt
@@ -3796,7 +3796,16 @@ Query:
SELECT g.group_id, g.conn_full_link_to_connect, g.conn_short_link_to_connect FROM groups g
JOIN group_profiles gp ON gp.group_profile_id = g.group_profile_id
WHERE g.user_id = ? AND gp.group_domain = ? AND g.group_domain_verified = 1
-
+ AND g.business_chat IS NOT NULL
+Plan:
+SEARCH g USING INDEX sqlite_autoindex_groups_2 (user_id=?)
+SEARCH gp USING INTEGER PRIMARY KEY (rowid=?)
+
+Query:
+ SELECT g.group_id, g.conn_full_link_to_connect, g.conn_short_link_to_connect FROM groups g
+ JOIN group_profiles gp ON gp.group_profile_id = g.group_profile_id
+ WHERE g.user_id = ? AND gp.group_domain = ? AND g.group_domain_verified = 1
+ AND g.business_chat IS NULL
Plan:
SEARCH g USING INDEX sqlite_autoindex_groups_2 (user_id=?)
SEARCH gp USING INTEGER PRIMARY KEY (rowid=?)
@@ -7119,6 +7128,10 @@ Plan:
SCAN m USING COVERING INDEX idx_group_members_user_id_local_display_name
SEARCH c USING INDEX idx_connections_group_member_id (group_member_id=?)
+Query: SELECT chat_item_id FROM chat_items WHERE item_text LIKE '%' || ? || '%' ORDER BY chat_item_id DESC LIMIT 1
+Plan:
+SCAN chat_items
+
Query: SELECT chat_item_id FROM chat_items WHERE user_id = ? AND contact_id = ? AND shared_msg_id = ? AND item_sent = ?
Plan:
SEARCH chat_items USING INDEX idx_chat_items_direct_shared_msg_id (user_id=? AND contact_id=? AND shared_msg_id=?)
@@ -7431,6 +7444,10 @@ Query: SELECT sent_inv_queue_info FROM group_members WHERE group_member_id = ? A
Plan:
SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?)
+Query: SELECT shared_msg_id FROM chat_items WHERE shared_msg_id IS NOT NULL ORDER BY chat_item_id DESC LIMIT 1
+Plan:
+SCAN chat_items
+
Query: SELECT should_sync FROM connections_sync WHERE connections_sync_id = 1
Plan:
SEARCH connections_sync USING INTEGER PRIMARY KEY (rowid=?)