* VRFS-3668 - show download errors in popup player, VRFS-3659 - cache tracks in popup player
This commit is contained in:
parent
f086ff74c3
commit
d3d9a2db49
|
|
@ -75,14 +75,8 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
|
|||
disabled = true
|
||||
if selectedMixdown.client_state?
|
||||
switch selectedMixdown.client_state
|
||||
when 'cant_open'
|
||||
customMixName = `<h5>{selectedMixdown.name}<img src="/assets/content/icon-mix-fail@2X.png" /></h5>`
|
||||
when 'keying_timeout'
|
||||
customMixName = `<h5>{selectedMixdown.name}<img src="/assets/content/icon-mix-fail@2X.png" /></h5>`
|
||||
when 'download_fail'
|
||||
customMixName = `<h5>{selectedMixdown.name}<img src="/assets/content/icon-mix-fail@2X.png" /></h5>`
|
||||
when 'keying'
|
||||
customMixName = `<h5>Loading selected mix... <img src="/assets/shared/spinner.gif" /></h5>`
|
||||
when 'downloading'
|
||||
customMixName = `<h5>Loading selected mix... <img src="/assets/shared/spinner.gif" /></h5>`
|
||||
when 'ready'
|
||||
|
|
@ -110,6 +104,8 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
|
|||
switch selectedStem.client_state
|
||||
when 'downloading'
|
||||
customMixName = `<h5>Loading {trackName}... <img src="/assets/shared/spinner.gif" /></h5>`
|
||||
when 'download_fail'
|
||||
customMixName = `<h5>{trackName}<img src="/assets/content/icon-mix-fail@2X.png" /></h5>`
|
||||
when 'ready'
|
||||
customMixName = `<h5>{trackName}</h5>`
|
||||
disabled = false
|
||||
|
|
@ -119,6 +115,8 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
|
|||
else
|
||||
if jamTrack?.client_state == 'downloading'
|
||||
downloader = `<img src="/assets/shared/spinner.gif" />`
|
||||
else if jamTrack?.client_state == 'download_fail'
|
||||
downloader = `<img src="/assets/content/icon-mix-fail@2X.png" />`
|
||||
|
||||
jamTrackTypeHeader = `<span>Full JamTrack {downloader}</span>`
|
||||
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
loading: false
|
||||
playing: false
|
||||
paused: false
|
||||
load_error: false
|
||||
id: null
|
||||
media_type: null
|
||||
cachedAudio: []
|
||||
cache_size: 10
|
||||
|
||||
playbackState:(position, time) ->
|
||||
state = {}
|
||||
|
|
@ -29,7 +32,6 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
state.playbackStateChanged = !@state? || @state.isPlaying != @playing || @state.paused != @paused
|
||||
state.positionUpdateChanged = !@state? || @state.positionMs != position
|
||||
state.currentTimeChanged = !@state? || @state.time != time
|
||||
|
||||
state
|
||||
|
||||
changed: () ->
|
||||
|
|
@ -39,38 +41,54 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
|
||||
# XXX: how to deal with duration? no mention in Howler API
|
||||
|
||||
target = {id: @id, isPlaying: @playing, loaded: @loaded, paused: @paused, positionMs: position, time: time, durationMs: @onGetPlayDuration()}
|
||||
target = {id: @id, isPlaying: @playing, loaded: @loaded, paused: @paused, loading: @loading, load_error: @load_error, positionMs: position, time: time, durationMs: @onGetPlayDuration()}
|
||||
$.extend(true, target, playbackState)
|
||||
@state = target
|
||||
@trigger(@state)
|
||||
|
||||
onLoad: (id, urls, media_type) ->
|
||||
|
||||
if @loading
|
||||
logger.error("you can't switch to different audio while loading due to weird errors seen in Howler")
|
||||
return
|
||||
|
||||
if @audio
|
||||
@audio.stop()
|
||||
@audio.unload()
|
||||
@loaded = false
|
||||
@loading = false
|
||||
@playing = false
|
||||
@paused = false
|
||||
@load_error = false
|
||||
|
||||
@audio = null
|
||||
@id = id
|
||||
@media_type = media_type
|
||||
@loading = true
|
||||
@playing = false
|
||||
@paused = false
|
||||
|
||||
console.log("URLS", urls)
|
||||
@audio = new Howl({
|
||||
src: urls,
|
||||
autoplay: false,
|
||||
loop: false,
|
||||
volume: 1,
|
||||
preload: true,
|
||||
onend: @onAudioEnded,
|
||||
onload: @onAudioLoaded,
|
||||
onpause: @onAudioPause,
|
||||
onplay: @onAudioPlay
|
||||
})
|
||||
|
||||
for cacheItem in @cachedAudio
|
||||
if cacheItem.id == id
|
||||
# items in our own cache are only there if we saw that it fully loaded
|
||||
@audio = cacheItem.audio
|
||||
@loaded = true
|
||||
@loading = false
|
||||
|
||||
unless @audio?
|
||||
@audio = new Howl({
|
||||
src: urls,
|
||||
autoplay: false,
|
||||
loop: false,
|
||||
volume: 1,
|
||||
preload: true,
|
||||
onend: @onAudioEnded,
|
||||
onload: @onAudioLoaded,
|
||||
onloaderror: @onAudioLoadError,
|
||||
onpause: @onAudioPause,
|
||||
onplay: @onAudioPlay
|
||||
})
|
||||
@audio.jkid = id
|
||||
|
||||
@changed()
|
||||
|
||||
|
|
@ -135,13 +153,30 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
0
|
||||
|
||||
onAudioEnded: () ->
|
||||
logger.debug("onAudioEnded", this, arguments)
|
||||
logger.debug("onAudioEnded")
|
||||
@playing = false
|
||||
@changed()
|
||||
|
||||
onAudioLoaded: () ->
|
||||
logger.debug("onAudioLoaded")
|
||||
logger.debug("onAudioLoaded", arguments)
|
||||
@loaded = true
|
||||
@loading = false
|
||||
|
||||
# add audio to cache, and ageout cached audio items if more than 10 \
|
||||
if @cachedAudio.length >= @cache_size
|
||||
audio = @cachedAudio.shift()
|
||||
try
|
||||
audio.audio.unload()
|
||||
catch e
|
||||
logger.error("unable to unload aged audio", @audio)
|
||||
|
||||
@cachedAudio.push({id: @audio.jkid, audio: @audio})
|
||||
@changed()
|
||||
|
||||
onAudioLoadError: () ->
|
||||
logger.debug("onAudioLoadError", arguments)
|
||||
@load_error = true
|
||||
@loading = false
|
||||
@changed()
|
||||
|
||||
onAudioPause: () ->
|
||||
|
|
|
|||
|
|
@ -167,6 +167,8 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
else
|
||||
if @browserMediaState.loaded
|
||||
@jamTrack.activeStem.client_state = 'ready'
|
||||
else if @browserMediaState.load_error
|
||||
@jamTrack.activeStem.client_state = 'download_fail'
|
||||
else
|
||||
@jamTrack.activeStem.client_state = 'downloading'
|
||||
|
||||
|
|
@ -185,6 +187,8 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
else
|
||||
if @browserMediaState.loaded
|
||||
@jamTrack.activeMixdown.client_state = 'ready'
|
||||
else if @browserMediaState.load_error
|
||||
@jamTrack.activeMixdown.client_state = 'download_fail'
|
||||
else
|
||||
@jamTrack.activeMixdown.client_state = 'downloading'
|
||||
|
||||
|
|
@ -202,6 +206,8 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
else
|
||||
if @browserMediaState.loaded
|
||||
@jamTrack.client_state = 'ready'
|
||||
else if @browserMediaState.load_error
|
||||
@jamTrack.client_state = 'download_fail'
|
||||
else
|
||||
@jamTrack.client_state = 'downloading'
|
||||
else
|
||||
|
|
@ -278,6 +284,10 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
alert("stop playing")
|
||||
|
||||
onOpenMixdown: (mixdown) ->
|
||||
if @browserMediaState.loading
|
||||
logger.warn("can not activate mixdown while browser media is loading")
|
||||
return
|
||||
|
||||
logger.debug("opening mixdown", mixdown)
|
||||
|
||||
# check if it's already available in the backend or not
|
||||
|
|
@ -295,6 +305,10 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
)
|
||||
|
||||
onOpenStem: (stem_id) ->
|
||||
if @browserMediaState.loading
|
||||
logger.warn("can not activate stem while browser media is loading")
|
||||
return
|
||||
|
||||
logger.debug("opening stem", stem_id)
|
||||
|
||||
# check if it's already available in the backend or not
|
||||
|
|
@ -312,6 +326,11 @@ BrowserMediaActions = @BrowserMediaActions
|
|||
)
|
||||
|
||||
onActivateNoMixdown: (jamTrack) ->
|
||||
|
||||
if @browserMediaState.loading
|
||||
logger.warn("can not activate JamTrack while browser media is loading")
|
||||
return
|
||||
|
||||
logger.debug("activating no mixdown")
|
||||
|
||||
rest.markMixdownActive({id: @jamTrack.id, mixdown_id: null})
|
||||
|
|
|
|||
Loading…
Reference in New Issue