skype4hs-0.0.0.0: src/Network/Skype/Parser/ChatMessage.hs
module Network.Skype.Parser.ChatMessage where
import Control.Applicative
import Data.Attoparsec.ByteString.Lazy
import Network.Skype.Parser.Chat
import Network.Skype.Parser.Types
import Network.Skype.Protocol.ChatMessage
chatMessageProperty :: Parser ChatMessageProperty
chatMessageProperty = choice
[ ChatMessageTimestamp <$> (property "TIMESTAMP" *> timestamp)
, ChatMessageFromHandle <$> (property "FROM_HANDLE" *> userID)
, ChatMessageFromDisplayName <$> (property "FROM_DISPNAME" *> userDisplayName)
, ChatMessageType <$> (property "TYPE" *> chatMessageType)
, ChatMessageStatus <$> (property "STATUS" *> chatMessageStatus)
, ChatMessageLeaveReason <$> (property "LEAVEREASON" *> (Just <$> chatMessageLeaveReason <|> pure Nothing))
, ChatMessageChatName <$> (property "CHATNAME" *> chatID)
, ChatMessageUsers <$> (property "USERS" *> userIDs)
, ChatMessageIsEditable <$> (property "IS_EDITABLE" *> boolean)
, ChatMessageEditedBy <$> (property "EDITED_BY" *> userID)
, ChatMessageEditedTimestamp <$> (property "EDITED_TIMESTAMP" *> timestamp)
, ChatMessageOptions <$> (property "OPTIONS" *> chatOptions)
, ChatMessageRole <$> (property "ROLE" *> chatRole)
, ChatMessageSeen <$ (string "SEEN" *> endOfInput)
, ChatMessageBody <$> (property "BODY" *> chatMessageBody)
]
where
property prop = string prop *> spaces
userIDs = userID `sepBy` spaces
chatMessageType :: Parser ChatMessageType
chatMessageType = choice
[ ChatMessageTypeSetTopic <$ string "SETTOPIC"
, ChatMessageTypeSaid <$ string "SAID"
, ChatMessageTypeAddedMembers <$ string "ADDEDMEMBERS"
, ChatMessageTypeSawMembers <$ string "SAWMEMBERS"
, ChatMessageTypeCreatedChatWith <$ string "CREATEDCHATWITH"
, ChatMessageTypeLeft <$ string "LEFT"
, ChatMessageTypePostedContacts <$ string "POSTEDCONTACTS"
, ChatMessageTypeGapInChat <$ string "GAiN_CHAT"
, ChatMessageTypeSetRole <$ string "SETROLE"
, ChatMessageTypeKicked <$ string "KICKED"
, ChatMessageTypeKickBanned <$ string "KICKBANNED"
, ChatMessageTypeSetOptions <$ string "SETOPTIONS"
, ChatMessageTypeSetPicture <$ string "SETPICTURE"
, ChatMessageTypeSetGuideLines <$ string "SETGUIDELINES"
, ChatMessageTypeJoinedAsApplicant <$ string "JOINEDASAPPLICANT"
, ChatMessageTypeEmoted <$ string "EMOTED"
, ChatMessageTypeUnkown <$ string "UNKNOWN"
]
chatMessageStatus :: Parser ChatMessageStatus
chatMessageStatus = choice
[ ChatMessageStatusSending <$ string "SENDING"
, ChatMessageStatusSent <$ string "SENT"
, ChatMessageStatusReceive <$ string "RECEIVE"
, ChatMessageStatusRead <$ string "READ"
]
chatMessageLeaveReason :: Parser ChatMessageLeaveReason
chatMessageLeaveReason = choice
[ ChatMessageLeaveReasonUserNotFound <$ string "USER_NOT_FOUND"
, ChatMessageLeaveReasonUserIncapable <$ string "USER_INCAPABLE"
, ChatMessageLeaveReasonAdderMustBeFriend <$ string "ADDER_MUST_BE_FRIEND"
, ChatMessageLeaveReasonAdderMustBeAuthorized <$ string "ADDED_MUST_BE_AUTHORIZED"
, ChatMessageLeaveReasonUnsubscribe <$ string "UNSUBSCRIBE"
]