|
|
|
@ -100,7 +100,7 @@ initRoster session = do |
|
|
|
|
|
|
|
|
|
|
|
handleRoster :: Maybe Jid |
|
|
|
handleRoster :: Maybe Jid |
|
|
|
-> TVar Roster |
|
|
|
-> TVar Roster |
|
|
|
-> (QueryItem -> IO ()) |
|
|
|
-> RosterPushCallback |
|
|
|
-> StanzaHandler |
|
|
|
-> StanzaHandler |
|
|
|
handleRoster mbBoundJid ref onUpdate out sta _ = do |
|
|
|
handleRoster mbBoundJid ref onUpdate out sta _ = do |
|
|
|
case sta of |
|
|
|
case sta of |
|
|
|
@ -123,7 +123,6 @@ handleRoster mbBoundJid ref onUpdate out sta _ = do |
|
|
|
, queryItems = [update] |
|
|
|
, queryItems = [update] |
|
|
|
} -> do |
|
|
|
} -> do |
|
|
|
handleUpdate v update |
|
|
|
handleUpdate v update |
|
|
|
onUpdate update |
|
|
|
|
|
|
|
_ <- out . XmppStanza $ result iqr |
|
|
|
_ <- out . XmppStanza $ result iqr |
|
|
|
return [] |
|
|
|
return [] |
|
|
|
_ -> do |
|
|
|
_ -> do |
|
|
|
@ -134,10 +133,19 @@ handleRoster mbBoundJid ref onUpdate out sta _ = do |
|
|
|
else return [(sta, [])] |
|
|
|
else return [(sta, [])] |
|
|
|
_ -> return [(sta, [])] |
|
|
|
_ -> return [(sta, [])] |
|
|
|
where |
|
|
|
where |
|
|
|
handleUpdate v' update = atomically $ modifyTVar ref $ \(Roster v is) -> |
|
|
|
handleUpdate v' update = |
|
|
|
Roster (v' `mplus` v) $ case qiSubscription update of |
|
|
|
case qiSubscription update of |
|
|
|
Just Remove -> Map.delete (qiJid update) is |
|
|
|
Just Remove -> do |
|
|
|
_ -> Map.insert (qiJid update) (toItem update) is |
|
|
|
let j = qiJid update |
|
|
|
|
|
|
|
onUpdate $ RosterUpdateRemove j |
|
|
|
|
|
|
|
updateRoster (Map.delete j) |
|
|
|
|
|
|
|
_ -> do |
|
|
|
|
|
|
|
let i = (toItem update) |
|
|
|
|
|
|
|
onUpdate $ RosterUpdateAdd i |
|
|
|
|
|
|
|
updateRoster $ Map.insert (qiJid update) i |
|
|
|
|
|
|
|
where |
|
|
|
|
|
|
|
updateRoster f = atomically . modifyTVar ref $ |
|
|
|
|
|
|
|
\(Roster v is) -> Roster (v' `mplus` v) (f is) |
|
|
|
|
|
|
|
|
|
|
|
badRequest (IQRequest iqid from _to lang _tp bd _attrs) = |
|
|
|
badRequest (IQRequest iqid from _to lang _tp bd _attrs) = |
|
|
|
IQErrorS $ IQError iqid Nothing from lang errBR (Just bd) [] |
|
|
|
IQErrorS $ IQError iqid Nothing from lang errBR (Just bd) [] |
|
|
|
|