Browse Source

pass JID to onPresenceChange callback

master
Philipp Balzarek 11 years ago
parent
commit
f99bcf0fd1
  1. 10
      source/Network/Xmpp/Concurrent/Types.hs
  2. 4
      source/Network/Xmpp/IM/PresenceTracker.hs

10
source/Network/Xmpp/Concurrent/Types.hs

@ -87,7 +87,15 @@ data SessionConfiguration = SessionConfiguration
, enableRoster :: Bool , enableRoster :: Bool
-- | Track incomming presence stancas. -- | Track incomming presence stancas.
, enablePresenceTracking :: Bool , enablePresenceTracking :: Bool
, onPresenceChange :: Maybe (PeerStatus -> PeerStatus -> IO ()) -- | Callback that is invoked when the presence status of a peer changes,
-- i.e. it comes online, goes offline or its IM presence changes. The
-- arguments are the (full) JID of the peer, the old state and the new
-- state. The function is called in a new thread to avoid blocking
-- handling stanzas
, onPresenceChange :: Maybe ( Jid
-> PeerStatus
-> PeerStatus
-> IO ())
} }
instance Default SessionConfiguration where instance Default SessionConfiguration where

4
source/Network/Xmpp/IM/PresenceTracker.hs

@ -59,7 +59,7 @@ peerMapPeerAvailable :: Jid -> Peers -> Bool
peerMapPeerAvailable j | isFull j = not . nullOf (peerStatusL j . _PeerAvailable) peerMapPeerAvailable j | isFull j = not . nullOf (peerStatusL j . _PeerAvailable)
| otherwise = not . nullOf (_peers . at j . _Just) | otherwise = not . nullOf (_peers . at j . _Just)
handlePresence :: Maybe (PeerStatus -> PeerStatus -> IO ()) handlePresence :: Maybe (Jid -> PeerStatus -> PeerStatus -> IO ())
-> TVar Peers -> TVar Peers
-> StanzaHandler -> StanzaHandler
handlePresence onChange peers _ st _ = do handlePresence onChange peers _ st _ = do
@ -82,7 +82,7 @@ handlePresence onChange peers _ st _ = do
return oldStatus return oldStatus
unless (os == newStatus) $ case onChange of unless (os == newStatus) $ case onChange of
Nothing -> return () Nothing -> return ()
Just oc -> void . forkIO $ oc os newStatus Just oc -> void . forkIO $ oc fr os newStatus
return () return ()
-- | Check whether a given jid is available -- | Check whether a given jid is available

Loading…
Cancel
Save