packages feed

jsaddle-dom-0.1.0.1: src/Language/Javascript/JSaddle/DOM/Custom/MediaStreamTrack.hs

module Language.Javascript.JSaddle.DOM.Custom.MediaStreamTrack (
    module Generated
  , getSources
) where

import Control.Monad.IO.Class (MonadIO(..))
import Control.Concurrent.MVar (newEmptyMVar, takeMVar, putMVar)

import Language.Javascript.JSaddle (postGUIAsyncJS)
import Language.Javascript.JSaddle.DOM.Types
       (withCallback, Callback(..), SourceInfo(..), MonadDOM, MediaStreamTrackSourcesCallback(..))

import Language.Javascript.JSaddle.DOM.Generated.MediaStreamTrackSourcesCallback
       (newMediaStreamTrackSourcesCallback)

import Language.Javascript.JSaddle.DOM.Generated.MediaStreamTrack as Generated hiding (getSources)
import qualified
       Language.Javascript.JSaddle.DOM.Generated.MediaStreamTrack
       as Generated (getSources)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.getSources Mozilla MediaStreamTrack.getSources documentation>
getSources :: (MonadDOM m, IsMediaStreamTrack self) => self -> m [Maybe SourceInfo]
getSources self = do
    result <- liftIO newEmptyMVar
    withCallback (newMediaStreamTrackSourcesCallback (liftIO . putMVar result)) $ \callback -> do
        postGUIAsyncJS $ Generated.getSources self (Just callback)
        liftIO $ takeMVar result