From 56a3f98dc08d46167bd0fba34ff585d8f0f291fa Mon Sep 17 00:00:00 2001 From: JRoberts <8711996+jr-simplex@users.noreply.github.com> Date: Mon, 28 Nov 2022 16:27:22 +0400 Subject: [PATCH] core: create certain informational chat items as read (#1452) --- src/Simplex/Chat.hs | 5 +++-- src/Simplex/Chat/Messages.hs | 34 ++++++++++++++++++++++++++++++++++ src/Simplex/Chat/Store.hs | 2 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index e59086973d..b59d66c8bb 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -3058,11 +3058,12 @@ saveRcvChatItem' user cd msg sharedMsgId_ MsgMeta {broker = (_, brokerTs)} conte forM_ ciFile $ \CIFile {fileId} -> withStore' $ \db -> updateFileTransferChatItemId db fileId ciId liftIO $ mkChatItem cd ciId content ciFile quotedItem sharedMsgId_ brokerTs createdAt -mkChatItem :: MsgDirectionI d => ChatDirection c d -> ChatItemId -> CIContent d -> Maybe (CIFile d) -> Maybe (CIQuote c) -> Maybe SharedMsgId -> ChatItemTs -> UTCTime -> IO (ChatItem c d) +mkChatItem :: ChatDirection c d -> ChatItemId -> CIContent d -> Maybe (CIFile d) -> Maybe (CIQuote c) -> Maybe SharedMsgId -> ChatItemTs -> UTCTime -> IO (ChatItem c d) mkChatItem cd ciId content file quotedItem sharedMsgId itemTs currentTs = do tz <- getCurrentTimeZone let itemText = ciContentToText content - meta = mkCIMeta ciId content itemText ciStatusNew sharedMsgId False False tz currentTs itemTs currentTs currentTs + itemStatus = ciCreateStatus content + meta = mkCIMeta ciId content itemText itemStatus sharedMsgId False False tz currentTs itemTs currentTs currentTs pure ChatItem {chatDir = toCIDirection cd, meta, content, formattedText = parseMaybeMarkdownList itemText, quotedItem, file} createAgentConnectionAsync :: forall m c. (ChatMonad m, ConnectionModeI c) => User -> CommandFunction -> Bool -> SConnectionMode c -> m (CommandId, ConnId) diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index 99a24c64b3..8e580783e3 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -569,6 +569,27 @@ data CIContent (d :: MsgDirection) where deriving instance Show (CIContent d) +ciCreateStatus :: CIContent d -> CIStatus d +ciCreateStatus = \case + CISndMsgContent _ -> ciStatusNew + CIRcvMsgContent _ -> ciStatusNew + CISndDeleted _ -> ciStatusNew + CIRcvDeleted _ -> ciStatusNew + CISndCall {} -> ciStatusNew + CIRcvCall {} -> ciStatusNew + CIRcvIntegrityError _ -> ciStatusNew + CIRcvGroupInvitation {} -> ciStatusNew + CISndGroupInvitation {} -> ciStatusNew + CIRcvGroupEvent rge -> rgeCreateStatus rge + CISndGroupEvent _ -> ciStatusNew + CIRcvConnEvent _ -> ciStatusNew + CISndConnEvent _ -> ciStatusNew + CIRcvChatFeature {} -> CISRcvRead + CISndChatFeature {} -> ciStatusNew + CIRcvGroupFeature {} -> CISRcvRead + CISndGroupFeature {} -> ciStatusNew + CIRcvChatFeatureRejected _ -> ciStatusNew + data RcvGroupEvent = RGEMemberAdded {groupMemberId :: GroupMemberId, profile :: Profile} -- CRJoinedGroupMemberConnecting | RGEMemberConnected -- CRUserJoinedGroup, CRJoinedGroupMember, CRConnectedToGroupMember @@ -601,6 +622,19 @@ instance ToJSON DBRcvGroupEvent where toJSON (RGE v) = J.genericToJSON (singleFieldJSON $ dropPrefix "RGE") v toEncoding (RGE v) = J.genericToEncoding (singleFieldJSON $ dropPrefix "RGE") v +rgeCreateStatus :: RcvGroupEvent -> CIStatus 'MDRcv +rgeCreateStatus = \case + RGEMemberAdded {} -> CISRcvRead + RGEMemberConnected -> CISRcvRead + RGEMemberLeft -> CISRcvRead + RGEMemberRole {} -> CISRcvRead + RGEUserRole _ -> ciStatusNew + RGEMemberDeleted {} -> CISRcvRead + RGEUserDeleted -> ciStatusNew + RGEGroupDeleted -> ciStatusNew + RGEGroupUpdated _ -> CISRcvRead + RGEInvitedViaGroupLink -> CISRcvRead + data SndGroupEvent = SGEMemberRole {groupMemberId :: GroupMemberId, profile :: Profile, role :: GroupMemberRole} | SGEUserRole {role :: GroupMemberRole} diff --git a/src/Simplex/Chat/Store.hs b/src/Simplex/Chat/Store.hs index b244e3ec5f..822d8316b6 100644 --- a/src/Simplex/Chat/Store.hs +++ b/src/Simplex/Chat/Store.hs @@ -3128,7 +3128,7 @@ createNewChatItem_ db User {userId} chatDirection msgId_ sharedMsgId ciContent q pure ciId where itemRow :: (SMsgDirection d, UTCTime, CIContent d, Text, CIStatus d, Maybe SharedMsgId, UTCTime, UTCTime) - itemRow = (msgDirection @d, itemTs, ciContent, ciContentToText ciContent, ciStatusNew @d, sharedMsgId, createdAt, createdAt) + itemRow = (msgDirection @d, itemTs, ciContent, ciContentToText ciContent, ciCreateStatus ciContent, sharedMsgId, createdAt, createdAt) idsRow :: (Maybe Int64, Maybe Int64, Maybe Int64) idsRow = case chatDirection of CDDirectRcv Contact {contactId} -> (Just contactId, Nothing, Nothing)