{-# OPTIONS_GHC -Wno-orphans #-} -- :/ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-| Module: SignalDBus.Types Description: Types used by this package Copyright: (c) Lia Lenckowski, 2022 License: AGPL Maintainer: lialenck@protonmail.com Stability: experimental Portability: GNU/Linux, MacOS This module contains types used by this package. Please import SignalDBus instead. -} module SignalDBus.Types ( SignalConn(..), Timestamp, Device(..), Group(..), ReceivedMessage(..), toUTCTime, fromUTCTime, ) where import Data.Int (Int64) import Data.Time (UTCTime) import Data.Time.Clock.POSIX (posixSecondsToUTCTime, utcTimeToPOSIXSeconds) import DBus.Client (Client) import DBus.Internal.Types import Text.Read (readPrec) -- |Opaque connection object, aquired by 'SignalDBus.withConn' or -- 'SignalDBus.withConnNum' data SignalConn = SignalConn !ObjectPath !Client -- |Timestamp, represented as an ms-precision unix timestamp newtype Timestamp = Timestamp Int64 deriving (Show, Read, Eq, Ord, IsVariant, IsValue) -- |Conversion to 'UTCTime'. This retains precision, so converting back-and-forth -- is unproblematic. toUTCTime :: Timestamp -> UTCTime toUTCTime (Timestamp ts) = posixSecondsToUTCTime (fromIntegral ts * 0.001) -- |Conversion from 'UTCTime'. This retains precision, so converting back-and-forth -- is unproblematic. fromUTCTime :: UTCTime -> Timestamp fromUTCTime t = Timestamp $ floor $ utcTimeToPOSIXSeconds t * 1000 -- |Opaque object representing a linked device newtype Device = Device Int64 deriving (Show, Read, Eq, IsVariant, IsValue) instance Read ObjectPath where -- :/ readPrec = ObjectPath <$> readPrec -- |Opaque Group object, aquired by 'SignalDBus.listGroups' or 'SignalDBus.getGroup' newtype Group = Group ObjectPath deriving (Show, Read, Eq, Ord, IsVariant, IsValue) -- |Received message data ReceivedMessage = SyncMessage -- ^ Message sent by a linked device to someone else Timestamp -- ^ When this message was sent String -- ^ Message sender (TODO: always yourself?) (Maybe Group) -- ^ If sent in a group, corresponding group object String -- ^ Message text [String] -- ^ Paths to stored attachments | Receipt -- ^ Read receipt sent by someone else in response to one of your messages Timestamp -- ^ Which message was read String -- ^ Phone number of the receipt sender | Message -- ^ Message sent to you by someone else Timestamp -- ^ When this message was sent String -- ^ Message sender (Maybe Group) -- ^ If sent in a group, corresponding group object String -- ^ Message text [String] -- ^ Paths to stored attachments deriving (Show, Read, Eq, Ord)