module Network.XMPP.Roster (
RosterItem(..),
Subscription(..),
getRoster
) where
import Network.XMPP
data RosterItem = RosterItem
{ itemName :: String
, itemJid :: String
, itemSubscription :: Subscription
, itemGroups :: [String]
} deriving Show
data Subscription = SBoth | SFrom | STo | SNone | SUnknown
deriving Show
getRoster :: XMPP [RosterItem]
getRoster = do
stanza <- sendIqWait "" "get" [XML "query" [("xmlns", "jabber:iq:roster")] []]
let items = xmlPath' ["query", "item"] [stanza]
return $ map getItem items
where
getItem item =
let getAttr' attr = maybe "" id $ getAttr attr item
name = getAttr' "name"
jid = getAttr' "jid"
groups = map cdata $ xmlPath' ["group"] [item]
subs = case getAttr' "subscription" of
"to" -> STo
"from" -> SFrom
"both" -> SBoth
"none" -> SNone
_ -> SUnknown
in RosterItem name jid subs groups