frontend fixes
authormarcelveldt <marcelvanderveldt@MacBook-Pro.local>
Thu, 16 May 2019 20:14:57 +0000 (22:14 +0200)
committermarcelveldt <marcelvanderveldt@MacBook-Pro.local>
Thu, 16 May 2019 20:14:57 +0000 (22:14 +0200)
13 files changed:
music_assistant/web/components/infoheader.vue.js
music_assistant/web/components/listviewItem.vue.js
music_assistant/web/components/player.vue.js
music_assistant/web/components/playmenu.vue.js
music_assistant/web/components/providericons.vue.js [new file with mode: 0644]
music_assistant/web/components/qualityicon.vue.js [deleted file]
music_assistant/web/components/volumecontrol.vue.js
music_assistant/web/index.html
music_assistant/web/pages/artistdetails.vue.js
music_assistant/web/pages/playlistdetails.vue.js
music_assistant/web/pages/queue.vue.js
music_assistant/web/pages/trackdetails.vue.js
music_assistant/web/strings.js

index 8ccf661989fed85ce31c8605d2b548c928ee7c35..5afea5edd17d8f2433cdde25ebc5af5d2f045abc 100644 (file)
@@ -5,7 +5,7 @@ Vue.component("infoheader", {
             <v-img\r
               class="white--text"\r
               width="100%"\r
-              height="370"\r
+              :height="isMobile() ? '300' : '370'"\r
               position="center top" \r
               :src="getFanartImage()"\r
               gradient="to top right, rgba(100,115,201,.33), rgba(25,32,72,.7)"\r
@@ -20,12 +20,7 @@ Vue.component("infoheader", {
                                                                \r
                                                                <!-- tech specs and provider icons -->\r
                                                                <div style="margin-top:10px;">\r
-                                                                       <a v-for="(value, key) in info.provider_ids" :href="info.metadata[key + '_url']" target="_blank" :key="key">\r
-                                                                               <img height="30" :src="'/images/icons/' + key + '.png'" style="padding-right:5px" />\r
-                                                                       </a>\r
-                                                                       <div style="text-shadow: 1px 1px #000000;vertical-align:top;margin-left:30px;margin-top:-35px;">\r
-                                                                                       <qualityicon v-if="info.media_type == 3" v-bind:item="info" :height="30" :compact="false"/>\r
-                                                                       </div>\r
+                                                                       <providericons v-bind:item="info" :height="30" :compact="false"/>\r
                                                                </div>\r
               </v-flex>\r
               \r
@@ -42,10 +37,10 @@ Vue.component("infoheader", {
                                                                                                        <a style="color:#2196f3" v-on:click="clickItem(artist)">{{ artist.name }}</a>\r
                                                                                                        <label style="color:#2196f3" v-if="artistindex + 1 < info.artists.length" :key="artistindex"> / </label>\r
                                                                                        </span>\r
-                                                                                       <span v-if="!!info.artist" class="headline">\r
-                                                                                                       <a style="color:#2196f3" v-on:click="clickItem(artist)">{{ info.artist.name }}</a>\r
+                                                                                       <span v-if="info.artist" class="headline">\r
+                                                                                                       <a style="color:#2196f3" v-on:click="clickItem(info.artist)">{{ info.artist.name }}</a>\r
                                                                                        </span>\r
-                                                                                       <span v-if="!!info.owner" class="headline">\r
+                                                                                       <span v-if="info.owner" class="headline">\r
                                                                                                        <a style="color:#2196f3" v-on:click="">{{ info.owner }}</a>\r
                                                                                        </span>\r
                                                                        </v-card-title>\r
@@ -88,6 +83,8 @@ Vue.component("infoheader", {
        methods: { \r
                getFanartImage() {\r
                        var img = '';\r
+                       if (!this.info)\r
+                               return ''\r
       if (this.info.metadata && this.info.metadata.fanart)\r
                                img = this.info.metadata.fanart;\r
                        else if (this.info.artists)\r
@@ -95,10 +92,14 @@ Vue.component("infoheader", {
                                                if (artist.metadata && artist.metadata.fanart)\r
                                                        img = artist.metadata.fanart;\r
                                        });\r
+                       else if (this.info.artist && this.info.artist.metadata.fanart)\r
+                               img = this.info.artist.metadata.fanart;\r
                        return img;\r
                },\r
                getThumb() {\r
                        var img = '';\r
+                       if (!this.info)\r
+                               return ''\r
       if (this.info.metadata && this.info.metadata.image)\r
                                img = this.info.metadata.image;\r
                        else if (this.info.album && this.info.album.metadata && this.info.album.metadata.image)\r
@@ -112,6 +113,8 @@ Vue.component("infoheader", {
                },\r
                getDescription() {\r
                        var desc = '';\r
+                       if (!this.info)\r
+                               return ''\r
       if (this.info.metadata && this.info.metadata.description)\r
                                return this.info.metadata.description;\r
                        else if (this.info.metadata && this.info.metadata.biography)\r
index e54b811c24e0d80914e6f6894fa9b443d781f0fe..ff05edac9b4916090713687bb0f380705915b7b8 100755 (executable)
@@ -30,7 +30,7 @@ Vue.component("listviewItem", {
                 <label v-if="!hidetracknum && item.track_number" style="color:grey">  -  disc {{ item.disc_number }} track {{ item.track_number }}</label>
             </v-list-tile-sub-title>
             <v-list-tile-sub-title v-if="item.artist">
-                <a v-on:click="clickItem(artist)" @click.stop="">{{ item.artist.name }}</a>
+                <a v-on:click="clickItem(item.artist)" @click.stop="">{{ item.artist.name }}</a>
             </v-list-tile-sub-title>
 
             <v-list-tile-sub-title v-if="!!item.owner">
@@ -39,17 +39,7 @@ Vue.component("listviewItem", {
 
           </v-list-tile-content>
 
-          <qualityicon v-if="item.media_type == 3" v-bind:item="item" :height="25" :compact="true" :dark="true" :hiresonly="true"/>
-
-          <v-list-tile-action v-if="!hideproviders" v-for="provider in item.provider_ids" :key="provider.provider + provider.item_id">
-            <v-tooltip bottom>
-              <template v-slot:activator="{ on }">
-                <img v-on="on" height="20" :src="'images/icons/' + provider.provider + '.png'"/>
-              </template>
-              <span v-if="provider.details">{{ provider.details }}</span>
-              <span v-if="!provider.details">{{ provider.quality }}</span>
-            </v-tooltip>
-          </v-list-tile-action> 
+          <providericons v-bind:item="item" :height="20" :compact="true" :dark="true" :hiresonly="hideproviders"/>
 
           <v-list-tile-action v-if="!hidelibrary">
               <v-tooltip bottom>
@@ -78,11 +68,7 @@ Vue.component("listviewItem", {
      `,
 props: ['item', 'index', 'totalitems', 'hideavatar', 'hidetracknum', 'hideproviders', 'hidemenu', 'hidelibrary', 'hideduration'],
 data() {
-  return {
-    selected: [2],
-    items: [],
-    offset: 0,
-  }
+  return {}
   },
 methods: {
   }
index f0a545ff22bc477ba585d8d81388ff3ae70ccb18..4dc6e81d8a5c44cb1a1d44d094e8740cceba8bba 100755 (executable)
@@ -85,7 +85,7 @@ Vue.component("player", {
     <!-- players side menu -->
     <v-navigation-drawer right app clipped temporary v-model="menu">
         <v-card-title class="headline">
-            <b>Players</b>
+            <b>{{ $t('players') }}</b>
         </v-card-title>
         <v-list two-line>
             <v-divider></v-divider>
@@ -98,7 +98,7 @@ Vue.component("player", {
                       <v-list-tile-title class="title">{{ player.name }}</v-list-tile-title>
 
                       <v-list-tile-sub-title v-if="player.cur_item" class="body-1" :key="player.state">
-                          {{ player.state }}
+                          {{ $t('state.' + player.state) }}
                       </v-list-tile-sub-title>
 
                   </v-list-tile-content>
@@ -121,7 +121,7 @@ Vue.component("player", {
             </div>
         </v-list>
     </v-navigation-drawer>
-    <playmenu v-model="$globals.showplaymenu" v-on:playItem="playItem"/>
+    <playmenu v-model="$globals.showplaymenu" v-on:playItem="playItem" :active_player="active_player" />
   </div>
   
   `,
@@ -261,7 +261,7 @@ Vue.component("player", {
         // TODO: store previous player in local storage
         if (!this.active_player_id)
           for (var player_id in this.players)
-            if (this.players[player_id].state == 'playing' && this.players[player_id].enabled) {
+            if (this.players[player_id].state == 'playing' && this.players[player_id].enabled && !this.players[player_id].group_parent) {
               // prefer the first playing player
               this.active_player_id = player_id;
               break; 
@@ -269,7 +269,7 @@ Vue.component("player", {
         if (!this.active_player_id)
           for (var player_id in this.players) {
             // fallback to just the first player
-            if (this.players[player_id].enabled)
+            if (this.players[player_id].enabled && !this.players[player_id].group_parent)
             {
               this.active_player_id = player_id;
               break; 
index 6b3bacd9fdab4c5cc942a526ed550eea58f641bf..d1a84d2ced669285ed95cf50cb24d996ce64c3b8 100644 (file)
@@ -3,65 +3,45 @@ Vue.component("playmenu", {
        <v-dialog :value="value" @input="$emit('input', $event)" max-width="500px" v-if="$globals.playmenuitem">\r
         <v-card>\r
                <v-list>\r
-               <v-subheader>{{ !!$globals.playmenuitem ? $globals.playmenuitem.name : 'nix' }}</v-subheader>\r
-                       <v-subheader>Play on: beneden</v-subheader>\r
+               <v-subheader class="title">{{ !!$globals.playmenuitem ? $globals.playmenuitem.name : 'nix' }}</v-subheader>\r
+                       <v-subheader>{{ $t('play_on') }} {{ active_player.name }}</v-subheader>\r
                        \r
-                       <v-list-tile avatar @click="$emit('playItem', $globals.playmenuitem, 'play')">\r
+                       <v-list-tile avatar @click="itemClick('play')">\r
                                <v-list-tile-avatar>\r
                                        <v-icon>play_circle_outline</v-icon>\r
                                </v-list-tile-avatar>\r
                                <v-list-tile-content>\r
-                                       <v-list-tile-title>Play Now</v-list-tile-title>\r
+                                       <v-list-tile-title>{{ $t('play_now') }}</v-list-tile-title>\r
                                </v-list-tile-content>\r
                        </v-list-tile>\r
                        <v-divider></v-divider>\r
 \r
-                       <v-list-tile avatar @click="$emit('playItem', $globals.playmenuitem, 'replace')">\r
-                               <v-list-tile-avatar>\r
-                                       <v-icon>play_circle_outline</v-icon>\r
-                               </v-list-tile-avatar>\r
-                               <v-list-tile-content>\r
-                                       <v-list-tile-title>Replace</v-list-tile-title>\r
-                               </v-list-tile-content>\r
-                       </v-list-tile>\r
-                       <v-divider></v-divider>\r
-\r
-                       <v-list-tile avatar @click="$emit('playItem', $globals.playmenuitem, 'next')">\r
+                       <v-list-tile avatar @click="itemClick('next')">\r
                                <v-list-tile-avatar>\r
                                        <v-icon>queue_play_next</v-icon>\r
                                </v-list-tile-avatar>\r
                                <v-list-tile-content>\r
-                                       <v-list-tile-title>Play Next</v-list-tile-title>\r
+                                       <v-list-tile-title>{{ $t('play_next') }}</v-list-tile-title>\r
                                </v-list-tile-content>\r
                        </v-list-tile>\r
                        <v-divider></v-divider>\r
 \r
-                       <v-list-tile avatar @click="$emit('playItem', $globals.playmenuitem, 'add')">\r
+                       <v-list-tile avatar @click="itemClick('add')">\r
                                <v-list-tile-avatar>\r
                                        <v-icon>playlist_add</v-icon>\r
                                </v-list-tile-avatar>\r
                                <v-list-tile-content>\r
-                                       <v-list-tile-title>Add to Queue</v-list-tile-title>\r
+                                       <v-list-tile-title>{{ $t('add_queue') }}</v-list-tile-title>\r
                                </v-list-tile-content>\r
                        </v-list-tile>\r
                        <v-divider></v-divider>\r
 \r
-                       <v-list-tile avatar @click="" v-if="$globals.playmenuitem.media_type != 3">\r
-                               <v-list-tile-avatar>\r
-                                       <v-icon>shuffle</v-icon>\r
-                               </v-list-tile-avatar>\r
-                               <v-list-tile-content>\r
-                                       <v-list-tile-title>Play now (shuffle)</v-list-tile-title>\r
-                               </v-list-tile-content>\r
-                       </v-list-tile>\r
-                       <v-divider v-if="$globals.playmenuitem.media_type != 3"/>\r
-\r
-                       <v-list-tile avatar @click="" v-if="$globals.playmenuitem.media_type == 3">\r
+                       <v-list-tile avatar @click="itemClick('info')" v-if="$globals.playmenuitem.media_type == 3">\r
                                <v-list-tile-avatar>\r
                                        <v-icon>info</v-icon>\r
                                </v-list-tile-avatar>\r
                                <v-list-tile-content>\r
-                                       <v-list-tile-title>Show info</v-list-tile-title>\r
+                                       <v-list-tile-title>{{ $t('show_info') }}</v-list-tile-title>\r
                                </v-list-tile-content>\r
                        </v-list-tile>\r
                        <v-divider v-if="$globals.playmenuitem.media_type == 3"/>\r
@@ -70,7 +50,7 @@ Vue.component("playmenu", {
         </v-card>\r
       </v-dialog>\r
 `,\r
-       props: ['value'],\r
+       props: ['value', 'active_player'],\r
        data (){\r
                return{\r
                        fav: true,\r
@@ -80,5 +60,14 @@ Vue.component("playmenu", {
        },\r
        mounted() { },\r
        created() { },\r
-       methods: { }\r
+       methods: { \r
+               itemClick(cmd) {\r
+      if (cmd == 'info')\r
+                               this.$router.push({ path: '/tracks/' + this.$globals.playmenuitem.item_id, params: {provider: this.$globals.playmenuitem.provider}})\r
+                       else\r
+                               this.$emit('playItem', this.$globals.playmenuitem, cmd)\r
+                       // close dialog\r
+                       this.$globals.showplaymenu = false;\r
+    },\r
+       }\r
   })\r
diff --git a/music_assistant/web/components/providericons.vue.js b/music_assistant/web/components/providericons.vue.js
new file mode 100644 (file)
index 0000000..0e0124d
--- /dev/null
@@ -0,0 +1,68 @@
+Vue.component("providericons", {\r
+       template: `\r
+               <div :style="'height:' + height + 'px;'">\r
+                       <span v-for="provider in uniqueProviders" :key="provider.item_id" style="padding:5px;vertical-align: middle;" v-if="!hiresonly || provider.quality > 6">\r
+                               <v-tooltip bottom>\r
+                                       <template v-slot:activator="{ on }">\r
+                                               <img v-on="on" :height="height" src="images/icons/hires.png" v-if="provider.quality > 6" style="margin-right:9px"/>\r
+                                               <img v-on="on" :height="height" :src="'images/icons/' + provider.provider + '.png'" v-if="!hiresonly"/>\r
+                                       </template>\r
+                                       <div align="center" v-if="item.media_type == 3">\r
+                                               <img height="35px" :src="getFileFormatLogo(provider)"/>\r
+                                               <span><br>{{ getFileFormatDesc(provider) }}</span>\r
+                                       </div>\r
+                                       <span v-if="item.media_type != 3">{{ provider.provider }}</span>\r
+                               </v-tooltip> \r
+                       </span>         \r
+               </div>\r
+`,\r
+       props: ['item','height','compact', 'dark', 'hiresonly'],\r
+       data (){\r
+               return{}\r
+       },\r
+       mounted() { },\r
+       created() { },\r
+       computed: {\r
+               uniqueProviders() {\r
+                       var keys = [];\r
+                       var qualities = [];\r
+                       if (!this.item || !this.item.provider_ids)\r
+                               return []\r
+                       let sorted_item_ids = this.item.provider_ids.sort((a,b) => (a.quality < b.quality) ? 1 : ((b.quality < a.quality) ? -1 : 0));\r
+                       if (!this.compact)\r
+                               return sorted_item_ids;\r
+                       for (provider of sorted_item_ids) {\r
+                               if (!keys.includes(provider.provider)){\r
+                                       qualities.push(provider);\r
+                                       keys.push(provider.provider);\r
+                               }\r
+                       }\r
+                       return qualities;\r
+               }\r
+       },\r
+       methods: { \r
+\r
+               getFileFormatLogo(provider) {\r
+                       if (provider.quality == 0)\r
+                               return 'images/icons/mp3.png'\r
+                       else if (provider.quality == 1)\r
+                               return 'images/icons/vorbis.png'\r
+                       else if (provider.quality == 2)\r
+                               return 'images/icons/aac.png'\r
+                       else if (provider.quality > 2)\r
+                               return 'images/icons/flac.png'\r
+                       },\r
+               getFileFormatDesc(provider) {\r
+                       var desc = '';\r
+                       if (provider.details)\r
+                               desc += ' ' + provider.details;\r
+                       return desc;\r
+               },\r
+               getMaxQualityFormatDesc() {\r
+                       var desc = '';\r
+                       if (provider.details)\r
+                               desc += ' ' + provider.details;\r
+                       return desc;\r
+               }\r
+    }\r
+  })\r
diff --git a/music_assistant/web/components/qualityicon.vue.js b/music_assistant/web/components/qualityicon.vue.js
deleted file mode 100644 (file)
index 48baf2b..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Vue.component("qualityicon", {\r
-       template: `\r
-                       <div :style="'height:' + height + 'px;'">\r
-                               \r
-                               <v-tooltip bottom>\r
-                                               <template v-slot:activator="{ on }">\r
-                                                               <img height="100%" v-on="on" v-if="item.metadata && item.metadata.hires" src="images/icons/hires.png" style="align:center;vertical-align: middle;padding-right:10px;padding-left:10px;"/>\r
-                                                               <img height="100%" v-on="on" v-if="!dark && !hiresonly" :src="getFileFormatLogo()" style="align:center;vertical-align: middle;"/>\r
-                                                               <img height="100%" v-on="on" v-if="dark && !hiresonly" :src="getFileFormatLogo()" style="filter: invert(1);align:center;vertical-align: middle;"/>\r
-                                               </template>\r
-                                               <span>{{ getFileFormatDesc() }}</span>\r
-                               </v-tooltip>\r
-                               <span v-if="!compact" class="body-2" style="vertical-align: middle;">{{ getFileFormatDesc() }}</span>\r
-                       </div>\r
-`,\r
-       props: ['item','height','compact', 'dark', 'hiresonly'],\r
-       data (){\r
-               return{}\r
-       },\r
-       mounted() { },\r
-       created() { },\r
-       methods: { \r
-\r
-               getFileFormatLogo() {\r
-                       if (this.item.quality == 0)\r
-                               return 'images/icons/mp3.png'\r
-                       else if (this.item.quality == 1)\r
-                               return 'images/icons/vorbis.png'\r
-                       else if (this.item.quality == 2)\r
-                               return 'images/icons/aac.png'\r
-                       else if (this.item.quality > 2)\r
-                               return 'images/icons/flac.png'\r
-                       },\r
-                       getFileFormatDesc() {\r
-                               var desc = '';\r
-                               if (this.item && this.item.quality)\r
-                               {\r
-                                       if (this.item.quality == 0)\r
-                                               desc = 'MP3';\r
-                                       else if (this.item.quality == 1)\r
-                                               desc = 'Ogg Vorbis';\r
-                                       else if (this.item.quality == 2)\r
-                                               desc = 'AAC';\r
-                                       else if (this.item.quality > 2)\r
-                                               desc = 'FLAC';\r
-                                       else\r
-                                               desc = 'unknown';\r
-                               }\r
-                               // append details\r
-                               if (this.item && this.item.metadata)\r
-                               {\r
-                                       if (!!this.item.metadata && this.item.metadata.maximum_technical_specifications)\r
-                                               desc += ' ' + this.item.metadata.maximum_technical_specifications;\r
-                                       if (!!this.item.metadata && this.item.metadata.sample_rate && this.item.metadata.bit_depth)\r
-                                               desc += ' ' + this.item.metadata.sample_rate + 'kHz ' + this.item.metadata.bit_depth + 'bit';\r
-                               }\r
-                               return desc;\r
-                               }\r
-    }\r
-  })\r
index c6d264bfcf16d36a6cbb16fdd409a0d44cda56c6..7ef20ab8d81d889f0133476b2319d8595347cc4b 100644 (file)
@@ -8,7 +8,7 @@ Vue.component("volumecontrol", {
                                                </v-list-tile-avatar>\r
                                                <v-list-tile-content>\r
                                                        <v-list-tile-title>{{ players[player_id].name }}</v-list-tile-title>\r
-                                                       <v-list-tile-sub-title>{{ players[player_id].state }}</v-list-tile-sub-title>\r
+                                                       <v-list-tile-sub-title>{{ $t('state.' + players[player_id].state) }}</v-list-tile-sub-title>\r
                                                </v-list-tile-content>\r
                                                </v-list-tile-action>\r
                                        </v-list-tile>\r
@@ -39,6 +39,8 @@ Vue.component("volumecontrol", {
                                                                                prepend-icon="volume_down"\r
                                                                                append-icon="volume_up"\r
                                                                                @end="$emit('setPlayerVolume', child_id, $event)"\r
+                                                                               @click:append="$emit('setPlayerVolume', child_id, 'up')"\r
+                                                                       @click:prepend="$emit('setPlayerVolume', child_id, 'down')"\r
                                                                        ></v-slider>\r
                                                                </v-list-tile-sub-title>\r
                                                        </v-list-tile-content>\r
index 334025156d68ec61bf2f3820a0dfda8932d7387a..375ebf21682ca7337fa97552c04c008e382c1460 100755 (executable)
@@ -81,7 +81,8 @@
                     endpoint = "/playlists/"
                 item_id = item.item_id.toString();
                 var url = endpoint + item_id;
-                router.push({ path: url, params: {provider: item.provider}});
+                console.log(url + ' - ' + item.provider);
+                router.push({ path: url, query: {provider: item.provider}});
             }
 
             String.prototype.formatDuration = function () {
         <script src='./components/playmenu.vue.js'></script>
         <script src='./components/volumecontrol.vue.js'></script>
         <script src='./components/infoheader.vue.js'></script>
-        <script src='./components/qualityicon.vue.js'></script>
+        <script src='./components/providericons.vue.js'></script>
         <script src='./components/searchbox.vue.js'></script>
         
         <script src='./strings.js'></script>
index 073c3d9e59882eee8f0d1266bdad9411720b7108..46600303ce63e53bc115b198b554f12cd506112a 100755 (executable)
@@ -73,7 +73,8 @@ var ArtistDetails = Vue.component('ArtistDetails', {
     },
     getInfo (lazy=true) {
       this.$globals.loading = true;
-      const api_url = '/api/artists/' + this.media_id
+      const api_url = '/api/artists/' + this.media_id;
+      console.log(api_url + ' - ' + this.provider);
       axios
         .get(api_url, { params: { lazy: lazy, provider: this.provider }})
         .then(result => {
index 9ee1da7411dd0aab1228a31181d9c26b0e2bf345..b9c617d4d02a135c0111af3a4f1da148a1c1c18c 100755 (executable)
@@ -33,6 +33,7 @@ var PlaylistDetails = Vue.component('PlaylistDetails', {
       info: {},
       items: [],
       offset: 0,
+      active: 0
     }
   },
   created() {
index d470208fb0656d80c03ea80cda899963828d8171..9bc25a94745e9e58616f67fa100fe1a7a38bdbce 100755 (executable)
@@ -24,45 +24,19 @@ var Queue = Vue.component('Queue', {
   },
   created() {
     this.$globals.windowtitle = this.$t('queue')
-    this.getQueueTracks();
-    this.scroll(this.Queue);
+    this.getQueueTracks(0, 25);
   },
   methods: {
-    getInfo () {
-      const api_url = '/api/players/' + this.media_id
-      axios
-      .get(api_url, { params: { provider: this.provider }})
-        .then(result => {
-          data = result.data;
-          this.info = data;
-        })
-        .catch(error => {
-          console.log("error", error);
-        });
-    },
-    getQueueTracks () {
-      this.$globals.loading = true
+
+    getQueueTracks (offset, limit) {
       const api_url = '/api/players/' + this.player_id + '/queue'
-      axios
-        .get(api_url, { params: { offset: this.offset, limit: 50}})
-        .then(result => {
-          data = result.data;
-          this.items.push(...data);
-          this.offset += 25;
-          this.$globals.loading = false;
+      return axios.get(api_url, { params: { offset: offset, limit: limit}})
+        .then(response => {
+            if (response.data.length < 1 )
+              return;
+            this.items.push(...response.data)
+            return this.getQueueTracks(offset+limit, 100)
         })
-        .catch(error => {
-          console.log("error", error);
-        });
-        
-    },
-    scroll (Browse) {
-      window.onscroll = () => {
-        let bottomOfWindow = document.documentElement.scrollTop + window.innerHeight === document.documentElement.offsetHeight;
-        if (bottomOfWindow) {
-          this.getQueueTracks();
-        }
-      };
     }
   }
 })
index 497f6b350da50ac4c0ac966a772cde375fbeefeb..e8f08963d6c28e197c9a53e18408e4a598a6e54c 100755 (executable)
@@ -40,7 +40,7 @@ var TrackDetails = Vue.component('TrackDetails', {
     }
   },
   created() {
-    this.$globals.windowtitle = "Track info"
+    this.$globals.windowtitle = ""
     this.getInfo();
   },
   methods: {
index 051fa7e222114c4bb2774822d78aec02244789ef..09c3ed1832de331486440df6e8946ec5fec308df 100644 (file)
@@ -42,6 +42,19 @@ const messages = {
         player_power_play: "Issue play command on power on",
         file_prov_music_path: "Path to music files",
         file_prov_playlists_path: "Path to playlists (.m3u)",
+        // player strings
+        players: "Players",
+        play_on: "Play on:",
+        play_now: "Play Now",
+        play_next: "Play Next",
+        add_queue: "Add to Queue",
+        show_info: "Show info",
+        state: {        
+            playing: "playing",
+            stopped: "stopped",
+            paused: "paused",
+            off: "off"
+        }
 
     },
 
@@ -86,5 +99,18 @@ const messages = {
         player_power_play: "Automatisch afspelen bij inschakelen",
         file_prov_music_path: "Pad naar muziek bestanden",
         file_prov_playlists_path: "Pad naar playlist bestanden (.m3u)",
+        // player strings
+        players: "Spelers",
+        play_on: "Afspelen op:",
+        play_now: "Nu afspelen",
+        play_next: "Speel als volgende af",
+        add_queue: "Voeg toe aan wachtrij",
+        show_info: "Bekijk informatie",
+        state: {        
+            playing: "afspelen",
+            stopped: "gestopt",
+            paused: "gepauzeerd",
+            off: "uitgeschakeld"
+        }
     }
 }
\ No newline at end of file