diff --git a/simplex-chat.cabal b/simplex-chat.cabal index d8c6f24fb4..ce066bc3c1 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -126,6 +126,7 @@ library Simplex.Chat.Migrations.M20231114_remote_control Simplex.Chat.Migrations.M20231126_remote_ctrl_address Simplex.Chat.Migrations.M20231207_chat_list_pagination + Simplex.Chat.Migrations.M20231214_item_content_tag Simplex.Chat.Mobile Simplex.Chat.Mobile.File Simplex.Chat.Mobile.Shared diff --git a/src/Simplex/Chat/Messages/CIContent.hs b/src/Simplex/Chat/Messages/CIContent.hs index 6b7e66bdb3..a987603bb6 100644 --- a/src/Simplex/Chat/Messages/CIContent.hs +++ b/src/Simplex/Chat/Messages/CIContent.hs @@ -574,3 +574,32 @@ dbParseACIContent = fmap aciContentDBJSON . J.eitherDecodeStrict' . encodeUtf8 -- platform specific instance FromJSON ACIContent where parseJSON = fmap aciContentJSON . J.parseJSON + +toCIContentTag :: CIContent e -> Text +toCIContentTag ciContent = case ciContent of + CISndMsgContent _ -> "sndMsgContent" + CIRcvMsgContent _ -> "rcvMsgContent" + CISndDeleted _ -> "sndDeleted" + CIRcvDeleted _ -> "rcvDeleted" + CISndCall {} -> "sndCall" + CIRcvCall {} -> "rcvCall" + CIRcvIntegrityError _ -> "rcvIntegrityError" + CIRcvDecryptionError {} -> "rcvDecryptionError" + CIRcvGroupInvitation {} -> "rcvGroupInvitation" + CISndGroupInvitation {} -> "sndGroupInvitation" + CIRcvDirectEvent _ -> "rcvDirectEvent" + CIRcvGroupEvent _ -> "rcvGroupEvent" + CISndGroupEvent _ -> "sndGroupEvent" + CIRcvConnEvent _ -> "rcvConnEvent" + CISndConnEvent _ -> "sndConnEvent" + CIRcvChatFeature {} -> "rcvChatFeature" + CISndChatFeature {} -> "sndChatFeature" + CIRcvChatPreference {} -> "rcvChatPreference" + CISndChatPreference {} -> "sndChatPreference" + CIRcvGroupFeature {} -> "rcvGroupFeature" + CISndGroupFeature {} -> "sndGroupFeature" + CIRcvChatFeatureRejected _ -> "rcvChatFeatureRejected" + CIRcvGroupFeatureRejected _ -> "rcvGroupFeatureRejected" + CISndModerated -> "sndModerated" + CIRcvModerated -> "rcvModerated" + CIInvalidJSON _ -> "invalidJSON" diff --git a/src/Simplex/Chat/Migrations/M20231214_item_content_tag.hs b/src/Simplex/Chat/Migrations/M20231214_item_content_tag.hs new file mode 100644 index 0000000000..cd4cd136e5 --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20231214_item_content_tag.hs @@ -0,0 +1,18 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20231214_item_content_tag where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20231214_item_content_tag :: Query +m20231214_item_content_tag = + [sql| +ALTER TABLE chat_items ADD COLUMN item_content_tag TEXT; +|] + +down_m20231214_item_content_tag :: Query +down_m20231214_item_content_tag = + [sql| +ALTER TABLE chat_items DROP COLUMN item_content_tag; +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 3b83b132df..7f5945d394 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -379,7 +379,8 @@ CREATE TABLE chat_items( item_live INTEGER, item_deleted_by_group_member_id INTEGER REFERENCES group_members ON DELETE SET NULL, item_deleted_ts TEXT, - forwarded_by_group_member_id INTEGER REFERENCES group_members ON DELETE SET NULL + forwarded_by_group_member_id INTEGER REFERENCES group_members ON DELETE SET NULL, + item_content_tag TEXT ); CREATE TABLE chat_item_messages( chat_item_id INTEGER NOT NULL REFERENCES chat_items ON DELETE CASCADE, diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 87e6667124..b817c844d5 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -399,18 +399,19 @@ createNewChatItem_ db User {userId} chatDirection msgId_ sharedMsgId ciContent q -- user and IDs user_id, created_by_msg_id, contact_id, group_id, group_member_id, -- meta - item_sent, item_ts, item_content, item_text, item_status, shared_msg_id, forwarded_by_group_member_id, created_at, updated_at, item_live, timed_ttl, timed_delete_at, + item_sent, item_ts, item_content, item_content_tag, item_text, item_status, shared_msg_id, + forwarded_by_group_member_id, created_at, updated_at, item_live, timed_ttl, timed_delete_at, -- quote quoted_shared_msg_id, quoted_sent_at, quoted_content, quoted_sent, quoted_member_id - ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) |] ((userId, msgId_) :. idsRow :. itemRow :. quoteRow) ciId <- insertedRowId db forM_ msgId_ $ \msgId -> insertChatItemMessage_ db ciId msgId createdAt pure ciId where - itemRow :: (SMsgDirection d, UTCTime, CIContent d, Text, CIStatus d, Maybe SharedMsgId, Maybe GroupMemberId) :. (UTCTime, UTCTime, Maybe Bool) :. (Maybe Int, Maybe UTCTime) - itemRow = (msgDirection @d, itemTs, ciContent, ciContentToText ciContent, ciCreateStatus ciContent, sharedMsgId, forwardedByMember) :. (createdAt, createdAt, justTrue live) :. ciTimedRow timed + itemRow :: (SMsgDirection d, UTCTime, CIContent d, Text, Text, CIStatus d, Maybe SharedMsgId, Maybe GroupMemberId) :. (UTCTime, UTCTime, Maybe Bool) :. (Maybe Int, Maybe UTCTime) + itemRow = (msgDirection @d, itemTs, ciContent, toCIContentTag ciContent, ciContentToText ciContent, ciCreateStatus ciContent, sharedMsgId, forwardedByMember) :. (createdAt, createdAt, justTrue live) :. ciTimedRow timed idsRow :: (Maybe Int64, Maybe Int64, Maybe Int64) idsRow = case chatDirection of CDDirectRcv Contact {contactId} -> (Just contactId, Nothing, Nothing) diff --git a/src/Simplex/Chat/Store/Migrations.hs b/src/Simplex/Chat/Store/Migrations.hs index c8a04c42a1..af9985b837 100644 --- a/src/Simplex/Chat/Store/Migrations.hs +++ b/src/Simplex/Chat/Store/Migrations.hs @@ -92,6 +92,7 @@ import Simplex.Chat.Migrations.M20231113_group_forward import Simplex.Chat.Migrations.M20231114_remote_control import Simplex.Chat.Migrations.M20231126_remote_ctrl_address import Simplex.Chat.Migrations.M20231207_chat_list_pagination +import Simplex.Chat.Migrations.M20231214_item_content_tag import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..)) schemaMigrations :: [(String, Query, Maybe Query)] @@ -183,7 +184,8 @@ schemaMigrations = ("20231113_group_forward", m20231113_group_forward, Just down_m20231113_group_forward), ("20231114_remote_control", m20231114_remote_control, Just down_m20231114_remote_control), ("20231126_remote_ctrl_address", m20231126_remote_ctrl_address, Just down_m20231126_remote_ctrl_address), - ("20231207_chat_list_pagination", m20231207_chat_list_pagination, Just down_m20231207_chat_list_pagination) + ("20231207_chat_list_pagination", m20231207_chat_list_pagination, Just down_m20231207_chat_list_pagination), + ("20231214_item_content_tag", m20231214_item_content_tag, Just down_m20231214_item_content_tag) ] -- | The list of migrations in ascending order by date