{-# LANGUAGE OverloadedStrings, TypeSynonymInstances, FlexibleInstances, TypeFamilies, FlexibleContexts, CPP #-} module Types where import Control.Concurrent.STM import Control.Monad.EmbedIO import Control.Monad.Reader import Data.Map.Strict as MS import Data.Sequence import Data.Text as Text import Data.Time.Clock import Network.Xmpp import TByteVector type Hate = ReaderT GlobalState IO type Nickname = Text type Msg = Text type LogEntry = (UTCTime, Maybe Nickname, Msg) type Logs = MS.Map Jid Log type MUCs = MS.Map Jid MUC type ChatHandler = LogEntry -> IO () data Log = Log { logEntries :: TVar (Seq LogEntry) , firstUnshownLogIdx :: TVar Int , shownLog :: TByteVector } runHate = runReaderT instance EmbedIO Hate where type Content Hate = GlobalState embed f = ask >>= liftIO . f callback = runHate data ShowSt = SNone | SAway | SChat | SDND | SXA deriving Show data MUC = MUC { nick :: String } deriving Show data GlobalState = GlobalState { server :: TVar String , port :: TVar String , username :: TVar Text , password :: TVar Text , resource :: TVar Text , priority :: TVar String , jiv_name :: TVar String , jiv_os :: TVar String , jiv_version :: TVar String , muc_default_nick :: TVar String , showst :: TVar ShowSt , status :: TVar String , streamManagement :: TVar Bool , permitUnsafeCerts :: TVar Bool , muc_history_request :: TVar Integer , sess :: TVar Session , featureStreamManagement3 :: TVar Bool , logs :: TVar Logs , mucs :: TVar MUCs , chats :: TVar (MS.Map Jid ChatHandler) #ifdef UI_GTK , addMUCToRosterWindow :: TVar (Jid -> IO ()) , addUserToRosterWindow :: TVar (Jid -> IO ()) #endif }