diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-01-19 22:14:06 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-01-21 20:10:17 +0100 |
| commit | db28a29d516f7abdd22f317962426b4924565cd6 (patch) | |
| tree | d9effcd5cf6b483010f14a5a328ca3eccee36a9c /src/Erebos/Invite.hs | |
| parent | c9f23c5db32bca0ec50af845f6caacf31206d24f (diff) | |
Mark accepted invites as confirmed/rejected
Diffstat (limited to 'src/Erebos/Invite.hs')
| -rw-r--r-- | src/Erebos/Invite.hs | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/Erebos/Invite.hs b/src/Erebos/Invite.hs index d2f62fd..546e465 100644 --- a/src/Erebos/Invite.hs +++ b/src/Erebos/Invite.hs @@ -141,9 +141,11 @@ instance Mergeable AcceptedInvite where { acceptedInviteData = aidata , acceptedInviteToken = findPropertyFirst aidToken aidata , acceptedInviteFrom = findPropertyFirst aidFrom aidata - , acceptedInviteConfirmed = not $ null $ findProperty (\aid -> if aidConfirmed aid then Just () else Nothing) aidata - , acceptedInviteRejected = not $ null $ findProperty (\aid -> if aidRejected aid then Just () else Nothing) aidata + , acceptedInviteConfirmed = fromMaybe False $ findPropertyFirst (\aid -> if isStatusChanged aid then Just (aidConfirmed aid) else Nothing) aidata + , acceptedInviteRejected = fromMaybe False $ findPropertyFirst (\aid -> if isStatusChanged aid then Just (aidRejected aid) else Nothing) aidata } + where + isStatusChanged AcceptedInviteData {..} = aidConfirmed || aidRejected || isJust aidToken toComponents = acceptedInviteData instance SharedType (Set AcceptedInvite) where @@ -172,8 +174,11 @@ acceptInvite -> InviteToken -- ^ Invite token -> m () acceptInvite from token = do + prev <- find ((Just token ==) . acceptedInviteToken) + . fromSetBy (comparing acceptedInviteToken) . lookupSharedValue . lsShared . fromStored + <$> getLocalHead accepted <- mergeSorted @AcceptedInvite . (: []) <$> mstore AcceptedInviteData - { aidPrev = [] + { aidPrev = maybe [] acceptedInviteData prev , aidToken = Just token , aidFrom = Just from , aidConfirmed = False @@ -274,12 +279,39 @@ instance Service InviteService where asks (inviteHookReplyInvalid . svcAttributes) >>= ($ token) svcModify $ filter (/= token) + accepted <- fromSetBy (comparing acceptedInviteToken) . lookupSharedValue . lsShared . fromStored <$> getLocalHead + case find ((Just token ==) . acceptedInviteToken) accepted of + Just invite -> do + aidata <- mstore AcceptedInviteData + { aidPrev = acceptedInviteData invite + , aidToken = Nothing + , aidFrom = Nothing + , aidConfirmed = False + , aidRejected = True + } + updateLocalState_ $ updateSharedState_ $ storeSetAdd (mergeSorted @AcceptedInvite [ aidata ]) + Nothing -> return () + ContactInvite token mbName -> do asks (inviteHookReplyContact . svcAttributes) >>= ($ mbName) . ($ token) waitingTokens <- svcGet if token `elem` waitingTokens then do svcSet $ filter (/= token) waitingTokens + + accepted <- fromSetBy (comparing acceptedInviteToken) . lookupSharedValue . lsShared . fromStored <$> getLocalHead + case find ((Just token ==) . acceptedInviteToken) accepted of + Just invite -> do + aidata <- mstore AcceptedInviteData + { aidPrev = acceptedInviteData invite + , aidToken = Nothing + , aidFrom = Nothing + , aidConfirmed = True + , aidRejected = False + } + updateLocalState_ $ updateSharedState_ $ storeSetAdd (mergeSorted @AcceptedInvite [ aidata ]) + Nothing -> return () + identity <- asks svcPeerIdentity cdata <- mstore ContactData { cdPrev = [] |