core: create certain informational chat items as read (#1452)

This commit is contained in:
JRoberts
2022-11-28 16:27:22 +04:00
committed by GitHub
parent 9949ac073f
commit 56a3f98dc0
3 changed files with 38 additions and 3 deletions
+34
View File
@@ -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}
+1 -1
View File
@@ -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)