2014-05-23 02:45:45 +05:30
|
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
|
|
|
|
module Network.IRC.Handlers.NickTracker.Types where
|
|
|
|
|
|
|
|
import ClassyPrelude
|
2014-05-25 01:09:31 +05:30
|
|
|
import Data.Data (Data)
|
|
|
|
import Data.IxSet (IxSet, Indexable (..), ixSet, ixFun)
|
|
|
|
import Data.SafeCopy (base, deriveSafeCopy)
|
2014-05-23 02:45:45 +05:30
|
|
|
|
2014-05-25 14:51:33 +05:30
|
|
|
newtype Nick = Nick Text deriving (Eq, Ord, Show, Data, Typeable, Hashable)
|
2014-05-23 02:45:45 +05:30
|
|
|
newtype CanonicalNick = CanonicalNick Text deriving (Eq, Ord, Show, Data, Typeable)
|
2014-05-25 01:09:31 +05:30
|
|
|
newtype LastSeenOn = LastSeenOn UTCTime deriving (Eq, Ord, Show, Data, Typeable)
|
2014-05-23 02:45:45 +05:30
|
|
|
|
|
|
|
data NickTrack = NickTrack {
|
2014-05-24 23:49:52 +05:30
|
|
|
nick :: !Nick,
|
|
|
|
canonicalNick :: !CanonicalNick,
|
|
|
|
lastSeenOn :: !LastSeenOn,
|
|
|
|
lastMessageOn :: !UTCTime,
|
|
|
|
lastMessage :: !Text
|
2014-05-23 02:45:45 +05:30
|
|
|
} deriving (Eq, Ord, Show, Data, Typeable)
|
|
|
|
|
|
|
|
instance Indexable NickTrack where
|
|
|
|
empty = ixSet [ ixFun $ (: []) . nick
|
|
|
|
, ixFun $ (: []) . canonicalNick
|
|
|
|
, ixFun $ (: []) . lastSeenOn ]
|
|
|
|
|
2014-05-25 01:09:31 +05:30
|
|
|
newtype NickTracking = NickTracking { nickTracking :: IxSet NickTrack }
|
|
|
|
deriving (Eq, Ord, Show, Data, Typeable)
|
|
|
|
|
2014-05-23 02:45:45 +05:30
|
|
|
$(deriveSafeCopy 0 'base ''Nick)
|
|
|
|
$(deriveSafeCopy 0 'base ''CanonicalNick)
|
|
|
|
$(deriveSafeCopy 0 'base ''LastSeenOn)
|
|
|
|
$(deriveSafeCopy 0 'base ''NickTrack)
|
|
|
|
$(deriveSafeCopy 0 'base ''NickTracking)
|
|
|
|
|
|
|
|
emptyNickTracking :: NickTracking
|
|
|
|
emptyNickTracking = NickTracking empty
|