diff --git a/Assistant/NetMessager.hs b/Assistant/NetMessager.hs index 2e786717d5..7c996bb098 100644 --- a/Assistant/NetMessager.hs +++ b/Assistant/NetMessager.hs @@ -32,8 +32,8 @@ notifyNetMessagerRestart = waitNetMessagerRestart :: Assistant () waitNetMessagerRestart = readSV <<~ (netMessagerRestart . netMessager) -{- Store an important NetMessage for a client, and if the same message was - - already sent, remove it from sentImportantNetMessages. -} +{- Store an important NetMessage for a client, and if an equivilant + - message was already sent, remove it from sentImportantNetMessages. -} storeImportantNetMessage :: NetMessage -> ClientID -> (ClientID -> Bool) -> Assistant () storeImportantNetMessage m client matchingclient = go <<~ netMessager where @@ -45,7 +45,7 @@ storeImportantNetMessage m client matchingclient = go <<~ netMessager putTMVar (sentImportantNetMessages nm) $ M.mapWithKey removematching sent removematching someclient s - | matchingclient someclient = S.delete m s + | matchingclient someclient = S.filter (not . equivilantImportantNetMessages m) s | otherwise = s {- Indicates that an important NetMessage has been sent to a client. -} diff --git a/Assistant/Types/NetMessager.hs b/Assistant/Types/NetMessager.hs index 4b4e614a2b..0af262e9a2 100644 --- a/Assistant/Types/NetMessager.hs +++ b/Assistant/Types/NetMessager.hs @@ -64,6 +64,14 @@ isImportantNetMessage (Pushing c (CanPush _ _)) = Just c isImportantNetMessage (Pushing c (PushRequest _)) = Just c isImportantNetMessage _ = Nothing +{- Checks if two important NetMessages are equivilant. + - That is to say, assuming they were sent to the same client, + - would it do the same thing for one as for the other? -} +equivilantImportantNetMessages :: NetMessage -> NetMessage -> Bool +equivilantImportantNetMessages (Pushing _ (CanPush _ _)) (Pushing _ (CanPush _ _)) = True +equivilantImportantNetMessages (Pushing _ (PushRequest _)) (Pushing _ (PushRequest _)) = True +equivilantImportantNetMessages _ _ = False + readdressNetMessage :: NetMessage -> ClientID -> NetMessage readdressNetMessage (PairingNotification stage _ uuid) c = PairingNotification stage c uuid readdressNetMessage (Pushing _ stage) c = Pushing c stage