Show error when media format is unsupported (#409)

* fix error about pop

* location-history: add optional callbacks

* set handler on first tick

discovered by @dcposch

* Show error when media format is unsupported

Before this change, the player would just get stuck on the loading
screen forever without notifying the user.
This commit is contained in:
Feross Aboukhadijeh
2016-04-14 15:30:26 -07:00
parent 9c60f104c8
commit 914d07df03
5 changed files with 18 additions and 12 deletions

View File

@@ -285,6 +285,11 @@ function dispatch (action, ...args) {
if (action === 'mediaStalled') {
state.playing.isStalled = true
}
if (action === 'mediaError') {
state.location.back(function () {
onError(new Error('Unsupported file format'))
})
}
if (action === 'mediaTimeUpdate') {
state.playing.lastTimeUpdate = new Date().getTime()
state.playing.isStalled = false

View File

@@ -20,7 +20,7 @@ function dispatcher (...args) {
var json = JSON.stringify(args)
var handler = _dispatchers[json]
if (!handler) {
_dispatchers[json] = (e) => {
handler = _dispatchers[json] = (e) => {
// Don't click on whatever is below the button
e.stopPropagation()
// Don't regisiter clicks on disabled buttons

View File

@@ -7,28 +7,30 @@ function LocationHistory () {
this._pending = null
}
LocationHistory.prototype.go = function (page) {
LocationHistory.prototype.go = function (page, cb) {
console.log('go', page)
this.clearForward()
this._go(page)
this._go(page, cb)
}
LocationHistory.prototype._go = function (page) {
LocationHistory.prototype._go = function (page, cb) {
if (this._pending) return
if (page.onbeforeload) {
this._pending = page
page.onbeforeload((err) => {
if (this._pending !== page) return /* navigation was cancelled */
this._pending = null
if (err) return
if (err) return cb(err)
this._history.push(page)
if (cb) cb()
})
} else {
this._history.push(page)
if (cb) cb()
}
}
LocationHistory.prototype.back = function () {
LocationHistory.prototype.back = function (cb) {
if (this._history.length <= 1) return
var page = this._history.pop()
@@ -39,17 +41,19 @@ LocationHistory.prototype.back = function () {
// call finishes first.
page.onbeforeunload(() => {
this._forward.push(page)
if (cb) cb()
})
} else {
this._forward.push(page)
if (cb) cb()
}
}
LocationHistory.prototype.forward = function () {
LocationHistory.prototype.forward = function (cb) {
if (this._forward.length === 0) return
var page = this._forward.pop()
this._go(page)
this._go(page, cb)
}
LocationHistory.prototype.clearForward = function () {

View File

@@ -34,10 +34,6 @@ var sounds = {
url: 'file://' + path.join(config.STATIC_PATH, 'sound', 'error.wav'),
volume: 0.2
},
POP: {
url: 'file://' + path.join(config.STATIC_PATH, 'sound', 'pop.wav'),
volume: 0.2
},
PLAY: {
url: 'file://' + path.join(config.STATIC_PATH, 'sound', 'play.wav'),
volume: 0.2

View File

@@ -81,6 +81,7 @@ function renderMedia (state) {
onplay=${dispatcher('mediaPlaying')}
onpause=${dispatcher('mediaPaused')}
onstalling=${dispatcher('mediaStalled')}
onerror=${dispatcher('mediaError')}
ontimeupdate=${dispatcher('mediaTimeUpdate')}
autoplay>
${trackTags}