From 13eddbfc2111f0c1cd0c2e8c60e87d68b426bade Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 15 Dec 2017 22:03:15 +0100
Subject: [PATCH] Fixed #46: better handling of HTTP errors when fetching audio
 file

---
 CHANGELOG                | 1 +
 front/src/audio/index.js | 7 ++++++-
 front/src/audio/queue.js | 7 +++++--
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 87c584200..3b31937fc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,7 @@ Changelog
 ------------------
 
 - Import: can now specify search template when querying import sources (#45)
+- Player: better handling of errors when fetching the audio file (#46)
 
 
 0.2.4 (2017-12-14)
diff --git a/front/src/audio/index.js b/front/src/audio/index.js
index 7750ee500..4896b83b0 100644
--- a/front/src/audio/index.js
+++ b/front/src/audio/index.js
@@ -26,6 +26,7 @@ class Audio {
     if (options.onEnded) {
       this.onEnded = options.onEnded
     }
+    this.onError = options.onError
 
     this.state = {
       preload: preload,
@@ -60,8 +61,12 @@ class Audio {
   init (src, options = {}) {
     if (!src) throw Error('src must be required')
     this.state.startLoad = true
-    if (this.state.tried === this.state.try) {
+    if (this.state.tried >= this.state.try) {
       this.state.failed = true
+      logger.default.error('Cannot fetch audio', src)
+      if (this.onError) {
+        this.onError(src)
+      }
       return
     }
     this.$Audio = new window.Audio(src)
diff --git a/front/src/audio/queue.js b/front/src/audio/queue.js
index bde0bf863..8c69638e8 100644
--- a/front/src/audio/queue.js
+++ b/front/src/audio/queue.js
@@ -140,7 +140,6 @@ class Queue {
     } else {
       index = index || this.tracks.length
     }
-    console.log('INDEEEEEX', index)
     tracks.forEach((t) => {
       self.append(t, index, true)
       index += 1
@@ -243,7 +242,11 @@ class Queue {
       rate: 1,
       loop: false,
       volume: this.state.volume,
-      onEnded: this.handleAudioEnded.bind(this)
+      onEnded: this.handleAudioEnded.bind(this),
+      onError: function (src) {
+        self.errored = true
+        self.next()
+      }
     })
     this.audio = audio
     audio.updateHook('playState', function (e) {
-- 
GitLab