{-# LANGUAGE TypeFamilies, OverloadedStrings #-}
-- | Audio related events.
module Haste.Audio.Events where
import Haste.Events.Core

data AudioEvent
  = AudioEnded       -- ^ Audio playback ended.
  | AudioError       -- ^ There was some kind of error.
  | AudioPaused      -- ^ Audio paused.
  | AudioResumed     -- ^ Resumed playing after pause.
  | AudioPlaying     -- ^ Audio started playing, initially or after pause.
  | AudioSeekBegins  -- ^ Seek operation starts.
  | AudioSeekEnds    -- ^ Seek operation completes.
  | AudioTimeUpdate  -- ^ Audio object't current time changed.
  | AudioProgress    -- ^ Progress was made downloading audio.
  | AudioStalled     -- ^ Audio download stalled.
  | AudioLoadStart   -- ^ Start downloading audio.
  | AudioLoadSuspend -- ^ Finished or paused downloading audio.

instance Event AudioEvent where
  type EventData AudioEvent = ()
  eventName AudioEnded       = "ended"
  eventName AudioError       = "error"
  eventName AudioPaused      = "pause"
  eventName AudioResumed     = "play"
  eventName AudioPlaying     = "playing"
  eventName AudioSeekBegins  = "seeking"
  eventName AudioSeekEnds    = "seeked"
  eventName AudioTimeUpdate  = "timeupdate"
  eventName AudioProgress    = "progress"
  eventName AudioStalled     = "stalled"
  eventName AudioLoadStart   = "loadstart"
  eventName AudioLoadSuspend = "suspend"
  eventData _ _ = return ()