Browse Source

Merge branch 'master' of github.com:pontarius/pontarius-xmpp

master
Jon Kristensen 13 years ago
parent
commit
b891ea321b
  1. 9
      source/Network/Xmpp/IM/Message.hs
  2. 13
      source/Network/Xmpp/IM/Presence.hs
  3. 12
      source/Network/Xmpp/Marshal.hs

9
source/Network/Xmpp/IM/Message.hs

@ -3,14 +3,14 @@
module Network.Xmpp.IM.Message where module Network.Xmpp.IM.Message where
import Data.Default
import Data.Function
import Data.List
import Data.Text (Text) import Data.Text (Text)
import Data.XML.Pickle import Data.XML.Pickle
import Data.XML.Types import Data.XML.Types
import Network.Xmpp.Marshal import Network.Xmpp.Marshal
import Network.Xmpp.Types import Network.Xmpp.Types
import Data.List
import Data.Function
data MessageBody = MessageBody { bodyLang :: Maybe LangTag data MessageBody = MessageBody { bodyLang :: Maybe LangTag
, bodyContent :: Text , bodyContent :: Text
@ -36,6 +36,9 @@ instantMessage = InstantMessage { imThread = Nothing
, imBody = [] , imBody = []
} }
instance Default InstantMessage where
def = instantMessage
-- | Get the IM specific parts of a message. Returns 'Nothing' when the received -- | Get the IM specific parts of a message. Returns 'Nothing' when the received
-- payload is not valid IM data. -- payload is not valid IM data.
getIM :: Message -> Maybe InstantMessage getIM :: Message -> Maybe InstantMessage

13
source/Network/Xmpp/IM/Presence.hs

@ -4,10 +4,11 @@
module Network.Xmpp.IM.Presence where module Network.Xmpp.IM.Presence where
import Data.Text (Text) import Data.Default
import Data.XML.Pickle import Data.Text (Text)
import Data.XML.Types import Data.XML.Pickle
import Network.Xmpp.Types import Data.XML.Types
import Network.Xmpp.Types
data ShowStatus = StatusAway data ShowStatus = StatusAway
| StatusChat | StatusChat
@ -38,7 +39,11 @@ imPresence = IMP { showStatus = Nothing
, priority = Nothing , priority = Nothing
} }
instance Default IMPresence where
def = imPresence
-- | Try to extract RFC6121 IM presence information from presence stanza
-- Returns Nothing when the data is malformed, (Just IMPresence) otherwise
getIMPresence :: Presence -> Maybe IMPresence getIMPresence :: Presence -> Maybe IMPresence
getIMPresence pres = case unpickle xpIMPresence (presencePayload pres) of getIMPresence pres = case unpickle xpIMPresence (presencePayload pres) of
Left _ -> Nothing Left _ -> Nothing

12
source/Network/Xmpp/Marshal.hs

@ -23,10 +23,10 @@ xpStanza = ("xpStanza" , "") <?+> xpAlt stanzaSel
[ xpWrap IQRequestS (\(IQRequestS x) -> x) xpIQRequest [ xpWrap IQRequestS (\(IQRequestS x) -> x) xpIQRequest
, xpWrap IQResultS (\(IQResultS x) -> x) xpIQResult , xpWrap IQResultS (\(IQResultS x) -> x) xpIQResult
, xpWrap IQErrorS (\(IQErrorS x) -> x) xpIQError , xpWrap IQErrorS (\(IQErrorS x) -> x) xpIQError
, xpWrap MessageS (\(MessageS x) -> x) xpMessage
, xpWrap MessageErrorS (\(MessageErrorS x) -> x) xpMessageError , xpWrap MessageErrorS (\(MessageErrorS x) -> x) xpMessageError
, xpWrap PresenceS (\(PresenceS x) -> x) xpPresence , xpWrap MessageS (\(MessageS x) -> x) xpMessage
, xpWrap PresenceErrorS (\(PresenceErrorS x) -> x) xpPresenceError , xpWrap PresenceErrorS (\(PresenceErrorS x) -> x) xpPresenceError
, xpWrap PresenceS (\(PresenceS x) -> x) xpPresence
] ]
where where
-- Selector for which pickler to execute above. -- Selector for which pickler to execute above.
@ -34,10 +34,10 @@ xpStanza = ("xpStanza" , "") <?+> xpAlt stanzaSel
stanzaSel (IQRequestS _) = 0 stanzaSel (IQRequestS _) = 0
stanzaSel (IQResultS _) = 1 stanzaSel (IQResultS _) = 1
stanzaSel (IQErrorS _) = 2 stanzaSel (IQErrorS _) = 2
stanzaSel (MessageS _) = 3 stanzaSel (MessageErrorS _) = 3
stanzaSel (MessageErrorS _) = 4 stanzaSel (MessageS _) = 4
stanzaSel (PresenceS _) = 5 stanzaSel (PresenceErrorS _) = 5
stanzaSel (PresenceErrorS _) = 6 stanzaSel (PresenceS _) = 6
xpMessage :: PU [Node] (Message) xpMessage :: PU [Node] (Message)
xpMessage = ("xpMessage" , "") <?+> xpWrap xpMessage = ("xpMessage" , "") <?+> xpWrap

Loading…
Cancel
Save