{-# LANGUAGE OverloadedStrings #-}
module Tesla.Car.Command.Sharing (share) where
import Control.Monad.IO.Class (MonadIO (..))
import Data.Aeson
import Data.Text (Text)
import Data.Time.Clock.POSIX (getCurrentTime, utcTimeToPOSIXSeconds)
import Tesla.Car.Command
share :: MonadIO m => Text -> Car m CommandResponse
share :: forall (m :: * -> *). MonadIO m => Text -> Car m CommandResponse
share Text
to = do
Int
now <- (Int, POSIXTime) -> Int
forall a b. (a, b) -> a
fst ((Int, POSIXTime) -> Int)
-> (UTCTime -> (Int, POSIXTime)) -> UTCTime -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. POSIXTime -> (Int, POSIXTime)
forall b. Integral b => POSIXTime -> (b, POSIXTime)
forall a b. (RealFrac a, Integral b) => a -> (b, a)
properFraction (POSIXTime -> (Int, POSIXTime))
-> (UTCTime -> POSIXTime) -> UTCTime -> (Int, POSIXTime)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds (UTCTime -> Int) -> Car m UTCTime -> Car m Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO UTCTime -> Car m UTCTime
forall a. IO a -> Car m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
String -> [Pair] -> Car m CommandResponse
forall (m :: * -> *).
MonadIO m =>
String -> [Pair] -> Car m CommandResponse
runCmd String
"share" [
Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"share_ext_content_raw" :: Text),
Key
"value" Key -> Value -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object [ Key
"android.intent.extra.TEXT" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
to ],
Key
"locale" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"en-US" :: Text),
Key
"timestamp_ms" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Int
now Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
1000::Int))
]