core: don't save introduction links (#6341)

This commit is contained in:
spaced4ndy
2025-10-07 07:16:56 +00:00
committed by GitHub
parent 3d8bbaf03b
commit d9b38317fb
4 changed files with 16 additions and 73 deletions
+6 -3
View File
@@ -2632,14 +2632,17 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage =
withStore' (\db -> runExceptT $ getGroupMemberByMemberId db vr user gInfo memId) >>= \case
Left _ -> messageError "x.grp.mem.inv error: referenced member does not exist"
Right reMember -> do
GroupMemberIntro {introId} <- withStore $ \db -> saveIntroInvitation db reMember m introInv
introId <- withStore $ \db -> do
GroupMemberIntro {introId} <- getIntroduction db reMember m
liftIO $ updateIntroStatus db introId GMIntroInvReceived
pure introId
sendGroupMemberMessage gInfo reMember (XGrpMemFwd (memberInfo m) introInv) (Just introId) $
withStore' $
\db -> updateIntroStatus db introId GMIntroInvForwarded
_ -> messageError "x.grp.mem.inv can be only sent by invitee member"
xGrpMemFwd :: GroupInfo -> GroupMember -> MemberInfo -> IntroInvitation -> CM ()
xGrpMemFwd gInfo@GroupInfo {membership, chatSettings} m memInfo@(MemberInfo memId memRole memChatVRange _) introInv@IntroInvitation {groupConnReq, directConnReq} = do
xGrpMemFwd gInfo@GroupInfo {membership, chatSettings} m memInfo@(MemberInfo memId memRole memChatVRange _) IntroInvitation {groupConnReq, directConnReq} = do
let GroupMember {memberId = membershipMemId} = membership
checkHostRole m memRole
toMember <-
@@ -2654,7 +2657,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage =
-- TODO add GSMemIntroInvitedPending, GSMemConnectedPending, etc.?
-- TODO keep as is? (GSMemIntroInvited has no purpose)
let newMemberStatus = if memberPending toMember then memberStatus toMember else GSMemIntroInvited
withStore' $ \db -> saveMemberInvitation db toMember introInv newMemberStatus
withStore' $ \db -> updateGroupMemberStatus db userId toMember newMemberStatus
subMode <- chatReadVar subscriptionMode
-- [incognito] send membership incognito profile, create direct connection as incognito
let membershipProfile = redactedMemberProfile $ fromLocalProfile $ memberProfile membership
+8 -45
View File
@@ -98,7 +98,6 @@ module Simplex.Chat.Store.Groups
updateGroupMemberRole,
createIntroductions,
updateIntroStatus,
saveIntroInvitation,
getIntroduction,
getIntroducedGroupMemberIds,
getForwardIntroducedMembers,
@@ -108,7 +107,6 @@ module Simplex.Chat.Store.Groups
getForwardScopeMember,
createIntroReMember,
createIntroToMemberContact,
saveMemberInvitation,
getMatchingContacts,
getMatchingMembers,
getMatchingMemberContacts,
@@ -1542,7 +1540,7 @@ createIntroductions db chatV members toMember = do
|]
(groupMemberId' reMember, groupMemberId' toMember, GMIntroPending, chatV, ts, ts)
introId <- insertedRowId db
pure $ Just GroupMemberIntro {introId, reMember, toMember, introStatus = GMIntroPending, introInvitation = Nothing}
pure $ Just GroupMemberIntro {introId, reMember, toMember, introStatus = GMIntroPending}
where
checkInverseIntro :: IO (Maybe Int64)
checkInverseIntro =
@@ -1564,56 +1562,21 @@ updateIntroStatus db introId introStatus = do
|]
(introStatus, currentTs, introId)
saveIntroInvitation :: DB.Connection -> GroupMember -> GroupMember -> IntroInvitation -> ExceptT StoreError IO GroupMemberIntro
saveIntroInvitation db reMember toMember introInv@IntroInvitation {groupConnReq} = do
intro <- getIntroduction db reMember toMember
liftIO $ do
currentTs <- getCurrentTime
DB.execute
db
[sql|
UPDATE group_member_intros
SET intro_status = ?,
group_queue_info = ?,
direct_queue_info = ?,
updated_at = ?
WHERE group_member_intro_id = ?
|]
(GMIntroInvReceived, groupConnReq, directConnReq introInv, currentTs, introId intro)
pure intro {introInvitation = Just introInv, introStatus = GMIntroInvReceived}
saveMemberInvitation :: DB.Connection -> GroupMember -> IntroInvitation -> GroupMemberStatus -> IO ()
saveMemberInvitation db GroupMember {groupMemberId} IntroInvitation {groupConnReq, directConnReq} newMemberStatus = do
currentTs <- getCurrentTime
DB.execute
db
[sql|
UPDATE group_members
SET member_status = ?,
group_queue_info = ?,
direct_queue_info = ?,
updated_at = ?
WHERE group_member_id = ?
|]
(newMemberStatus, groupConnReq, directConnReq, currentTs, groupMemberId)
getIntroduction :: DB.Connection -> GroupMember -> GroupMember -> ExceptT StoreError IO GroupMemberIntro
getIntroduction db reMember toMember = ExceptT $ do
toIntro
<$> DB.query
getIntroduction db reMember toMember = ExceptT $
firstRow toIntro SEIntroNotFound $
DB.query
db
[sql|
SELECT group_member_intro_id, group_queue_info, direct_queue_info, intro_status
SELECT group_member_intro_id, intro_status
FROM group_member_intros
WHERE re_group_member_id = ? AND to_group_member_id = ?
|]
(groupMemberId' reMember, groupMemberId' toMember)
where
toIntro :: [(Int64, Maybe ConnReqInvitation, Maybe ConnReqInvitation, GroupMemberIntroStatus)] -> Either StoreError GroupMemberIntro
toIntro [(introId, groupConnReq, directConnReq, introStatus)] =
let introInvitation = IntroInvitation <$> groupConnReq <*> pure directConnReq
in Right GroupMemberIntro {introId, reMember, toMember, introStatus, introInvitation}
toIntro _ = Left SEIntroNotFound
toIntro :: (Int64, GroupMemberIntroStatus) -> GroupMemberIntro
toIntro (introId, introStatus) =
GroupMemberIntro {introId, reMember, toMember, introStatus}
getIntroducedGroupMemberIds :: DB.Connection -> GroupMember -> IO [GroupMemberId]
getIntroducedGroupMemberIds db invitee =
@@ -3514,7 +3514,7 @@ Plan:
SEARCH chat_item_reactions USING INDEX idx_chat_item_reactions_group (group_id=? AND shared_msg_id=?)
Query:
SELECT group_member_intro_id, group_queue_info, direct_queue_info, intro_status
SELECT group_member_intro_id, intro_status
FROM group_member_intros
WHERE re_group_member_id = ? AND to_group_member_id = ?
@@ -3809,17 +3809,6 @@ SEARCH connections USING INDEX idx_connections_group_member_id (group_member_id=
LIST SUBQUERY 1
SCAN group_members USING COVERING INDEX idx_group_members_user_id_local_display_name
Query:
UPDATE group_member_intros
SET intro_status = ?,
group_queue_info = ?,
direct_queue_info = ?,
updated_at = ?
WHERE group_member_intro_id = ?
Plan:
SEARCH group_member_intros USING INTEGER PRIMARY KEY (rowid=?)
Query:
UPDATE group_member_intros SET intro_status='fwd'
WHERE re_group_member_id IN (SELECT group_member_id FROM group_members WHERE local_display_name = ?)
@@ -4798,17 +4787,6 @@ Query:
Plan:
SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?)
Query:
UPDATE group_members
SET member_status = ?,
group_queue_info = ?,
direct_queue_info = ?,
updated_at = ?
WHERE group_member_id = ?
Plan:
SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?)
Query:
UPDATE group_members
SET member_status = ?, member_role = ?, updated_at = ?
+1 -2
View File
@@ -1764,8 +1764,7 @@ data GroupMemberIntro = GroupMemberIntro
{ introId :: Int64,
reMember :: GroupMember,
toMember :: GroupMember,
introStatus :: GroupMemberIntroStatus,
introInvitation :: Maybe IntroInvitation
introStatus :: GroupMemberIntroStatus
}
deriving (Show)