{-# LANGUAGE OverloadedStrings #-} module MUC where import Control.Concurrent.STM import Control.Exception import Control.Monad.Reader import Data.Default import qualified Data.Map.Strict as MS import Data.Maybe import qualified Data.Text as T import Network.Xmpp.Extras.MUC import Network.Xmpp.Internal hiding (priority, status) import Config import Log import Types addMUC :: Jid -> String -> Hate () addMUC jid nick = do initLog jid s <- ask liftIO $ atomically $ do ms <- readTVar $ mucs s writeTVar (mucs s) $ MS.insert jid (MUC nick) ms rejoinMUCs :: Hate () rejoinMUCs = do ms <- readVarH (readTVarIO . mucs) se <- readVarH (readTVarIO . sess) liftIO $ sequence_ $ map (\(barejid, (MUC nick)) -> do let (localp, domainp, _) = jidToTexts barejid let jid = (\x -> assert (isJust x) (fromJust x)) $ jidFromTexts localp domainp (Just $ T.pack nick) joinMUC jid (Just $ def { mhrSeconds = Just 200 }) se return () ) $ MS.toList ms -- TODO clear idea about how much of the history to request