From 46f9ecdd45af2b7aa4a7ea0333772285a488cb1f Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 22 May 2013 18:43:04 -0500 Subject: [PATCH 1/2] Try error before normal Since the normal message parser will actually match the error parser. Closes #25 --- source/Network/Xmpp/Marshal.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/Network/Xmpp/Marshal.hs b/source/Network/Xmpp/Marshal.hs index 8bfe098..c88eeae 100644 --- a/source/Network/Xmpp/Marshal.hs +++ b/source/Network/Xmpp/Marshal.hs @@ -23,10 +23,10 @@ xpStanza = ("xpStanza" , "") xpAlt stanzaSel [ xpWrap IQRequestS (\(IQRequestS x) -> x) xpIQRequest , xpWrap IQResultS (\(IQResultS x) -> x) xpIQResult , xpWrap IQErrorS (\(IQErrorS x) -> x) xpIQError - , xpWrap MessageS (\(MessageS x) -> x) xpMessage , 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 PresenceS (\(PresenceS x) -> x) xpPresence ] where -- Selector for which pickler to execute above. @@ -34,10 +34,10 @@ xpStanza = ("xpStanza" , "") xpAlt stanzaSel stanzaSel (IQRequestS _) = 0 stanzaSel (IQResultS _) = 1 stanzaSel (IQErrorS _) = 2 - stanzaSel (MessageS _) = 3 - stanzaSel (MessageErrorS _) = 4 - stanzaSel (PresenceS _) = 5 - stanzaSel (PresenceErrorS _) = 6 + stanzaSel (MessageErrorS _) = 3 + stanzaSel (MessageS _) = 4 + stanzaSel (PresenceErrorS _) = 5 + stanzaSel (PresenceS _) = 6 xpMessage :: PU [Node] (Message) xpMessage = ("xpMessage" , "") xpWrap From dd442a4446a453049fbfb2836474bf1b2a0bfa5b Mon Sep 17 00:00:00 2001 From: Philipp Balzarek Date: Fri, 24 May 2013 13:04:46 +0200 Subject: [PATCH 2/2] add Default instance for InstantMessage and IMPresence --- source/Network/Xmpp/IM/Message.hs | 9 ++++++--- source/Network/Xmpp/IM/Presence.hs | 13 +++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/source/Network/Xmpp/IM/Message.hs b/source/Network/Xmpp/IM/Message.hs index f6fdc3a..b141eea 100644 --- a/source/Network/Xmpp/IM/Message.hs +++ b/source/Network/Xmpp/IM/Message.hs @@ -3,14 +3,14 @@ module Network.Xmpp.IM.Message where +import Data.Default +import Data.Function +import Data.List import Data.Text (Text) import Data.XML.Pickle import Data.XML.Types import Network.Xmpp.Marshal import Network.Xmpp.Types -import Data.List -import Data.Function - data MessageBody = MessageBody { bodyLang :: Maybe LangTag , bodyContent :: Text @@ -36,6 +36,9 @@ instantMessage = InstantMessage { imThread = Nothing , imBody = [] } +instance Default InstantMessage where + def = instantMessage + -- | Get the IM specific parts of a message. Returns 'Nothing' when the received -- payload is not valid IM data. getIM :: Message -> Maybe InstantMessage diff --git a/source/Network/Xmpp/IM/Presence.hs b/source/Network/Xmpp/IM/Presence.hs index d5d3750..0f0ba03 100644 --- a/source/Network/Xmpp/IM/Presence.hs +++ b/source/Network/Xmpp/IM/Presence.hs @@ -4,10 +4,11 @@ module Network.Xmpp.IM.Presence where -import Data.Text (Text) -import Data.XML.Pickle -import Data.XML.Types -import Network.Xmpp.Types +import Data.Default +import Data.Text (Text) +import Data.XML.Pickle +import Data.XML.Types +import Network.Xmpp.Types data ShowStatus = StatusAway | StatusChat @@ -38,7 +39,11 @@ imPresence = IMP { showStatus = 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 pres = case unpickle xpIMPresence (presencePayload pres) of Left _ -> Nothing