diff options
Diffstat (limited to 'Presence/main.hs')
-rw-r--r-- | Presence/main.hs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/Presence/main.hs b/Presence/main.hs index 45b8729a..f0dfc9bd 100644 --- a/Presence/main.hs +++ b/Presence/main.hs | |||
@@ -434,7 +434,11 @@ instance JabberPeerSession PeerSession where | |||
434 | me <- fmap (RemotePeer . withoutPort) (getPeerName sock) | 434 | me <- fmap (RemotePeer . withoutPort) (getPeerName sock) |
435 | debugL $ "PEER SESSION: open "<++>showPeer me | 435 | debugL $ "PEER SESSION: open "<++>showPeer me |
436 | let remotes = remoteUsers state | 436 | let remotes = remoteUsers state |
437 | jids <- atomically $ getRefFromMap remotes me (newTVar MM.empty) return | 437 | (jids,us) <- atomically $ do |
438 | jids <- getRefFromMap remotes me (newTVar MM.empty) return | ||
439 | us <- readTVar (activeUsers state) | ||
440 | return (jids,map tupleToJID . Set.toList . Map.keysSet $ us) | ||
441 | forM_ us $ sendProbes state (Just me) | ||
438 | return $ PeerSession jids me state | 442 | return $ PeerSession jids me state |
439 | 443 | ||
440 | closePeerSession session = do | 444 | closePeerSession session = do |
@@ -710,7 +714,7 @@ update_presence locals_greedy subscribers state getStatus = | |||
710 | sendPresence chan jid status | 714 | sendPresence chan jid status |
711 | debugL $ bshow jid <++> " " <++> bshow status | 715 | debugL $ bshow jid <++> " " <++> bshow status |
712 | 716 | ||
713 | sendProbes state jid = do | 717 | sendProbes state mbpeer jid = do |
714 | debugL $ "sending probes for " <++> bshow jid | 718 | debugL $ "sending probes for " <++> bshow jid |
715 | withJust (name jid) $ \user -> do | 719 | withJust (name jid) $ \user -> do |
716 | let parseHostNameJID' str = do | 720 | let parseHostNameJID' str = do |
@@ -718,7 +722,10 @@ sendProbes state jid = do | |||
718 | (fmap Just . parseHostNameJID $ str) | 722 | (fmap Just . parseHostNameJID $ str) |
719 | buddies <- do | 723 | buddies <- do |
720 | buddies <- ConfigFiles.getBuddies user | 724 | buddies <- ConfigFiles.getBuddies user |
721 | fmap catMaybes (mapM parseHostNameJID' buddies) | 725 | buddies' <- fmap catMaybes (mapM parseHostNameJID' buddies) |
726 | case mbpeer of | ||
727 | Nothing -> return buddies' | ||
728 | Just p -> return (filter (\jid-> peer jid == p) buddies') | ||
722 | debugL $ "buddies for " <++> bshow jid <++> " = " <++> bshow buddies | 729 | debugL $ "buddies for " <++> bshow jid <++> " = " <++> bshow buddies |
723 | wanted <- do | 730 | wanted <- do |
724 | wanted <- ConfigFiles.getSolicited user | 731 | wanted <- ConfigFiles.getSolicited user |
@@ -762,7 +769,7 @@ track_login host state e = do | |||
762 | update_presence locals_greedy subs departures $ const Offline | 769 | update_presence locals_greedy subs departures $ const Offline |
763 | update_presence locals_greedy subs arrivals $ matchResource active_users tty | 770 | update_presence locals_greedy subs arrivals $ matchResource active_users tty |
764 | forM_ arrivals | 771 | forM_ arrivals |
765 | $ sendProbes state | 772 | $ sendProbes state Nothing |
766 | 773 | ||
767 | on_chvt state vtnum = do | 774 | on_chvt state vtnum = do |
768 | let tty = L.snoc "tty" $ intToDigit (fromIntegral vtnum) | 775 | let tty = L.snoc "tty" $ intToDigit (fromIntegral vtnum) |