refactor closure (#177)
This commit is contained in:
parent
1bfa7f1104
commit
44845ad563
@ -253,29 +253,27 @@ processChatCommand user@User {userId, profile} = \case
|
|||||||
AddMember gName cName memRole -> do
|
AddMember gName cName memRole -> do
|
||||||
(group, contact) <- withStore $ \st -> (,) <$> getGroup st user gName <*> getContact st userId cName
|
(group, contact) <- withStore $ \st -> (,) <$> getGroup st user gName <*> getContact st userId cName
|
||||||
let Group {groupId, groupProfile, membership, members} = group
|
let Group {groupId, groupProfile, membership, members} = group
|
||||||
userRole = memberRole membership
|
GroupMember {memberRole = userRole, memberId = userMemberId} = membership
|
||||||
userMemberId = memberId membership
|
|
||||||
when (userRole < GRAdmin || userRole < memRole) $ chatError CEGroupUserRole
|
when (userRole < GRAdmin || userRole < memRole) $ chatError CEGroupUserRole
|
||||||
when (memberStatus membership == GSMemInvited) $ chatError (CEGroupNotJoined gName)
|
when (memberStatus membership == GSMemInvited) $ chatError (CEGroupNotJoined gName)
|
||||||
unless (memberActive membership) $ chatError CEGroupMemberNotActive
|
unless (memberActive membership) $ chatError CEGroupMemberNotActive
|
||||||
|
let sendInvitation memberId cReq = do
|
||||||
|
sendDirectMessage (contactConn contact) $
|
||||||
|
XGrpInv $ GroupInvitation (userMemberId, userRole) (memberId, memRole) cReq groupProfile
|
||||||
|
showSentGroupInvitation gName cName
|
||||||
|
setActive $ ActiveG gName
|
||||||
case contactMember contact members of
|
case contactMember contact members of
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
gVar <- asks idsDrg
|
gVar <- asks idsDrg
|
||||||
(agentConnId, cReq) <- withAgent (`createConnection` SCMInvitation)
|
(agentConnId, cReq) <- withAgent (`createConnection` SCMInvitation)
|
||||||
GroupMember {memberId} <- withStore $ \st -> createContactGroupMemberWithInvitation st gVar user groupId contact memRole agentConnId cReq
|
GroupMember {memberId} <- withStore $ \st -> createContactMember st gVar user groupId contact memRole agentConnId cReq
|
||||||
sendInvitation contact userMemberId userRole memberId groupProfile cReq
|
sendInvitation memberId cReq
|
||||||
Just GroupMember {groupMemberId, memberId, memberStatus}
|
Just GroupMember {groupMemberId, memberId, memberStatus}
|
||||||
| memberStatus == GSMemInvited ->
|
| memberStatus == GSMemInvited ->
|
||||||
withStore (\st -> getContactGroupMemberInvitation st user groupMemberId) >>= \case
|
withStore (\st -> getMemberInvitation st user groupMemberId) >>= \case
|
||||||
Just cReq -> sendInvitation contact userMemberId userRole memberId groupProfile cReq
|
Just cReq -> sendInvitation memberId cReq
|
||||||
Nothing -> showCannotResendInvitation gName cName
|
Nothing -> showCannotResendInvitation gName cName
|
||||||
| otherwise -> chatError (CEGroupDuplicateMember cName)
|
| otherwise -> chatError (CEGroupDuplicateMember cName)
|
||||||
where
|
|
||||||
sendInvitation contact userMemberId userRole memberId groupProfile cReq = do
|
|
||||||
let msg = XGrpInv $ GroupInvitation (userMemberId, userRole) (memberId, memRole) cReq groupProfile
|
|
||||||
sendDirectMessage (contactConn contact) msg
|
|
||||||
showSentGroupInvitation gName cName
|
|
||||||
setActive $ ActiveG gName
|
|
||||||
JoinGroup gName -> do
|
JoinGroup gName -> do
|
||||||
ReceivedGroupInvitation {fromMember, userMember, connRequest} <- withStore $ \st -> getGroupInvitation st user gName
|
ReceivedGroupInvitation {fromMember, userMember, connRequest} <- withStore $ \st -> getGroupInvitation st user gName
|
||||||
agentConnId <- withAgent $ \a -> joinConnection a connRequest . directMessage . XGrpAcpt $ memberId userMember
|
agentConnId <- withAgent $ \a -> joinConnection a connRequest . directMessage . XGrpAcpt $ memberId userMember
|
||||||
|
@ -51,8 +51,8 @@ module Simplex.Chat.Store
|
|||||||
getUserGroups,
|
getUserGroups,
|
||||||
getUserGroupDetails,
|
getUserGroupDetails,
|
||||||
getGroupInvitation,
|
getGroupInvitation,
|
||||||
createContactGroupMemberWithInvitation,
|
createContactMember,
|
||||||
getContactGroupMemberInvitation,
|
getMemberInvitation,
|
||||||
createMemberConnection,
|
createMemberConnection,
|
||||||
updateGroupMemberStatus,
|
updateGroupMemberStatus,
|
||||||
createNewGroupMember,
|
createNewGroupMember,
|
||||||
@ -1031,16 +1031,16 @@ toGroupMember userContactId (groupMemberId, groupId, memberId, memberRole, membe
|
|||||||
activeConn = Nothing
|
activeConn = Nothing
|
||||||
in GroupMember {..}
|
in GroupMember {..}
|
||||||
|
|
||||||
createContactGroupMemberWithInvitation :: StoreMonad m => SQLiteStore -> TVar ChaChaDRG -> User -> Int64 -> Contact -> GroupMemberRole -> ConnId -> ConnReqInvitation -> m GroupMember
|
createContactMember :: StoreMonad m => SQLiteStore -> TVar ChaChaDRG -> User -> Int64 -> Contact -> GroupMemberRole -> ConnId -> ConnReqInvitation -> m GroupMember
|
||||||
createContactGroupMemberWithInvitation st gVar user groupId contact memberRole agentConnId connRequest =
|
createContactMember st gVar user groupId contact memberRole agentConnId connRequest =
|
||||||
liftIOEither . withTransaction st $ \db ->
|
liftIOEither . withTransaction st $ \db ->
|
||||||
createWithRandomId gVar $ \memId -> do
|
createWithRandomId gVar $ \memId -> do
|
||||||
member@GroupMember {groupMemberId} <- createContactMemberWithInvitation_ db user groupId contact (memId, memberRole) GCInviteeMember GSMemInvited IBUser (Just connRequest)
|
member@GroupMember {groupMemberId} <- createContactMemberInv_ db user groupId contact (memId, memberRole) GCInviteeMember GSMemInvited IBUser (Just connRequest)
|
||||||
void $ createMemberConnection_ db (userId user) groupMemberId agentConnId Nothing 0
|
void $ createMemberConnection_ db (userId user) groupMemberId agentConnId Nothing 0
|
||||||
pure member
|
pure member
|
||||||
|
|
||||||
getContactGroupMemberInvitation :: StoreMonad m => SQLiteStore -> User -> Int64 -> m (Maybe ConnReqInvitation)
|
getMemberInvitation :: StoreMonad m => SQLiteStore -> User -> Int64 -> m (Maybe ConnReqInvitation)
|
||||||
getContactGroupMemberInvitation st User {userId} groupMemberId =
|
getMemberInvitation st User {userId} groupMemberId =
|
||||||
liftIO . withTransaction st $ \db ->
|
liftIO . withTransaction st $ \db ->
|
||||||
join . listToMaybe . map fromOnly
|
join . listToMaybe . map fromOnly
|
||||||
<$> DB.query db "SELECT inv_queue_info FROM group_members WHERE group_member_id = ? AND user_id = ?;" (groupMemberId, userId)
|
<$> DB.query db "SELECT inv_queue_info FROM group_members WHERE group_member_id = ? AND user_id = ?;" (groupMemberId, userId)
|
||||||
@ -1271,10 +1271,10 @@ createMemberConnection_ db userId groupMemberId = createConnection_ db userId Co
|
|||||||
|
|
||||||
createContactMember_ :: IsContact a => DB.Connection -> User -> Int64 -> a -> (MemberId, GroupMemberRole) -> GroupMemberCategory -> GroupMemberStatus -> InvitedBy -> IO GroupMember
|
createContactMember_ :: IsContact a => DB.Connection -> User -> Int64 -> a -> (MemberId, GroupMemberRole) -> GroupMemberCategory -> GroupMemberStatus -> InvitedBy -> IO GroupMember
|
||||||
createContactMember_ db user groupId userOrContact (memberId, memberRole) memberCategory memberStatus invitedBy =
|
createContactMember_ db user groupId userOrContact (memberId, memberRole) memberCategory memberStatus invitedBy =
|
||||||
createContactMemberWithInvitation_ db user groupId userOrContact (memberId, memberRole) memberCategory memberStatus invitedBy Nothing
|
createContactMemberInv_ db user groupId userOrContact (memberId, memberRole) memberCategory memberStatus invitedBy Nothing
|
||||||
|
|
||||||
createContactMemberWithInvitation_ :: IsContact a => DB.Connection -> User -> Int64 -> a -> (MemberId, GroupMemberRole) -> GroupMemberCategory -> GroupMemberStatus -> InvitedBy -> Maybe ConnReqInvitation -> IO GroupMember
|
createContactMemberInv_ :: IsContact a => DB.Connection -> User -> Int64 -> a -> (MemberId, GroupMemberRole) -> GroupMemberCategory -> GroupMemberStatus -> InvitedBy -> Maybe ConnReqInvitation -> IO GroupMember
|
||||||
createContactMemberWithInvitation_ db User {userId, userContactId} groupId userOrContact (memberId, memberRole) memberCategory memberStatus invitedBy connRequest = do
|
createContactMemberInv_ db User {userId, userContactId} groupId userOrContact (memberId, memberRole) memberCategory memberStatus invitedBy connRequest = do
|
||||||
insertMember_
|
insertMember_
|
||||||
groupMemberId <- insertedRowId db
|
groupMemberId <- insertedRowId db
|
||||||
let memberProfile = profile' userOrContact
|
let memberProfile = profile' userOrContact
|
||||||
|
Loading…
Reference in New Issue
Block a user