This commit is contained in:
spaced4ndy
2026-05-28 13:52:56 +04:00
parent 904f0bd7df
commit 5fcac65c1e
2 changed files with 6 additions and 11 deletions
+3 -8
View File
@@ -1120,7 +1120,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage =
checkSndInlineFTComplete conn msgId
updateGroupItemsStatus gInfo m conn msgId GSSSent (Just $ isJust proxy)
when continued $ do
sendRosterCatchUp gInfo m -- roster ahead of the resumed backlog
when (isUserGrpFwdRelay gInfo) $ forwardCachedRoster user gInfo m -- roster ahead of the resumed backlog
sendPendingGroupMessages user gInfo m conn
SWITCH qd phase cStats -> do
toView $ CEvtGroupMemberSwitch user gInfo m (SwitchProgress qd phase cStats)
@@ -1218,7 +1218,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage =
QCONT -> do
continued <- continueSending connEntity conn
when continued $ do
sendRosterCatchUp gInfo m -- roster ahead of the resumed backlog
when (isUserGrpFwdRelay gInfo) $ forwardCachedRoster user gInfo m -- roster ahead of the resumed backlog
sendPendingGroupMessages user gInfo m conn
MWARN msgId err -> do
withStore' $ \db -> updateGroupItemsErrorStatus db msgId (groupMemberId' m) (GSSWarning $ agentSndError err)
@@ -1656,11 +1656,6 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage =
pure True
else pure False
-- Relay: on a subscriber's queue draining, forward the cached roster ahead of
-- the resumed backlog, so it holds the privileged set before the events it verifies.
sendRosterCatchUp :: GroupInfo -> GroupMember -> CM ()
sendRosterCatchUp gInfo m = when (isUserGrpFwdRelay gInfo) $ forwardCachedRoster user gInfo m
-- TODO v5.7 / v6.0 - together with deprecating old group protocol establishing direct connections?
-- we could save command records only for agent APIs we process continuations for (INV)
withCompletedCommand :: forall e. AEntityI e => Connection -> AEvent e -> (CommandData -> CM ()) -> CM ()
@@ -2979,7 +2974,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage =
| fromRelay && isRosterRole memRole ->
if memberRole' unknownMember == memRole
then do
updatedMember <- withStore $ \db -> updateRosterMemberProfileAnnounced db vr user m unknownMember memInfo initialStatus
updatedMember <- withStore $ \db -> updateRosterMemberAnnounced db vr user m unknownMember memInfo initialStatus
announceUnknownMember unknownMember updatedMember
else messageError "x.grp.mem.new: privileged role not established by roster" $> Nothing
Right unknownMember@GroupMember {memberStatus = GSMemUnknown} -> do
+3 -3
View File
@@ -172,7 +172,7 @@ module Simplex.Chat.Store.Groups
createLinkOwnerMember,
updatePreparedChannelMember,
updateUnknownMemberAnnounced,
updateRosterMemberProfileAnnounced,
updateRosterMemberAnnounced,
updateUserMemberProfileSentAt,
setGroupCustomData,
setGroupUIThemes,
@@ -3195,8 +3195,8 @@ updateUnknownMemberAnnounced db vr user@User {userId} invitingMember unknownMemb
-- Like updateUnknownMemberAnnounced but preserves member_role and member_pub_key
-- (roster-established for moderators/admins; the dissemination carries only the profile).
updateRosterMemberProfileAnnounced :: DB.Connection -> VersionRangeChat -> User -> GroupMember -> GroupMember -> MemberInfo -> GroupMemberStatus -> ExceptT StoreError IO GroupMember
updateRosterMemberProfileAnnounced db vr user@User {userId} invitingMember unknownMember@GroupMember {groupMemberId, memberChatVRange} MemberInfo {v, profile} status = do
updateRosterMemberAnnounced :: DB.Connection -> VersionRangeChat -> User -> GroupMember -> GroupMember -> MemberInfo -> GroupMemberStatus -> ExceptT StoreError IO GroupMember
updateRosterMemberAnnounced db vr user@User {userId} invitingMember unknownMember@GroupMember {groupMemberId, memberChatVRange} MemberInfo {v, profile} status = do
_ <- updateMemberProfile db user unknownMember profile
currentTs <- liftIO getCurrentTime
liftIO $