From a83328bc274c4d0178760a44d1cf3e6a46714681 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Mon, 19 Feb 2018 20:14:39 +0100
Subject: [PATCH] Smarter play button, disabled for unplayable tracks

---
 front/src/components/audio/PlayButton.vue | 25 ++++++++++++++---------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/front/src/components/audio/PlayButton.vue b/front/src/components/audio/PlayButton.vue
index 4767255e..451cdcf0 100644
--- a/front/src/components/audio/PlayButton.vue
+++ b/front/src/components/audio/PlayButton.vue
@@ -1,6 +1,6 @@
 <template>
   <div :class="['ui', {'tiny': discrete}, 'buttons']">
-    <button title="Add to current queue" @click="add" :class="['ui', {'mini': discrete}, 'button']">
+    <button title="Add to current queue" @click="add" :class="['ui', {'mini': discrete}, {disabled: playableTracks.length === 0}, 'button']">
       <i class="ui play icon"></i>
       <template v-if="!discrete"><slot>Play</slot></template>
     </button>
@@ -36,20 +36,25 @@ export default {
       jQuery(this.$el).find('.ui.dropdown').dropdown()
     }
   },
-  methods: {
-    add () {
+  computed: {
+    playableTracks () {
+      let tracks
       if (this.track) {
-        this.$store.dispatch('queue/append', {track: this.track})
+        tracks = [this.track]
       } else {
-        this.$store.dispatch('queue/appendMany', {tracks: this.tracks})
+        tracks = this.tracks
       }
+      return tracks.filter(e => {
+        return e.files.length > 0
+      })
+    }
+  },
+  methods: {
+    add () {
+      this.$store.dispatch('queue/appendMany', {tracks: this.playableTracks})
     },
     addNext (next) {
-      if (this.track) {
-        this.$store.dispatch('queue/append', {track: this.track, index: this.$store.state.queue.currentIndex + 1})
-      } else {
-        this.$store.dispatch('queue/appendMany', {tracks: this.tracks, index: this.$store.state.queue.currentIndex + 1})
-      }
+      this.$store.dispatch('queue/appendMany', {tracks: this.playableTracks, index: this.$store.state.queue.currentIndex + 1})
       if (next) {
         this.$store.dispatch('queue/next')
       }
-- 
GitLab