{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Miso.Media
(
Media (..)
, NetworkState (..)
, ReadyState (..)
, Stream
, canPlayType
, load
, play
, pause
, srcObject
, autoplay
, controls
, currentSrc
, currentTime
, defaultMuted
, defaultPlaybackRate
, duration
, ended
, loop
, mediaGroup
, muted
, networkState
, paused
, playbackRate
, poster
, preload
, readyState
, seeking
, videoHeight
, videoWidth
, volume
, mediaEvents
) where
import Control.Monad
import Miso.DSL
import Miso.Event
import Miso.String
newtype Media = Media JSVal
deriving (Media -> IO JSVal
(Media -> IO JSVal) -> ToJSVal Media
forall a. (a -> IO JSVal) -> ToJSVal a
$ctoJSVal :: Media -> IO JSVal
toJSVal :: Media -> IO JSVal
ToJSVal, Media -> Media -> Bool
(Media -> Media -> Bool) -> (Media -> Media -> Bool) -> Eq Media
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Media -> Media -> Bool
== :: Media -> Media -> Bool
$c/= :: Media -> Media -> Bool
/= :: Media -> Media -> Bool
Eq)
data NetworkState
= NETWORK_EMPTY
| NETWORK_IDLE
| NETWORK_LOADING
| NETWORK_NO_SOURCE
deriving (Int -> NetworkState -> ShowS
[NetworkState] -> ShowS
NetworkState -> String
(Int -> NetworkState -> ShowS)
-> (NetworkState -> String)
-> ([NetworkState] -> ShowS)
-> Show NetworkState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NetworkState -> ShowS
showsPrec :: Int -> NetworkState -> ShowS
$cshow :: NetworkState -> String
show :: NetworkState -> String
$cshowList :: [NetworkState] -> ShowS
showList :: [NetworkState] -> ShowS
Show, NetworkState -> NetworkState -> Bool
(NetworkState -> NetworkState -> Bool)
-> (NetworkState -> NetworkState -> Bool) -> Eq NetworkState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NetworkState -> NetworkState -> Bool
== :: NetworkState -> NetworkState -> Bool
$c/= :: NetworkState -> NetworkState -> Bool
/= :: NetworkState -> NetworkState -> Bool
Eq, Int -> NetworkState
NetworkState -> Int
NetworkState -> [NetworkState]
NetworkState -> NetworkState
NetworkState -> NetworkState -> [NetworkState]
NetworkState -> NetworkState -> NetworkState -> [NetworkState]
(NetworkState -> NetworkState)
-> (NetworkState -> NetworkState)
-> (Int -> NetworkState)
-> (NetworkState -> Int)
-> (NetworkState -> [NetworkState])
-> (NetworkState -> NetworkState -> [NetworkState])
-> (NetworkState -> NetworkState -> [NetworkState])
-> (NetworkState -> NetworkState -> NetworkState -> [NetworkState])
-> Enum NetworkState
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: NetworkState -> NetworkState
succ :: NetworkState -> NetworkState
$cpred :: NetworkState -> NetworkState
pred :: NetworkState -> NetworkState
$ctoEnum :: Int -> NetworkState
toEnum :: Int -> NetworkState
$cfromEnum :: NetworkState -> Int
fromEnum :: NetworkState -> Int
$cenumFrom :: NetworkState -> [NetworkState]
enumFrom :: NetworkState -> [NetworkState]
$cenumFromThen :: NetworkState -> NetworkState -> [NetworkState]
enumFromThen :: NetworkState -> NetworkState -> [NetworkState]
$cenumFromTo :: NetworkState -> NetworkState -> [NetworkState]
enumFromTo :: NetworkState -> NetworkState -> [NetworkState]
$cenumFromThenTo :: NetworkState -> NetworkState -> NetworkState -> [NetworkState]
enumFromThenTo :: NetworkState -> NetworkState -> NetworkState -> [NetworkState]
Enum)
data ReadyState
= HAVE_NOTHING
| HAVE_METADATA
| HAVE_CURRENT_DATA
| HAVE_FUTURE_DATA
| HAVE_ENOUGH_DATA
deriving (Int -> ReadyState -> ShowS
[ReadyState] -> ShowS
ReadyState -> String
(Int -> ReadyState -> ShowS)
-> (ReadyState -> String)
-> ([ReadyState] -> ShowS)
-> Show ReadyState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReadyState -> ShowS
showsPrec :: Int -> ReadyState -> ShowS
$cshow :: ReadyState -> String
show :: ReadyState -> String
$cshowList :: [ReadyState] -> ShowS
showList :: [ReadyState] -> ShowS
Show, ReadyState -> ReadyState -> Bool
(ReadyState -> ReadyState -> Bool)
-> (ReadyState -> ReadyState -> Bool) -> Eq ReadyState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReadyState -> ReadyState -> Bool
== :: ReadyState -> ReadyState -> Bool
$c/= :: ReadyState -> ReadyState -> Bool
/= :: ReadyState -> ReadyState -> Bool
Eq, Int -> ReadyState
ReadyState -> Int
ReadyState -> [ReadyState]
ReadyState -> ReadyState
ReadyState -> ReadyState -> [ReadyState]
ReadyState -> ReadyState -> ReadyState -> [ReadyState]
(ReadyState -> ReadyState)
-> (ReadyState -> ReadyState)
-> (Int -> ReadyState)
-> (ReadyState -> Int)
-> (ReadyState -> [ReadyState])
-> (ReadyState -> ReadyState -> [ReadyState])
-> (ReadyState -> ReadyState -> [ReadyState])
-> (ReadyState -> ReadyState -> ReadyState -> [ReadyState])
-> Enum ReadyState
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: ReadyState -> ReadyState
succ :: ReadyState -> ReadyState
$cpred :: ReadyState -> ReadyState
pred :: ReadyState -> ReadyState
$ctoEnum :: Int -> ReadyState
toEnum :: Int -> ReadyState
$cfromEnum :: ReadyState -> Int
fromEnum :: ReadyState -> Int
$cenumFrom :: ReadyState -> [ReadyState]
enumFrom :: ReadyState -> [ReadyState]
$cenumFromThen :: ReadyState -> ReadyState -> [ReadyState]
enumFromThen :: ReadyState -> ReadyState -> [ReadyState]
$cenumFromTo :: ReadyState -> ReadyState -> [ReadyState]
enumFromTo :: ReadyState -> ReadyState -> [ReadyState]
$cenumFromThenTo :: ReadyState -> ReadyState -> ReadyState -> [ReadyState]
enumFromThenTo :: ReadyState -> ReadyState -> ReadyState -> [ReadyState]
Enum)
load :: Media -> IO ()
load :: Media -> IO ()
load (Media JSVal
m) = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO JSVal -> IO ()) -> IO JSVal -> IO ()
forall a b. (a -> b) -> a -> b
$ JSVal
m JSVal -> MisoString -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> MisoString -> args -> IO JSVal
# (MisoString
"load" :: MisoString) (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ()
play :: Media -> IO ()
play :: Media -> IO ()
play (Media JSVal
m) = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO JSVal -> IO ()) -> IO JSVal -> IO ()
forall a b. (a -> b) -> a -> b
$ JSVal
m JSVal -> MisoString -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> MisoString -> args -> IO JSVal
# (MisoString
"play" :: MisoString) (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ()
pause :: Media -> IO ()
pause :: Media -> IO ()
pause (Media JSVal
a) = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO JSVal -> IO ()) -> IO JSVal -> IO ()
forall a b. (a -> b) -> a -> b
$ JSVal
a JSVal -> MisoString -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> MisoString -> args -> IO JSVal
# (MisoString
"pause" :: MisoString) (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ()
canPlayType :: Media -> IO MisoString
canPlayType :: Media -> IO MisoString
canPlayType (Media JSVal
m) = do
JSVal -> IO MisoString
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO MisoString) -> IO JSVal -> IO MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< do
JSVal
m JSVal -> MisoString -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> MisoString -> args -> IO JSVal
# (MisoString
"canPlayType" :: MisoString) (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ()
autoplay :: Media -> IO Bool
autoplay :: Media -> IO Bool
autoplay (Media JSVal
m) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"autoplay" :: MisoString)
controls :: Media -> IO Bool
controls :: Media -> IO Bool
controls (Media JSVal
m) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"controls" :: MisoString)
currentSrc :: Media -> IO MisoString
currentSrc :: Media -> IO MisoString
currentSrc (Media JSVal
m) = JSVal -> IO MisoString
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO MisoString) -> IO JSVal -> IO MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"currentSrc" :: MisoString)
currentTime :: Media -> IO Double
currentTime :: Media -> IO Double
currentTime (Media JSVal
m) = JSVal -> IO Double
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Double) -> IO JSVal -> IO Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"currentTime" :: MisoString)
defaultMuted :: Media -> IO Bool
defaultMuted :: Media -> IO Bool
defaultMuted (Media JSVal
m) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"defaultMuted" :: MisoString)
defaultPlaybackRate :: Media -> IO Double
defaultPlaybackRate :: Media -> IO Double
defaultPlaybackRate (Media JSVal
m) = JSVal -> IO Double
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Double) -> IO JSVal -> IO Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"defaultPlaybackRate" :: MisoString)
duration :: Media -> IO Double
duration :: Media -> IO Double
duration (Media JSVal
m) = JSVal -> IO Double
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Double) -> IO JSVal -> IO Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"duration" :: MisoString)
ended :: Media -> IO Bool
ended :: Media -> IO Bool
ended (Media JSVal
m) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"ended" :: MisoString)
loop :: Media -> IO Bool
loop :: Media -> IO Bool
loop (Media JSVal
m) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"loop" :: MisoString)
mediaGroup :: Media -> IO MisoString
mediaGroup :: Media -> IO MisoString
mediaGroup (Media JSVal
m) = JSVal -> IO MisoString
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO MisoString) -> IO JSVal -> IO MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"mediaGroup" :: MisoString)
muted :: Media -> IO Bool
muted :: Media -> IO Bool
muted (Media JSVal
m) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"muted" :: MisoString)
networkState :: Media -> IO NetworkState
networkState :: Media -> IO NetworkState
networkState (Media JSVal
m) = do
number <- JSVal -> IO Int
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Int) -> IO JSVal -> IO Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"networkState" :: MisoString)
pure (toEnum number)
paused :: Media -> IO Bool
paused :: Media -> IO Bool
paused (Media JSVal
a) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"paused" :: MisoString)
playbackRate :: Media -> IO Double
playbackRate :: Media -> IO Double
playbackRate (Media JSVal
a) = JSVal -> IO Double
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Double) -> IO JSVal -> IO Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"playbackRate" :: MisoString)
poster :: Media -> IO MisoString
poster :: Media -> IO MisoString
poster (Media JSVal
a) = JSVal -> IO MisoString
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO MisoString) -> IO JSVal -> IO MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"poster" :: MisoString)
preload :: Media -> IO MisoString
preload :: Media -> IO MisoString
preload (Media JSVal
a) = JSVal -> IO MisoString
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO MisoString) -> IO JSVal -> IO MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"preload" :: MisoString)
readyState :: Media -> IO ReadyState
readyState :: Media -> IO ReadyState
readyState (Media JSVal
a) = do
number <- JSVal -> IO Int
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Int) -> IO JSVal -> IO Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"readyState" :: MisoString)
pure (toEnum number)
seeking :: Media -> IO Bool
seeking :: Media -> IO Bool
seeking (Media JSVal
a) = JSVal -> IO Bool
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Bool) -> IO JSVal -> IO Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"seeking" :: MisoString)
videoHeight :: Media -> IO Int
videoHeight :: Media -> IO Int
videoHeight (Media JSVal
m) = JSVal -> IO Int
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Int) -> IO JSVal -> IO Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"videoHeight" :: MisoString)
videoWidth :: Media -> IO Int
videoWidth :: Media -> IO Int
videoWidth (Media JSVal
m) = JSVal -> IO Int
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Int) -> IO JSVal -> IO Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"videoWidth" :: MisoString)
volume :: Media -> IO Double
volume :: Media -> IO Double
volume (Media JSVal
m) = JSVal -> IO Double
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO Double) -> IO JSVal -> IO Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
"volume" :: MisoString)
type Stream = JSVal
srcObject :: Stream -> Media -> IO ()
srcObject :: JSVal -> Media -> IO ()
srcObject JSVal
stream (Media JSVal
media) = JSVal -> MisoString -> JSVal -> IO ()
forall o v.
(ToObject o, ToJSVal v) =>
o -> MisoString -> v -> IO ()
setField JSVal
media MisoString
"srcObject" JSVal
stream