skype4hs-0.0.0.0: src/Network/Skype/Parser/User.hs
module Network.Skype.Parser.User where
import Control.Applicative
import Data.Attoparsec.ByteString.Char8 (anyChar, decimal)
import Data.Attoparsec.ByteString.Lazy
import Data.Word8
import Network.Skype.Parser.Types
import Network.Skype.Protocol.User
userProperty :: Parser UserProperty
userProperty = choice
[ UserHandle <$> (property "HANDLE" *> userID)
, UserFullName <$> (property "FULLNAME" *> userFullName)
, UserBirthday <$> (property "BIRTHDAY" *> userBirthday)
, UserSex <$> (property "SEX" *> userSex)
, UserLanguage <$> (property "LANGUAGE" *> userLanguage)
, UserCountry <$> (property "COUNTRY" *> userCountry)
, UserProvince <$> (property "PROVINCE" *> userProvince)
, UserCity <$> (property "CITY" *> userCity)
, UserHomePhone <$> (property "PHONE_HOME" *> userPhone)
, UserOfficePhone <$> (property "PHONE_OFFICE" *> userPhone)
, UserMobilePhone <$> (property "PHONE_MOBILE" *> userPhone)
, UserHomepage <$> (property "HOMEPAGE" *> userHomepage)
, UserAbout <$> (property "ABOUT" *> userAbout)
, UserHasCallEquipment <$> (property "HASCALLEQUIPMENT" *> boolean)
, UserIsVideoCapable <$> (property "IS_VIDEO_CAPABLE" *> boolean)
, UserIsVoicemailCapable <$> (property "IS_VOICEMAIL_CAPABLE" *> boolean)
, UserBuddyStatus <$> (property "BUDDYSTATUS" *> userBuddyStatus)
, UserIsAuthorized <$> (property "ISAUTHORIZED" *> boolean)
, UserIsBlocked <$> (property "ISBLOCKED" *> boolean)
, UserOnlineStatus <$> (property "ONLINESTATUS" *> userOnlineStatus)
, UserLastOnlineTimestamp <$> (property "LASTONLINETIMESTAMP" *> timestamp)
, UserCanLeaveVoicemail <$> (property "CAN_LEAVE_VM" *> boolean)
, UserSpeedDial <$> (property "SPEEDDIAL" *> userSpeedDial)
, UserReceiveAuthRequest <$> (property "RECEIVEDAUTHREQUEST" *> userAuthRequestMessage)
, UserMoodText <$> (property "MOOD_TEXT" *> userMoodText)
, UserRichMoodText <$> (property "RICH_MOOD_TEXT" *> userRichMoodText)
, UserTimezone <$> (property "TIMEZONE" *> userTimezoneOffset)
, UserIsCallForwardingActive <$> (property "IS_CF_ACTIVE" *> boolean)
, UserNumberOfAuthedBuddies <$> (property "NROF_AUTHED_BUDDIES" *> decimal)
, UserDisplayName <$> (property "DISPLAYNAME" *> userDisplayName)
]
where
property prop = string prop *> spaces
userSex :: Parser UserSex
userSex = choice
[ UserSexUnknown <$ string "UNKNOWN"
, UserSexMale <$ string "MALE"
, UserSexFemale <$ string "FEMALE"
]
userStatus :: Parser UserStatus
userStatus = choice
[ UserStatusUnknown <$ string "UNKNOWN"
, UserStatusOnline <$ string "ONLINE"
, UserStatusOffline <$ string "OFFLINE"
, UserStatusSkypeMe <$ string "SKYPEME"
, UserStatusAway <$ string "AWAY"
, UserStatusNotAvailable <$ string "NA"
, UserStatusDoNotDisturb <$ string "DND"
, UserStatusInvisible <$ string "INVISIBLE"
, UserStatusLoggedOut <$ string "LOGGEDOUT"
]
userBuddyStatus :: Parser UserBuddyStatus
userBuddyStatus = choice
[ UserBuddyStatusNeverBeen <$ word8 _0
, UserBuddyStatusDeleted <$ word8 _1
, UserBuddyStatusPending <$ word8 _2
, UserBuddyStatusAdded <$ word8 _3
]
userOnlineStatus :: Parser UserOnlineStatus
userOnlineStatus = choice
[ UserOnlineStatusUnknown <$ string "UNKNOWN"
, UserOnlineStatusOffline <$ string "OFFLINE"
, UserOnlineStatusOnline <$ string "ONLINE"
, UserOnlineStatusAway <$ string "AWAY"
, UserOnlineStatusNotAvailable <$ string "NA"
, UserOnlineStatusDoNotDisturb <$ string "DND"
]
userAvater :: Parser (Int, FilePath)
userAvater = (,) <$> decimal <*> many anyChar