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