diff options
Diffstat (limited to 'src/Erebos')
| -rw-r--r-- | src/Erebos/Invite.hs | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/Erebos/Invite.hs b/src/Erebos/Invite.hs index 546e465..f23dbfd 100644 --- a/src/Erebos/Invite.hs +++ b/src/Erebos/Invite.hs @@ -5,6 +5,7 @@ module Erebos.Invite ( InviteData(..), AcceptedInvite(..), AcceptedInviteData(..), + AcceptedInviteStatus(..), InviteToken, showInviteToken, textInviteToken, parseInviteToken, InviteService, InviteServiceAttributes(..), @@ -106,8 +107,7 @@ data AcceptedInvite = AcceptedInvite { acceptedInviteData :: [ Stored AcceptedInviteData ] , acceptedInviteToken :: Maybe InviteToken , acceptedInviteFrom :: Maybe RefDigest - , acceptedInviteConfirmed :: Bool - , acceptedInviteRejected :: Bool + , acceptedInviteStatus :: AcceptedInviteStatus } data AcceptedInviteData = AcceptedInviteData @@ -118,6 +118,11 @@ data AcceptedInviteData = AcceptedInviteData , aidRejected :: Bool } +data AcceptedInviteStatus + = AcceptedInvitePending + | AcceptedInviteRejected + | AcceptedInviteConfirmed + instance Storable AcceptedInviteData where store' AcceptedInviteData {..} = storeRec $ do mapM_ (storeRef "PREV") aidPrev @@ -141,11 +146,13 @@ instance Mergeable AcceptedInvite where { acceptedInviteData = aidata , acceptedInviteToken = findPropertyFirst aidToken aidata , acceptedInviteFrom = findPropertyFirst aidFrom 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 + , acceptedInviteStatus = fromMaybe AcceptedInvitePending $ flip findPropertyFirst aidata $ \case + AcceptedInviteData {..} + | aidConfirmed -> Just AcceptedInviteConfirmed + | aidRejected -> Just AcceptedInviteRejected + | isJust aidToken -> Just AcceptedInvitePending + | otherwise -> Nothing } - where - isStatusChanged AcceptedInviteData {..} = aidConfirmed || aidRejected || isJust aidToken toComponents = acceptedInviteData instance SharedType (Set AcceptedInvite) where @@ -332,8 +339,7 @@ instance Service InviteService where AcceptedInvite { acceptedInviteToken = Just token , acceptedInviteFrom = Just from - , acceptedInviteConfirmed = False - , acceptedInviteRejected = False + , acceptedInviteStatus = AcceptedInvitePending } | from `elem` peerDigests -> do svcModify (token :) replyPacket $ AcceptInvite token @@ -349,8 +355,7 @@ sendAcceptedInvites server aiset = do AcceptedInvite { acceptedInviteToken = Just token , acceptedInviteFrom = Just from - , acceptedInviteConfirmed = False - , acceptedInviteRejected = False + , acceptedInviteStatus = AcceptedInvitePending } -> do let matchPeer peer = do getPeerIdentity peer >>= \case |