module Skype.Entry where
import Data.DateTime
import Data.List as DL
import Data.Word
import Data.ByteString
import Data.ByteString.UTF8 as U
data SkypeEntry = SEntry {
recSize :: Word32,
sessionId :: ByteString,
timeStamp :: DateTime,
senderId :: ByteString,
members :: [ByteString],
message :: ByteString,
records :: [RawRecord]
} | IncompleteEntry { parseErrorMsg :: String } deriving Show
instance Eq (SkypeEntry) where
a == b = sessionId a == sessionId b &&
timeStamp a == timeStamp b &&
senderId a == senderId b
instance Ord (SkypeEntry) where
a `compare` b | timeStamp a < timeStamp b = LT
| timeStamp a > timeStamp b = GT
| otherwise = EQ
data RawRecord = IRecord {
recType :: RecordType,
intVal :: Word64 } |
TRecord { recType :: RecordType,
txtVal :: ByteString } |
BRecord { recType :: RecordType,
blobVal :: ByteString,
bRecSize :: Int} |
URecord { recType :: RecordType,
content :: ByteString }
instance Show RawRecord where
show (IRecord rType val) = "I : " ++ show rType ++ " : " ++ show val
show (TRecord rType val) = "T : " ++ show rType ++ " : " ++ show val
show (BRecord rType _ _) = "B : " ++ show rType
show (URecord rType _) = "U : " ++ show rType
data RecordType =
VoicemailFile |
Call |
Summary |
Language |
Country |
City |
File |
Peek |
Email |
URL |
Description |
Phone |
Type |
User |
Session |
Members |
Name |
Sender |
Recipient |
Message |
Member |
Number |
Screenname |
Fullname |
LogBy |
MsgId |
Date |
Unknown { code :: Word64 } deriving (Show)
defaultTime = fromGregorian' 1970 1 1
makeSEntry :: SkypeEntry
makeSEntry = SEntry 0 empty defaultTime empty [] empty []
data SkypeChat = SChat {
userL, userR :: ByteString,
messages :: [SkypeEntry]
}
instance Show SkypeChat where
show s = U.toString (userL s) ++ " : " ++ U.toString ( userR s ) ++ " (" ++ show ( DL.length (messages s) ) ++ ")"