{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.MediaSession
       (newMediaSession, setMetadata, deactivate, getKind, getControls,
        getControlsUnsafe, getControlsUnchecked, MediaSession(..),
        gTypeMediaSession)
       where
import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, realToFrac, fmap, Show, Read, Eq, Ord, Maybe(..))
import qualified Prelude (error)
import Data.Typeable (Typeable)
import Data.Traversable (mapM)
import Language.Javascript.JSaddle (JSM(..), JSVal(..), JSString, strictEqual, toJSVal, valToStr, valToNumber, valToBool, js, jss, jsf, jsg, function, asyncFunction, new, array, jsUndefined, (!), (!!))
import Data.Int (Int64)
import Data.Word (Word, Word64)
import JSDOM.Types
import Control.Applicative ((<$>))
import Control.Monad (void)
import Control.Lens.Operators ((^.))
import JSDOM.EventTargetClosures (EventName, unsafeEventName, unsafeEventNameAsync)
import JSDOM.Enums

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSession Mozilla MediaSession documentation> 
newMediaSession ::
                (MonadDOM m) => Maybe MediaSessionKind -> m MediaSession
newMediaSession :: forall (m :: * -> *).
MonadDOM m =>
Maybe MediaSessionKind -> m MediaSession
newMediaSession Maybe MediaSessionKind
kind
  = DOM MediaSession -> m MediaSession
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> MediaSession
MediaSession (JSVal -> MediaSession) -> JSM JSVal -> DOM MediaSession
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> JSM JSVal -> [JSM JSVal] -> JSM JSVal
forall constructor args.
(MakeObject constructor, MakeArgs args) =>
constructor -> args -> JSM JSVal
new (String -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg String
"MediaSession") [Maybe MediaSessionKind -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe MediaSessionKind
kind])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSession.setMetadata Mozilla MediaSession.setMetadata documentation> 
setMetadata ::
            (MonadDOM m) => MediaSession -> Maybe MediaMetadata -> m ()
setMetadata :: forall (m :: * -> *).
MonadDOM m =>
MediaSession -> Maybe MediaMetadata -> m ()
setMetadata MediaSession
self Maybe MediaMetadata
metadata
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (MediaSession
self MediaSession
-> Getting (JSM JSVal) MediaSession (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"setMetadata" [Maybe MediaMetadata -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe MediaMetadata
metadata]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSession.deactivate Mozilla MediaSession.deactivate documentation> 
deactivate :: (MonadDOM m) => MediaSession -> m ()
deactivate :: forall (m :: * -> *). MonadDOM m => MediaSession -> m ()
deactivate MediaSession
self = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (MediaSession
self MediaSession
-> Getting (JSM JSVal) MediaSession (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> () -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"deactivate" ()))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSession.kind Mozilla MediaSession.kind documentation> 
getKind :: (MonadDOM m) => MediaSession -> m MediaSessionKind
getKind :: forall (m :: * -> *).
MonadDOM m =>
MediaSession -> m MediaSessionKind
getKind MediaSession
self = DOM MediaSessionKind -> m MediaSessionKind
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((MediaSession
self MediaSession
-> Getting (JSM JSVal) MediaSession (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter MediaSession (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"kind") JSM JSVal
-> (JSVal -> DOM MediaSessionKind) -> DOM MediaSessionKind
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM MediaSessionKind
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSession.controls Mozilla MediaSession.controls documentation> 
getControls ::
            (MonadDOM m) => MediaSession -> m (Maybe MediaRemoteControls)
getControls :: forall (m :: * -> *).
MonadDOM m =>
MediaSession -> m (Maybe MediaRemoteControls)
getControls MediaSession
self = DOM (Maybe MediaRemoteControls) -> m (Maybe MediaRemoteControls)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((MediaSession
self MediaSession
-> Getting (JSM JSVal) MediaSession (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter MediaSession (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"controls") JSM JSVal
-> (JSVal -> DOM (Maybe MediaRemoteControls))
-> DOM (Maybe MediaRemoteControls)
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe MediaRemoteControls)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSession.controls Mozilla MediaSession.controls documentation> 
getControlsUnsafe ::
                  (MonadDOM m, HasCallStack) => MediaSession -> m MediaRemoteControls
getControlsUnsafe :: forall (m :: * -> *).
(MonadDOM m, HasCallStack) =>
MediaSession -> m MediaRemoteControls
getControlsUnsafe MediaSession
self
  = DOM MediaRemoteControls -> m MediaRemoteControls
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((MediaSession
self MediaSession
-> Getting (JSM JSVal) MediaSession (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter MediaSession (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"controls") JSM JSVal
-> (JSVal -> DOM (Maybe MediaRemoteControls))
-> DOM (Maybe MediaRemoteControls)
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe MediaRemoteControls)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal) DOM (Maybe MediaRemoteControls)
-> (Maybe MediaRemoteControls -> DOM MediaRemoteControls)
-> DOM MediaRemoteControls
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
         DOM MediaRemoteControls
-> (MediaRemoteControls -> DOM MediaRemoteControls)
-> Maybe MediaRemoteControls
-> DOM MediaRemoteControls
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> DOM MediaRemoteControls
forall a. HasCallStack => String -> a
Prelude.error String
"Nothing to return") MediaRemoteControls -> DOM MediaRemoteControls
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSession.controls Mozilla MediaSession.controls documentation> 
getControlsUnchecked ::
                     (MonadDOM m) => MediaSession -> m MediaRemoteControls
getControlsUnchecked :: forall (m :: * -> *).
MonadDOM m =>
MediaSession -> m MediaRemoteControls
getControlsUnchecked MediaSession
self
  = DOM MediaRemoteControls -> m MediaRemoteControls
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((MediaSession
self MediaSession
-> Getting (JSM JSVal) MediaSession (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter MediaSession (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"controls") JSM JSVal
-> (JSVal -> DOM MediaRemoteControls) -> DOM MediaRemoteControls
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM MediaRemoteControls
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)