jam-cloud/web/app/assets/javascripts/react-components/stores/BrowserMediaPlaybackStore.j...

85 lines
2.2 KiB
CoffeeScript

$ = jQuery
context = window
logger = context.JK.logger
PLAYBACK_MONITOR_MODE = context.JK.PLAYBACK_MONITOR_MODE
RecordingActions = @RecordingActions
BrowserMediaActions = @BrowserMediaActions
@BrowserMediaPlaybackStore = Reflux.createStore(
{
listenables: @BrowserMediaPlaybackActions
playbackStateChanged: false
positionUpdateChanged: false
currentTimeChanged: false
playbackState: null
positionMs: 0
durationMs: 0
isRecording: false
sessionHelper: null
init: () ->
this.listenTo(context.BrowserMediaStore, this.onBrowserMediaChange);
onBrowserMediaChange: (changes) ->
@onPositionUpdate(PLAYBACK_MONITOR_MODE.BROWSER_MEDIA)
onCurrentTimeChanged: (time) ->
@time = time
@currentTimeChanged = true
@issueChange()
onMediaStartPlay: (data) ->
BrowserMediaActions.play.trigger()
onMediaStopPlay: (data) ->
if !data.endReached
BrowserMediaActions.stop()
onMediaPausePlay: (data) ->
# if a JamTrack is open, and the user hits 'pause' or 'stop', we need to automatically stop the recording
if !data.endReached
BrowserMediaActions.pause()
onMediaChangePosition: (data) ->
seek = data.positionMs;
BrowserMediaActions.seek(seek);
issueChange: () ->
@state =
playbackState: @playbackState
playbackStateChanged: @playbackStateChanged
positionUpdateChanged: @positionUpdateChanged
currentTimeChanged: @currentTimeChanged
positionMs: @positionMs
durationMs: @durationMs
isPlaying: @isPlaying
time: @time
this.trigger(@state)
@playbackStateChanged = false
@positionUpdateChanged = false
@currentTimeChanged = false
onPlaybackStateChange: (text) ->
@playbackState = text
@playbackStateChanged = true
@issueChange()
onPositionUpdate: (playbackMode) ->
if playbackMode == PLAYBACK_MONITOR_MODE.BROWSER_MEDIA
@positionMs = BrowserMediaStore.onGetPlayPosition() || 0
@durationMs = BrowserMediaStore.onGetPlayDuration() || 0;
@isPlaying = BrowserMediaStore.playing;
else
raise 'Only BROWSER_MEDIA is supported'
@positionUpdateChanged = true
@issueChange()
}
)