})\r
}\r
return desc\r
+ },\r
+ getQualityInfo () {\r
+\r
},\r
getUniqueProviders () {\r
var keys = []\r
}\r
}\r
return qualities\r
- },\r
- getFileFormatLogo (provider) {\r
- if (provider.quality === 0) return 'mp3.png'\r
- else if (provider.quality === 1) return 'vorbis.png'\r
- else if (provider.quality === 2) return 'aac.png'\r
- else if (provider.quality > 2) return 'flac.png'\r
- },\r
- getFileFormatDesc (provider) {\r
- var desc = ''\r
- if (provider.details) desc += ' ' + provider.details\r
- return desc\r
}\r
}\r
})\r
<div>
<v-list-item
ripple
- @click.left="itemClicked(item)"
+ @click.left="onclickHandler ? onclickHandler(item) : itemClicked(item)"
@contextmenu="menuClick"
@contextmenu.prevent
v-longpress="menuClick"
</v-list-item-action>
<v-list-item-action v-if="isHiRes">
- <img :src="require('../assets/hires.png')" height="20" />
+ <v-tooltip bottom>
+ <template v-slot:activator="{ on }">
+ <img :src="require('../assets/hires.png')" height="20" v-on="on" />
+ </template>
+ <span>{{ isHiRes }}</span>
+ </v-tooltip>
</v-list-item-action>
<v-list-item-action v-if="!hidelibrary">
isHiRes () {
for (var prov of this.item.provider_ids) {
if (prov.quality > 6) {
- return true
+ if (prov.details) {
+ return prov.details
+ } else if (prov.quality === 7) {
+ return '44.1/48khz 24 bits'
+ } else if (prov.quality === 8) {
+ return '88.2/96khz 24 bits'
+ } else if (prov.quality === 9) {
+ return '176/192khz 24 bits'
+ } else {
+ return '+192kHz 24 bits'
+ }
}
}
- return false
+ return ''
}
},
created () { },
methods: {
itemClicked (mediaItem = null) {
// mediaItem in the list is clicked
- if (this.onclickHandler) return this.onclickHandler(mediaItem)
let url = ''
if (mediaItem.media_type === 1) {
url = '/artists/' + mediaItem.item_id
</span>
</v-list-item-subtitle>
</v-list-item-content>
+ <!-- streaming quality details -->
+ <v-list-item-action v-if="streamDetails">
+ <v-menu
+ :close-on-content-click="false"
+ :nudge-width="250"
+ offset-x
+ top
+ @click.native.prevent
+ >
+ <template v-slot:activator="{ on }">
+ <v-btn icon v-on="on">
+ <v-img contain v-if="streamDetails.quality > 6" :src="require('../assets/hires.png')" height="30" />
+ <v-img contain v-if="streamDetails.quality <= 6" :src="streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''" height="30" style='filter: invert(100%);' />
+ </v-btn>
+ </template>
+ <v-list v-if="streamDetails">
+ <v-subheader class="title">{{ $t('stream_details') }}</v-subheader>
+ <v-list-item tile dense>
+ <v-list-item-icon>
+ <v-img max-width="50" contain :src="streamDetails.provider ? require('../assets/' + streamDetails.provider + '.png') : ''" />
+ </v-list-item-icon>
+ <v-list-item-content>
+ <v-list-item-title>{{ streamDetails.provider }}</v-list-item-title>
+ </v-list-item-content>
+ </v-list-item>
+ <v-divider></v-divider>
+ <v-list-item tile dense>
+ <v-list-item-icon>
+ <v-img max-width="50" contain :src="streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''" style='filter: invert(100%);' />
+ </v-list-item-icon>
+ <v-list-item-content>
+ <v-list-item-title>{{ streamDetails.sample_rate/1000 }} kHz / {{ streamDetails.bit_depth }} bits </v-list-item-title>
+ </v-list-item-content>
+ </v-list-item>
+ <v-divider></v-divider>
+ <div v-if="playerQueueDetails.crossfade_enabled">
+ <v-list-item tile dense>
+ <v-list-item-icon>
+ <v-img max-width="50" contain :src="require('../assets/crossfade.png')"/>
+ </v-list-item-icon>
+ <v-list-item-content>
+ <v-list-item-title>{{ $t('crossfade_enabled') }}</v-list-item-title>
+ </v-list-item-content>
+ </v-list-item>
+ <v-divider></v-divider>
+ </div>
+ <div v-if="streamVolumeLevelAdjustment">
+ <v-list-item tile dense>
+ <v-list-item-icon>
+ <v-icon color="black" style="margin-left:13px">volume_up</v-icon>
+ </v-list-item-icon>
+ <v-list-item-content>
+ <v-list-item-title style="margin-left:12px">{{ streamVolumeLevelAdjustment }}</v-list-item-title>
+ </v-list-item-content>
+ </v-list-item>
+ <v-divider></v-divider>
+ </div>
+ </v-list>
+ </v-menu>
+ </v-list-item-action>
</v-list-item>
<!-- progress bar -->
},
progressBarWidth () {
return window.innerWidth - 160
+ },
+ streamDetails () {
+ if (!this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item.streamdetails.provider || !this.playerQueueDetails.cur_item.streamdetails.content_type) return {}
+ return this.playerQueueDetails.cur_item.streamdetails
+ },
+ streamVolumeLevelAdjustment () {
+ if (!this.streamDetails || !this.streamDetails.sox_options) return ''
+ if (this.streamDetails.sox_options.includes('vol ')) {
+ var re = /(.*vol\s+)(.*)(\s+dB.*)/
+ var volLevel = this.streamDetails.sox_options.replace(re, '$2')
+ return volLevel + ' dB'
+ }
+ return ''
}
},
created () {
"add_queue" : "Add to Queue",
"queue_clear" : "Clear queue",
"show_info" : "Show info",
- "queue_next_tracks": "Next tracks",
- "queue_previous_tracks": "Played tracks",
+ "queue_next_tracks": "Next",
+ "queue_previous_tracks": "Played",
"queue_move_up" : "Move up",
"queue_move_down" : "Move down",
"queue_options" : "Queue options",
"enable_shuffle" : "Enable shuffle",
"disable_shuffle" : "Disable shuffle",
"read_more": "read more",
+ "stream_details": "Streamdetails",
+ "crossfade_enabled": "Crossfade enabled",
"state" : {
"playing" : "playing",
"stopped" : "stopped",
"queue_clear" : "Wachtrij leegmaken",
"show_info" : "Bekijk informatie",
"queue_next_tracks": "Aankomend",
- "queue_previous_tracks": "Reeds afgespeeld",
+ "queue_previous_tracks": "Afgespeeld",
"queue_move_up" : "Verplaats omhoog",
"queue_move_down" : "Verplaats omlaag",
"queue_options" : "Wachtrij opties",
"enable_shuffle" : "Shuffle inschakelen",
"disable_shuffle" : "Shuffle uitschakelen",
"read_more": "meer lezen",
+ "stream_details": "Streamdetails",
+ "crossfade_enabled": "Crossfade ingeschakeld",
"state" : {
"playing" : "afspelen",
"stopped" : "gestopt",
} else if (mediaItem.artist && mediaItem.artist.metadata && mediaItem.artist.metadata[imageType]) {
return mediaItem.artist.metadata[imageType]
} else if (mediaItem.album && mediaItem.album.artist && mediaItem.album.artist.metadata && mediaItem.album.artist.metadata[imageType]) {
- return mediaItem.artist.metadata[imageType]
+ return mediaItem.album.artist.metadata[imageType]
+ } else if (mediaItem.artists && mediaItem.artists[0].metadata && mediaItem.artists[0].metadata[imageType]) {
+ return mediaItem.artists[0].metadata[imageType]
} else return ''
},
}
this.retrieveInfos()
},
- beforeDestroy () {
- this.$server.$off('refresh_listing')
- },
methods: {
retrieveInfos () {
// retrieve the item details
<template>
<section>
- <v-tabs v-model="activeTab" grow>
+ <v-tabs v-model="activeTab" grow show-arrows>
<v-tab>
{{ $t("queue_next_tracks") + " (" + next_items.length + ")" }}</v-tab
>
</v-tab-item>
<v-menu offset-y>
<template v-slot:activator="{ on }">
- <v-btn text v-on="on" class="align-self-center mr-4">
+ <v-btn text v-on="on" class="align-self-center mr-4" v-if="!$store.isMobile">
{{ $t("queue_options") }}
<v-icon right>arrow_drop_down</v-icon>
</v-btn>
+ <v-btn icon v-on="on" class="align-self-center mr-4" v-if="$store.isMobile">
+ <v-icon>settings</v-icon>
+ </v-btn>
</template>
<v-list>
</v-tabs>
<v-dialog
v-model="showPlayMenu"
- @input="$emit('input', $event)"
max-width="500px"
>
<v-card>
# part is too short after the strip action?!
# so we just use the full first part
first_part = prev_chunk + chunk
+ LOGGER.warning("Not enough data after strip action: %s", len(first_part))
fade_in_part = first_part[:fade_bytes]
remaining_bytes = first_part[fade_bytes:]
del first_part
# part is too short after the strip action
# so we just use the entire original data
last_part = prev_chunk + chunk
+ LOGGER.warning("Not enough data for last_part after strip action: %s", len(last_part))
if not player.queue.crossfade_enabled:
# crossfading is not enabled so just pass the (stripped) audio data
sox_proc.stdin.write(last_part)
if (self._player.cur_time == 0 and
self._player.state in [PlayerState.Stopped, PlayerState.Off]):
# player stopped playing
- await self.mass.signal_event(EVENT_PLAYBACK_STOPPED, self._last_track.streamdetails)
+ if self._last_track:
+ await self.mass.signal_event(
+ EVENT_PLAYBACK_STOPPED, self._last_track.streamdetails)
# update vars
if track_time > 2:
# account for track changing state so keep this a few seconds behind
async def artist_toptracks(self, artist_id,
provider='database') -> List[Track]:
''' get top tracks for given artist '''
+ track_names = []
artist = await self.artist(artist_id, provider)
# always append database tracks
async for item in self.mass.db.artist_tracks(artist.item_id):
- yield item
- # for prov_mapping in artist.provider_ids:
- # prov_id = prov_mapping['provider']
- # prov_item_id = prov_mapping['item_id']
- # prov_obj = self.providers[prov_id]
- # items += [item async for item in prov_obj.artist_toptracks(prov_item_id)]
- # items = list(toolz.unique(items, key=operator.attrgetter('item_id')))
- # #items.sort(key=lambda x: x.name, reverse=False)
- # return items
+ if (item.name + item.version) not in track_names:
+ yield item
+ track_names.append(item.name+item.version)
+ for prov_mapping in artist.provider_ids:
+ prov_id = prov_mapping['provider']
+ prov_item_id = prov_mapping['item_id']
+ prov_obj = self.providers[prov_id]
+ async for item in prov_obj.artist_toptracks(prov_item_id):
+ if (item.name + item.version) not in track_names:
+ yield item
+ track_names.append(item.name+item.version)
async def artist_albums(self, artist_id,
provider='database') -> List[Album]:
''' get (all) albums for given artist '''
+ album_names = []
artist = await self.artist(artist_id, provider)
# always append database tracks
async for item in self.mass.db.artist_albums(artist.item_id):
- yield item
- # for prov_mapping in artist.provider_ids:
- # prov_id = prov_mapping['provider']
- # prov_item_id = prov_mapping['item_id']
- # prov_obj = self.providers[prov_id]
- # items += [item async for item in prov_obj.artist_albums(prov_item_id)]
- # items = list(toolz.unique(items, key=operator.attrgetter('item_id')))
- #items.sort(key=lambda x: x.name, reverse=False)
- #return items
+ if (item.name + item.version) not in album_names:
+ yield item
+ album_names.append(item.name+item.version)
+ for prov_mapping in artist.provider_ids:
+ prov_id = prov_mapping['provider']
+ prov_item_id = prov_mapping['item_id']
+ prov_obj = self.providers[prov_id]
+ async for item in prov_obj.artist_albums(prov_item_id):
+ if (item.name + item.version) not in album_names:
+ yield item
+ album_names.append(item.name+item.version)
async def album_tracks(self, album_id, provider='database') -> List[Track]:
''' get the album tracks for given album '''
elif msg == EVENT_PLAYBACK_STOPPED and msg_details[
"provider"] == self.prov_id:
# report streaming ended to qobuz
+ if msg_details.get('msg_details',0) < 6:
+ return
user_id = self.__user_auth_info["user"]["id"]
params = {
'user_id': user_id,
track.external_ids.append({key: value})
if 'album' in track_obj:
track.album = await self.__parse_album(track_obj['album'])
+ if not track.album:
+ track.album = await self.get_album(track_obj['album']['id'])
if track_obj.get('copyright'):
track.metadata["copyright"] = track_obj['copyright']
if track_obj.get('explicit'):
+++ /dev/null
-.vertical-btn[data-v-1cdf04ce]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.divider[data-v-1cdf04ce]{height:1px;width:100%;background-color:#ccc}.right[data-v-1cdf04ce]{float:right}.left[data-v-1cdf04ce]{float:left}.vertical-btn[data-v-502704d8]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.body{background-color:#000;overscroll-behavior-x:none}
\ No newline at end of file
--- /dev/null
+.vertical-btn[data-v-6419b11e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.divider[data-v-6419b11e]{height:1px;width:100%;background-color:#ccc}.right[data-v-6419b11e]{float:right}.left[data-v-6419b11e]{float:left}.vertical-btn[data-v-502704d8]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.body{background-color:#000;overscroll-behavior-x:none}
\ No newline at end of file
--- /dev/null
+.scroller[data-v-b744953c]{height:100%}
\ No newline at end of file
+++ /dev/null
-.scroller[data-v-d414543e]{height:100%}
\ No newline at end of file
-<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="favicon.ico"><![endif]--><title>Music Assistant</title><link href=css/config.18def958.css rel=prefetch><link href=css/config~search.af60f7e1.css rel=prefetch><link href=css/itemdetails.742ba64e.css rel=prefetch><link href=css/itemdetails~playerqueue~search.93e2919b.css rel=prefetch><link href=js/config.06165bdd.js rel=prefetch><link href=js/config~search.9f3e890b.js rel=prefetch><link href=js/itemdetails.f383b9f8.js rel=prefetch><link href=js/itemdetails~playerqueue~search.1e2b2bfd.js rel=prefetch><link href=js/playerqueue.231c77e4.js rel=prefetch><link href=js/search.6612f8cb.js rel=prefetch><link href=css/app.53896a2f.css rel=preload as=style><link href=css/chunk-vendors.7d5374e7.css rel=preload as=style><link href=js/app.ddc40933.js rel=preload as=script><link href=js/chunk-vendors.ee1264d7.js rel=preload as=script><link href=css/chunk-vendors.7d5374e7.css rel=stylesheet><link href=css/app.53896a2f.css rel=stylesheet><link rel=icon type=image/png sizes=32x32 href=img/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=img/icons/favicon-16x16.png><link rel=manifest href=manifest.json><meta name=theme-color content=#424242><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><meta name=apple-mobile-web-app-title content="Music Assistant"><link rel=apple-touch-icon href=img/icons/apple-touch-icon-152x152.png><link rel=mask-icon href=img/icons/safari-pinned-tab.svg color=#424242><meta name=msapplication-TileImage content=img/icons/msapplication-icon-144x144.png><meta name=msapplication-TileColor content=#424242></head><body><noscript><strong>We're sorry but musicassistant-frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.ee1264d7.js></script><script src=js/app.ddc40933.js></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="favicon.ico"><![endif]--><title>Music Assistant</title><link href=css/config.18def958.css rel=prefetch><link href=css/config~search.af60f7e1.css rel=prefetch><link href=css/itemdetails.0e5e583e.css rel=prefetch><link href=css/itemdetails~playerqueue~search.93e2919b.css rel=prefetch><link href=js/config.06165bdd.js rel=prefetch><link href=js/config~search.9f3e890b.js rel=prefetch><link href=js/itemdetails.46a862f8.js rel=prefetch><link href=js/itemdetails~playerqueue~search.1e2b2bfd.js rel=prefetch><link href=js/playerqueue.5bd65be6.js rel=prefetch><link href=js/search.6612f8cb.js rel=prefetch><link href=css/app.70c10f28.css rel=preload as=style><link href=css/chunk-vendors.7d5374e7.css rel=preload as=style><link href=js/app.3be71134.js rel=preload as=script><link href=js/chunk-vendors.ee1264d7.js rel=preload as=script><link href=css/chunk-vendors.7d5374e7.css rel=stylesheet><link href=css/app.70c10f28.css rel=stylesheet><link rel=icon type=image/png sizes=32x32 href=img/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=img/icons/favicon-16x16.png><link rel=manifest href=manifest.json><meta name=theme-color content=#424242><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><meta name=apple-mobile-web-app-title content="Music Assistant"><link rel=apple-touch-icon href=img/icons/apple-touch-icon-152x152.png><link rel=mask-icon href=img/icons/safari-pinned-tab.svg color=#424242><meta name=msapplication-TileImage content=img/icons/msapplication-icon-144x144.png><meta name=msapplication-TileColor content=#424242></head><body><noscript><strong>We're sorry but musicassistant-frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.ee1264d7.js></script><script src=js/app.3be71134.js></script></body></html>
\ No newline at end of file
--- /dev/null
+(function(e){function t(t){for(var r,i,o=t[0],l=t[1],c=t[2],u=0,p=[];u<o.length;u++)i=o[u],Object.prototype.hasOwnProperty.call(n,i)&&n[i]&&p.push(n[i][0]),n[i]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);d&&d(t);while(p.length)p.shift()();return s.push.apply(s,c||[]),a()}function a(){for(var e,t=0;t<s.length;t++){for(var a=s[t],r=!0,i=1;i<a.length;i++){var o=a[i];0!==n[o]&&(r=!1)}r&&(s.splice(t--,1),e=l(l.s=a[0]))}return e}var r={},i={app:0},n={app:0},s=[];function o(e){return l.p+"js/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"9f3e890b",config:"06165bdd","itemdetails~playerqueue~search":"1e2b2bfd",search:"6612f8cb",itemdetails:"46a862f8",playerqueue:"5bd65be6"}[e]+".js"}function l(t){if(r[t])return r[t].exports;var a=r[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,l),a.l=!0,a.exports}l.e=function(e){var t=[],a={"config~search":1,config:1,"itemdetails~playerqueue~search":1,itemdetails:1};i[e]?t.push(i[e]):0!==i[e]&&a[e]&&t.push(i[e]=new Promise((function(t,a){for(var r="css/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"af60f7e1",config:"18def958","itemdetails~playerqueue~search":"93e2919b",search:"31d6cfe0",itemdetails:"0e5e583e",playerqueue:"31d6cfe0"}[e]+".css",n=l.p+r,s=document.getElementsByTagName("link"),o=0;o<s.length;o++){var c=s[o],u=c.getAttribute("data-href")||c.getAttribute("href");if("stylesheet"===c.rel&&(u===r||u===n))return t()}var p=document.getElementsByTagName("style");for(o=0;o<p.length;o++){c=p[o],u=c.getAttribute("data-href");if(u===r||u===n)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var r=t&&t.target&&t.target.src||n,s=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");s.code="CSS_CHUNK_LOAD_FAILED",s.request=r,delete i[e],d.parentNode.removeChild(d),a(s)},d.href=n;var m=document.getElementsByTagName("head")[0];m.appendChild(d)})).then((function(){i[e]=0})));var r=n[e];if(0!==r)if(r)t.push(r[2]);else{var s=new Promise((function(t,a){r=n[e]=[t,a]}));t.push(r[2]=s);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=o(e);var p=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(d);var a=n[e];if(0!==a){if(a){var r=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;p.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",p.name="ChunkLoadError",p.type=r,p.request=i,a[1](p)}n[e]=void 0}};var d=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=r,l.d=function(e,t,a){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(l.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)l.d(a,r,function(t){return e[t]}.bind(null,r));return a},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw e};var c=window["webpackJsonp"]=window["webpackJsonp"]||[],u=c.push.bind(c);c.push=t,c=c.slice();for(var p=0;p<c.length;p++)t(c[p]);var d=u;s.push([0,"chunk-vendors"]),a()})({0:function(e,t,a){e.exports=a("56d7")},"034f":function(e,t,a){"use strict";var r=a("19b3"),i=a.n(r);i.a},"0863":function(e,t,a){e.exports=a.p+"img/qobuz.c7eb9a76.png"},"0c3b":function(e,t,a){e.exports=a.p+"img/spotify.1f3fb1af.png"},"19b3":function(e,t,a){},"21b2":function(e,t,a){"use strict";var r=a("dd63"),i=a.n(r);i.a},2755:function(e,t,a){e.exports=a.p+"img/http_streamer.4c4e4880.png"},3208:function(e,t,a){},3232:function(e,t,a){e.exports=a.p+"img/homeassistant.29fe3282.png"},"3d05":function(e,t,a){e.exports=a.p+"img/webplayer.8e1a0da9.png"},"49f8":function(e,t,a){var r={"./en.json":"edd4","./nl.json":"a625"};function i(e){var t=n(e);return a(t)}function n(e){if(!a.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=n,e.exports=i,i.id="49f8"},"4bfb":function(e,t,a){e.exports=a.p+"img/default_artist.7305b29c.png"},"56d7":function(e,t,a){"use strict";a.r(t);a("e25e"),a("e260"),a("e6cf"),a("cca6"),a("a79d");var r=a("2b0e"),i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-app",[a("TopBar"),a("NavigationMenu"),a("v-content",[a("router-view",{key:e.$route.path,attrs:{app:""}})],1),a("PlayerOSD",{attrs:{showPlayerSelect:e.showPlayerSelect}}),a("ContextMenu"),a("PlayerSelect"),a("v-overlay",{attrs:{value:e.$store.loading}},[a("v-progress-circular",{attrs:{indeterminate:"",size:"64"}})],1)],1)},n=[],s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-navigation-drawer",{attrs:{dark:"",app:"",clipped:"",temporary:""},model:{value:e.$store.showNavigationMenu,callback:function(t){e.$set(e.$store,"showNavigationMenu",t)},expression:"$store.showNavigationMenu"}},[a("v-list",[e._l(e.items,(function(t){return a("v-list-item",{key:t.title,on:{click:function(a){return e.$router.push(t.path)}}},[a("v-list-item-action",[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",[e._v(e._s(t.title))])],1)],1)})),a("v-btn",{attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}})],2)],1)},o=[],l=r["a"].extend({props:{},data:function(){return{items:[{title:this.$t("home"),icon:"home",path:"/"},{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("radios"),icon:"radio",path:"/radios"},{title:this.$t("search"),icon:"search",path:"/search"},{title:this.$t("settings"),icon:"settings",path:"/config"}]}},mounted:function(){},methods:{}}),c=l,u=a("2877"),p=a("6544"),d=a.n(p),m=a("8336"),h=a("132d"),v=a("8860"),f=a("da13"),g=a("1800"),y=a("5d23"),A=a("f774"),b=Object(u["a"])(c,s,o,!1,null,null,null),k=b.exports;d()(b,{VBtn:m["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VNavigationDrawer:A["a"]});var w=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-app-bar",{attrs:{app:"",flat:"",dense:"",dark:"",color:e.color}},[a("v-layout",[e.$store.topBarTransparent?e._e():a("div",{staticClass:"body-1",staticStyle:{position:"fixed",width:"100%","text-align":"center","vertical-align":"center","margin-top":"11px"}},[e._v(e._s(e.$store.windowtitle))]),a("v-btn",{staticStyle:{"margin-left":"-13px"},attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}},[a("v-icon",[e._v("menu")])],1),a("v-btn",{attrs:{icon:""},on:{click:function(t){return e.$router.go(-1)}}},[a("v-icon",[e._v("arrow_back")])],1),a("v-spacer"),e.$store.topBarContextItem?a("v-btn",{staticStyle:{"margin-right":"-23px"},attrs:{icon:""},on:{click:function(t){return e.$server.$emit("showContextMenu",e.$store.topBarContextItem)}}},[a("v-icon",[e._v("more_vert")])],1):e._e()],1)],1)},I=[],x=r["a"].extend({props:{},data:function(){return{}},computed:{color:function(){return this.$store.topBarTransparent?"transparent":"black"}},mounted:function(){},methods:{}}),_=x,S=a("40dc"),P=a("a722"),D=a("2fa4"),R=Object(u["a"])(_,w,I,!1,null,null,null),C=R.exports;d()(R,{VAppBar:S["a"],VBtn:m["a"],VIcon:h["a"],VLayout:P["a"],VSpacer:D["a"]});var B=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-dialog",{attrs:{"max-width":"500px"},on:{input:function(t){return e.$emit("input",t)}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[a("v-card",[0===e.playlists.length?a("v-list",[a("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e.subheader?a("v-subheader",[e._v(e._s(e.subheader))]):e._e(),e._l(e.menuItems,(function(t){return a("div",{key:t.label},[a("v-list-item",{on:{click:function(a){return e.itemCommand(t.action)}}},[a("v-list-item-avatar",[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",[e._v(e._s(e.$t(t.label)))])],1)],1),a("v-divider")],1)}))],2):e._e(),e.playlists.length>0?a("v-list",[a("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e._l(e.playlists,(function(t,r){return a("listviewItem",{key:t.item_id,attrs:{item:t,totalitems:e.playlists.length,index:r,hideavatar:!1,hidetracknum:!0,hideproviders:!1,hidelibrary:!0,hidemenu:!0,onclickHandler:e.addToPlaylist}})}))],2):e._e()],1)],1)},O=[],M=(a("a4d3"),a("e01a"),a("d28b"),a("caad"),a("b0c0"),a("d3b7"),a("2532"),a("3ca3"),a("ddb0"),a("96cf"),a("89ba")),E=a("d3cc"),F=r["a"].extend({components:{ListviewItem:E["a"]},props:{},watch:{},data:function(){return{visible:!1,menuItems:[],header:"",subheader:"",curItem:null,curPlaylist:null,playerQueueItems:[],playlists:[]}},mounted:function(){},created:function(){this.$server.$on("showContextMenu",this.showContextMenu),this.$server.$on("showPlayMenu",this.showPlayMenu)},computed:{},methods:{showContextMenu:function(e){if(this.playlists=[],e){this.curItem=e;var t=this.$store.topBarContextItem,a=[];e!==t&&a.push({label:"show_info",action:"info",icon:"info"}),0===e.in_library.length&&a.push({label:"add_library",action:"toggle_library",icon:"favorite_border"}),e.in_library.length>0&&a.push({label:"remove_library",action:"toggle_library",icon:"favorite"}),t&&4===t.media_type&&(this.curPlaylist=t,3===e.media_type&&t.is_editable&&a.push({label:"remove_playlist",action:"remove_playlist",icon:"remove_circle_outline"})),3===e.media_type&&a.push({label:"add_playlist",action:"add_playlist",icon:"add_circle_outline"}),this.menuItems=a,this.header=e.name,this.subheader="",this.visible=!0}},showPlayMenu:function(e){if(this.playlists=[],this.curItem=e,e){var t=[{label:"play_now",action:"play",icon:"play_circle_outline"},{label:"play_next",action:"next",icon:"queue_play_next"},{label:"add_queue",action:"add",icon:"playlist_add"}];this.menuItems=t,this.header=e.name,this.subheader="",this.visible=!0}},showPlaylistsMenu:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(){var t,a,r,i,n,s,o,l,c,u,p,d,m,h,v,f,g,y,A,b,k;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:for(t=[],a=!0,r=!1,i=void 0,e.prev=4,n=this.curItem.provider_ids[Symbol.iterator]();!(a=(s=n.next()).done);a=!0)o=s.value,t.push(o.provider);e.next=12;break;case 8:e.prev=8,e.t0=e["catch"](4),r=!0,i=e.t0;case 12:e.prev=12,e.prev=13,a||null==n.return||n.return();case 15:if(e.prev=15,!r){e.next=18;break}throw i;case 18:return e.finish(15);case 19:return e.finish(12);case 20:return e.next=22,this.$server.getData("library/playlists");case 22:l=e.sent,c=[],u=!0,p=!1,d=void 0,e.prev=27,m=l["items"][Symbol.iterator]();case 29:if(u=(h=m.next()).done){e.next=62;break}if(v=h.value,!v.is_editable||this.curPlaylist&&v.item_id===this.curPlaylist.item_id){e.next=59;break}f=!0,g=!1,y=void 0,e.prev=35,A=v.provider_ids[Symbol.iterator]();case 37:if(f=(b=A.next()).done){e.next=45;break}if(k=b.value,!t.includes(k.provider)){e.next=42;break}return c.push(v),e.abrupt("break",45);case 42:f=!0,e.next=37;break;case 45:e.next=51;break;case 47:e.prev=47,e.t1=e["catch"](35),g=!0,y=e.t1;case 51:e.prev=51,e.prev=52,f||null==A.return||A.return();case 54:if(e.prev=54,!g){e.next=57;break}throw y;case 57:return e.finish(54);case 58:return e.finish(51);case 59:u=!0,e.next=29;break;case 62:e.next=68;break;case 64:e.prev=64,e.t2=e["catch"](27),p=!0,d=e.t2;case 68:e.prev=68,e.prev=69,u||null==m.return||m.return();case 71:if(e.prev=71,!p){e.next=74;break}throw d;case 74:return e.finish(71);case 75:return e.finish(68);case 76:this.playlists=c;case 77:case"end":return e.stop()}}),e,this,[[4,8,12,20],[13,,15,19],[27,64,68,76],[35,47,51,59],[52,,54,58],[69,,71,75]])})));function t(){return e.apply(this,arguments)}return t}(),itemCommand:function(e){if("info"===e){var t="";1===this.curItem.media_type&&(t="artists"),2===this.curItem.media_type&&(t="albums"),3===this.curItem.media_type&&(t="tracks"),4===this.curItem.media_type&&(t="playlists"),5===this.curItem.media_type&&(t="radios"),this.$router.push({path:"/"+t+"/"+this.curItem.item_id,query:{provider:this.curItem.provider}}),this.visible=!1}else{if("playmenu"===e)return this.showPlayMenu(this.curItem);if("add_playlist"===e)return this.showPlaylistsMenu();"remove_playlist"===e?(this.removeFromPlaylist(this.curItem,this.curPlaylist.item_id,"playlist_remove"),this.visible=!1):"toggle_library"===e?(this.$server.toggleLibrary(this.curItem),this.visible=!1):(this.$server.playItem(this.curItem,e),this.visible=!1)}},addToPlaylist:function(e){var t=this,a="playlists/"+e.item_id+"/tracks";this.$server.putData(a,this.curItem).then((function(e){t.visible=!1}))},removeFromPlaylist:function(e,t){var a=this,r="playlists/"+t+"/tracks";this.$server.deleteData(r,e).then((function(e){a.$server.$emit("refresh_listing")}))}}}),H=F,J=a("b0af"),L=a("169a"),z=a("ce7e"),N=a("8270"),V=a("e0c7"),Y=Object(u["a"])(H,B,O,!1,null,null,null),j=Y.exports;d()(Y,{VCard:J["a"],VDialog:L["a"],VDivider:z["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VSubheader:V["a"]});var T=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-footer",{staticStyle:{"background-color":"black"},attrs:{app:"",fixed:"",padless:"",light:"",elevation:"10"}},[r("v-card",{staticStyle:{"margin-top":"1px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"#E0E0E0"}},[r("v-list-item",{attrs:{"two-line":""}},[e.curQueueItem?r("v-list-item-avatar",{attrs:{tile:""}},[r("img",{staticStyle:{border:"1px solid rgba(0,0,0,.54)"},attrs:{src:e.$server.getImageUrl(e.curQueueItem),"lazy-src":a("71db")}})]):r("v-list-item-avatar",[r("v-icon",[e._v("speaker")])],1),r("v-list-item-content",[e.curQueueItem?r("v-list-item-title",[e._v(" "+e._s(e.curQueueItem.name))]):e.$server.activePlayer?r("v-list-item-title",[e._v(" "+e._s(e.$server.activePlayer.name))]):e._e(),e.curQueueItem?r("v-list-item-subtitle",{staticStyle:{color:"primary"}},e._l(e.curQueueItem.artists,(function(t,a){return r("span",{key:a},[r("a",{on:{click:[function(a){return e.artistClick(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),a+1<e.curQueueItem.artists.length?r("label",{key:a},[e._v(" / ")]):e._e()])})),0):e._e()],1),e.streamDetails?r("v-list-item-action",[r("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var i=t.on;return[r("v-btn",e._g({attrs:{icon:""}},i),[e.streamDetails.quality>6?r("v-img",{attrs:{contain:"",src:a("f5e3"),height:"30"}}):e._e(),e.streamDetails.quality<=6?r("v-img",{staticStyle:{filter:"invert(100%)"},attrs:{contain:"",src:e.streamDetails.content_type?a("9e01")("./"+e.streamDetails.content_type+".png"):"",height:"30"}}):e._e()],1)]}}],null,!1,872579316)},[e.streamDetails?r("v-list",[r("v-subheader",{staticClass:"title"},[e._v(e._s(e.$t("stream_details")))]),r("v-list-item",{attrs:{tile:"",dense:""}},[r("v-list-item-icon",[r("v-img",{attrs:{"max-width":"50",contain:"",src:e.streamDetails.provider?a("9e01")("./"+e.streamDetails.provider+".png"):""}})],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(e.streamDetails.provider))])],1)],1),r("v-divider"),r("v-list-item",{attrs:{tile:"",dense:""}},[r("v-list-item-icon",[r("v-img",{staticStyle:{filter:"invert(100%)"},attrs:{"max-width":"50",contain:"",src:e.streamDetails.content_type?a("9e01")("./"+e.streamDetails.content_type+".png"):""}})],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(e.streamDetails.sample_rate/1e3)+" kHz / "+e._s(e.streamDetails.bit_depth)+" bits ")])],1)],1),r("v-divider"),e.playerQueueDetails.crossfade_enabled?r("div",[r("v-list-item",{attrs:{tile:"",dense:""}},[r("v-list-item-icon",[r("v-img",{attrs:{"max-width":"50",contain:"",src:a("e7af")}})],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(e.$t("crossfade_enabled")))])],1)],1),r("v-divider")],1):e._e(),e.streamVolumeLevelAdjustment?r("div",[r("v-list-item",{attrs:{tile:"",dense:""}},[r("v-list-item-icon",[r("v-icon",{staticStyle:{"margin-left":"13px"},attrs:{color:"black"}},[e._v("volume_up")])],1),r("v-list-item-content",[r("v-list-item-title",{staticStyle:{"margin-left":"12px"}},[e._v(e._s(e.streamVolumeLevelAdjustment))])],1)],1),r("v-divider")],1):e._e()],1):e._e()],1)],1):e._e()],1),r("div",{staticClass:"body-2",staticStyle:{height:"30px",width:"100%",color:"rgba(0,0,0,.65)","margin-top":"-12px","background-color":"#E0E0E0"},attrs:{align:"center"}},[e.curQueueItem?r("div",{staticStyle:{height:"12px","margin-left":"22px","margin-right":"20px","margin-top":"2px"}},[r("span",{staticClass:"left"},[e._v(" "+e._s(e.playerCurTimeStr)+" ")]),r("span",{staticClass:"right"},[e._v(" "+e._s(e.playerTotalTimeStr)+" ")])]):e._e()]),e.curQueueItem?r("v-progress-linear",{style:"margin-top:-22px;margin-left:80px;width:"+e.progressBarWidth+"px;",attrs:{fixed:"",light:"",value:e.progress}}):e._e()],1),r("v-list-item",{staticStyle:{height:"44px","margin-bottom":"5px","margin-top":"-4px","background-color":"black"},attrs:{dark:"",dense:""}},[e.$server.activePlayer?r("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[r("v-btn",{attrs:{small:"",icon:""},on:{click:function(t){return e.playerCommand("previous")}}},[r("v-icon",[e._v("skip_previous")])],1)],1):e._e(),e.$server.activePlayer?r("v-list-item-action",{staticStyle:{"margin-left":"-32px","margin-top":"15px"}},[r("v-btn",{attrs:{icon:"","x-large":""},on:{click:function(t){return e.playerCommand("play_pause")}}},[r("v-icon",{attrs:{size:"50"}},[e._v(e._s("playing"==e.$server.activePlayer.state?"pause":"play_arrow"))])],1)],1):e._e(),e.$server.activePlayer?r("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[r("v-btn",{attrs:{icon:"",small:""},on:{click:function(t){return e.playerCommand("next")}}},[r("v-icon",[e._v("skip_next")])],1)],1):e._e(),r("v-list-item-content"),e.$server.activePlayer?r("v-list-item-action",{staticStyle:{padding:"28px"}},[r("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$router.push("/playerqueue/")}}},[r("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[r("v-icon",[e._v("queue_music")]),r("span",{staticClass:"overline"},[e._v(e._s(e.$t("queue")))])],1)],1)],1):e._e(),e.$server.activePlayer&&!e.$store.isMobile?r("v-list-item-action",{staticStyle:{padding:"20px"}},[r("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on;return[r("v-btn",e._g({attrs:{small:"",icon:""}},a),[r("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[r("v-icon",[e._v("volume_up")]),r("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.activePlayer.volume_level)))])],1)],1)]}}],null,!1,1951340450)},[r("VolumeControl",{attrs:{players:e.$server.players,player_id:e.$server.activePlayer.player_id}})],1)],1):e._e(),r("v-list-item-action",{staticStyle:{padding:"20px","margin-right":"15px"}},[r("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$server.$emit("showPlayersMenu")}}},[r("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[r("v-icon",[e._v("speaker")]),e.$server.activePlayer?r("span",{staticClass:"overline"},[e._v(e._s(e.$server.activePlayer.name))]):r("span",{staticClass:"overline"})],1)],1)],1)],1),e.$store.isInStandaloneMode?r("v-card",{staticStyle:{height:"20px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"black"}}):e._e()],1)},U=[],X=(a("0d03"),a("4fad"),a("ac1f"),a("25f0"),a("5319"),a("e587")),Q=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-card",[a("v-list",[a("v-list-item",{staticStyle:{height:"50px","padding-bottom":"5"}},[a("v-list-item-avatar",{staticStyle:{"margin-left":"-10px"},attrs:{tile:""}},[a("v-icon",{attrs:{large:""}},[e._v(e._s(e.players[e.player_id].is_group?"speaker_group":"speaker"))])],1),a("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[a("v-list-item-title",[e._v(e._s(e.players[e.player_id].name))]),a("v-list-item-subtitle",[e._v(e._s(e.$t("state."+e.players[e.player_id].state)))])],1)],1),a("v-divider"),e._l(e.volumePlayerIds,(function(t){return a("div",{key:t},[a("div",{staticClass:"body-2",style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);"},[a("v-btn",{staticStyle:{"margin-left":"8px"},style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);",attrs:{icon:""},on:{click:function(a){return e.togglePlayerPower(t)}}},[a("v-icon",[e._v("power_settings_new")])],1),a("span",{staticStyle:{"margin-left":"10px"}},[e._v(e._s(e.players[t].name))]),a("div",{staticStyle:{"margin-top":"-8px","margin-left":"15px","margin-right":"15px",height:"35px"}},[e.players[t].disable_volume?e._e():a("v-slider",{attrs:{lazy:"",disabled:!e.players[t].powered,value:Math.round(e.players[t].volume_level),"prepend-icon":"volume_down","append-icon":"volume_up"},on:{end:function(a){return e.setPlayerVolume(t,a)},"click:append":function(a){return e.setPlayerVolume(t,"up")},"click:prepend":function(a){return e.setPlayerVolume(t,"down")}}})],1)],1),a("v-divider")],1)}))],2)],1)},G=[],K=a("284c"),W=r["a"].extend({props:["value","players","player_id"],data:function(){return{}},computed:{volumePlayerIds:function(){var e=[this.player_id];return e.push.apply(e,Object(K["a"])(this.players[this.player_id].group_childs)),e}},mounted:function(){},methods:{setPlayerVolume:function(e,t){this.players[e].volume_level=t,"up"===t?this.$server.playerCommand("volume_up",null,e):"down"===t?this.$server.playerCommand("volume_down",null,e):this.$server.playerCommand("volume_set",t,e)},togglePlayerPower:function(e){this.$server.playerCommand("power_toggle",null,e)}}}),q=W,Z=a("ba0d"),$=Object(u["a"])(q,Q,G,!1,null,null,null),ee=$.exports;d()($,{VBtn:m["a"],VCard:J["a"],VDivider:z["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VSlider:Z["a"]});var te=r["a"].extend({components:{VolumeControl:ee},props:[],data:function(){return{playerQueueDetails:{}}},watch:{},computed:{curQueueItem:function(){return this.playerQueueDetails?this.playerQueueDetails.cur_item:null},progress:function(){if(!this.curQueueItem)return 0;var e=this.curQueueItem.duration,t=this.playerQueueDetails.cur_item_time,a=t/e*100;return a},playerCurTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.playerQueueDetails.cur_item_time;return e.toString().formatDuration()},playerTotalTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.curQueueItem.duration;return e.toString().formatDuration()},progressBarWidth:function(){return window.innerWidth-160},streamDetails:function(){return this.playerQueueDetails.cur_item&&this.playerQueueDetails.cur_item&&this.playerQueueDetails.cur_item.streamdetails.provider&&this.playerQueueDetails.cur_item.streamdetails.content_type?this.playerQueueDetails.cur_item.streamdetails:{}},streamVolumeLevelAdjustment:function(){if(!this.streamDetails||!this.streamDetails.sox_options)return"";if(this.streamDetails.sox_options.includes("vol ")){var e=/(.*vol\s+)(.*)(\s+dB.*)/,t=this.streamDetails.sox_options.replace(e,"$2");return t+" dB"}return""}},created:function(){this.$server.$on("queue updated",this.queueUpdatedMsg),this.$server.$on("new player selected",this.getQueueDetails)},methods:{playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.$server.playerCommand(e,t,this.$server.activePlayerId)},artistClick:function(e){var t="/artists/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},queueUpdatedMsg:function(e){if(e.player_id===this.$server.activePlayerId)for(var t=0,a=Object.entries(e);t<a.length;t++){var i=Object(X["a"])(a[t],2),n=i[0],s=i[1];r["a"].set(this.playerQueueDetails,n,s)}},getQueueDetails:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(!this.$server.activePlayer){e.next=5;break}return t="players/"+this.$server.activePlayerId+"/queue",e.next=4,this.$server.getData(t);case 4:this.playerQueueDetails=e.sent;case 5:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}}),ae=te,re=(a("21b2"),a("0e8f")),ie=a("553a"),ne=a("adda"),se=a("34c3"),oe=a("e449"),le=a("8e36"),ce=Object(u["a"])(ae,T,U,!1,null,"6419b11e",null),ue=ce.exports;d()(ce,{VBtn:m["a"],VCard:J["a"],VDivider:z["a"],VFlex:re["a"],VFooter:ie["a"],VIcon:h["a"],VImg:ne["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemIcon:se["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:oe["a"],VProgressLinear:le["a"],VSubheader:V["a"]});var pe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-navigation-drawer",{attrs:{right:"",app:"",clipped:"",temporary:"",width:"300"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[a("v-card-title",{staticClass:"headline"},[a("b",[e._v(e._s(e.$t("players")))])]),a("v-list",{attrs:{dense:""}},[a("v-divider"),e._l(e.filteredPlayerIds,(function(t){return a("div",{key:t,style:e.$server.activePlayerId==t?"background-color:rgba(50, 115, 220, 0.3);":""},[a("v-list-item",{staticStyle:{"margin-left":"-5px","margin-right":"-15px"},attrs:{ripple:"",dense:""},on:{click:function(a){return e.$server.switchPlayer(e.$server.players[t].player_id)}}},[a("v-list-item-avatar",[a("v-icon",{attrs:{size:"45"}},[e._v(e._s(e.$server.players[t].is_group?"speaker_group":"speaker"))])],1),a("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[a("v-list-item-title",{staticClass:"subtitle-1"},[e._v(e._s(e.$server.players[t].name))]),a("v-list-item-subtitle",{key:e.$server.players[t].state,staticClass:"body-2",staticStyle:{"font-weight":"normal"}},[e._v(" "+e._s(e.$t("state."+e.$server.players[t].state))+" ")])],1),e.$server.activePlayerId?a("v-list-item-action",{staticStyle:{"padding-right":"10px"}},[a("v-menu",{attrs:{"close-on-content-click":!1,"close-on-click":!0,"nudge-width":250,"offset-x":"",right:""},nativeOn:{click:[function(e){e.stopPropagation()},function(e){e.stopPropagation(),e.preventDefault()}]},scopedSlots:e._u([{key:"activator",fn:function(r){var i=r.on;return[a("v-btn",e._g({staticStyle:{color:"rgba(0,0,0,.54)"},attrs:{icon:""}},i),[a("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[a("v-icon",[e._v("volume_up")]),a("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.players[t].volume_level)))])],1)],1)]}}],null,!0)},[a("VolumeControl",{attrs:{players:e.$server.players,player_id:t}})],1)],1):e._e()],1),a("v-divider")],1)}))],2)],1)},de=[],me=r["a"].extend({components:{VolumeControl:ee},watch:{},data:function(){return{filteredPlayerIds:[],visible:!1}},computed:{},created:function(){this.$server.$on("showPlayersMenu",this.show),this.$server.$on("players changed",this.getAvailablePlayers),this.getAvailablePlayers()},methods:{show:function(){this.visible=!0},getAvailablePlayers:function(){for(var e in this.filteredPlayerIds=[],this.$server.players)this.$server.players[e].enabled&&0===this.$server.players[e].group_parents.length&&this.filteredPlayerIds.push(e)}}}),he=me,ve=(a("a091"),a("99d9")),fe=Object(u["a"])(he,pe,de,!1,null,"502704d8",null),ge=fe.exports;d()(fe,{VBtn:m["a"],VCardTitle:ve["c"],VDivider:z["a"],VFlex:re["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:oe["a"],VNavigationDrawer:A["a"]});var ye=r["a"].extend({name:"App",components:{NavigationMenu:k,TopBar:C,ContextMenu:j,PlayerOSD:ue,PlayerSelect:ge},data:function(){return{showPlayerSelect:!1}},created:function(){var e="",t=window.location;e=t.origin+t.pathname,this.$server.connect(e)}}),Ae=ye,be=(a("034f"),a("7496")),ke=a("a75b"),we=a("a797"),Ie=a("490a"),xe=Object(u["a"])(Ae,i,n,!1,null,null,null),_e=xe.exports;d()(xe,{VApp:be["a"],VContent:ke["a"],VOverlay:we["a"],VProgressCircular:Ie["a"]});var Se=a("9483");Object(Se["a"])("".concat("","service-worker.js"),{ready:function(){},registered:function(){},cached:function(){},updatefound:function(){},updated:function(){alert("New content is available; please refresh."),window.location.reload(!0)},offline:function(){alert("No internet connection found. App is running in offline mode.")},error:function(e){}});a("4de4"),a("4160"),a("e439"),a("dbb4"),a("b64b"),a("159b");var Pe=a("2fa7"),De=a("8c4f"),Re=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("v-list",{attrs:{tile:""}},e._l(e.items,(function(t){return a("v-list-item",{key:t.title,attrs:{tile:""},on:{click:function(a){return e.$router.push(t.path)}}},[a("v-list-item-icon",{staticStyle:{"margin-left":"15px"}},[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",{domProps:{textContent:e._s(t.title)}})],1)],1)})),1)],1)},Ce=[],Be={name:"home",data:function(){return{items:[{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("search"),icon:"search",path:"/search"}]}},created:function(){this.$store.windowtitle=this.$t("musicassistant")}},Oe=Be,Me=Object(u["a"])(Oe,Re,Ce,!1,null,null,null),Ee=Me.exports;d()(Me,{VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemContent:y["a"],VListItemIcon:se["a"],VListItemTitle:y["c"]});var Fe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("v-list",{attrs:{"two-line":""}},[a("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.item;return[a("ListviewItem",{attrs:{item:r,hideavatar:3==r.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:r.media_type<4&&e.$store.isMobile,hidelibrary:!0,hidemenu:3==r.media_type&&e.$store.isMobile,hideduration:5==r.media_type}})]}}])})],1)],1)},He=[],Je={name:"browse",components:{ListviewItem:E["a"]},props:{mediatype:String,provider:String},data:function(){return{selected:[2],items:[]}},created:function(){this.$store.windowtitle=this.$t(this.mediatype),this.getItems(),this.$server.$on("refresh_listing",this.getItems)},methods:{getItems:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t="library/"+this.mediatype,e.abrupt("return",this.$server.getAllItems(t,this.items));case 2:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}},Le=Je,ze=Object(u["a"])(Le,Fe,He,!1,null,null,null),Ne=ze.exports;function Ve(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function Ye(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Ve(a,!0).forEach((function(t){Object(Pe["a"])(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Ve(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}d()(ze,{VList:v["a"]}),r["a"].use(De["a"]);var je=[{path:"/",name:"home",component:Ee},{path:"/config",name:"config",component:function(){return Promise.all([a.e("config~search"),a.e("config")]).then(a.bind(null,"1071"))},props:function(e){return Ye({},e.params,{},e.query)}},{path:"/config/:configKey",name:"configKey",component:function(){return Promise.all([a.e("config~search"),a.e("config")]).then(a.bind(null,"1071"))},props:function(e){return Ye({},e.params,{},e.query)}},{path:"/search",name:"search",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("config~search"),a.e("search")]).then(a.bind(null,"2d3b"))},props:function(e){return Ye({},e.params,{},e.query)}},{path:"/:media_type/:media_id",name:"itemdetails",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("itemdetails")]).then(a.bind(null,"32a2"))},props:function(e){return Ye({},e.params,{},e.query)}},{path:"/playerqueue",name:"playerqueue",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("playerqueue")]).then(a.bind(null,"b097"))},props:function(e){return Ye({},e.params,{},e.query)}},{path:"/:mediatype",name:"browse",component:Ne,props:function(e){return Ye({},e.params,{},e.query)}}],Te=new De["a"]({mode:"hash",routes:je}),Ue=Te,Xe=(a("466d"),a("1276"),a("a925"));function Qe(){var e=a("49f8"),t={};return e.keys().forEach((function(a){var r=a.match(/([A-Za-z0-9-_]+)\./i);if(r&&r.length>1){var i=r[1];t[i]=e(a)}})),t}r["a"].use(Xe["a"]);var Ge=new Xe["a"]({locale:navigator.language.split("-")[0],fallbackLocale:"en",messages:Qe()}),Ke=(a("d5e8"),a("d1e78"),a("e508")),We=(a("a899"),a("f309"));a("bf40");r["a"].use(We["a"]);var qe=new We["a"]({icons:{iconfont:"md"}}),Ze=new r["a"]({data:function(){return{windowtitle:"Home",loading:!1,showNavigationMenu:!1,topBarTransparent:!1,topBarContextItem:null,isMobile:!1,isInStandaloneMode:!1}},created:function(){this.handleWindowOptions(),window.addEventListener("resize",this.handleWindowOptions)},destroyed:function(){window.removeEventListener("resize",this.handleWindowOptions)},methods:{handleWindowOptions:function(){this.isMobile=document.body.clientWidth<700,this.isInStandaloneMode=!0===window.navigator.standalone||window.matchMedia("(display-mode: standalone)").matches}}}),$e={globalStore:Ze,install:function(e,t){e.prototype.$store=Ze}},et=(a("99af"),a("a434"),a("8a79"),a("2b3d"),a("bc3a")),tt=a.n(et),at=a("3667"),rt=a.n(at),it={timeout:6e4},nt=tt.a.create(it),st=new r["a"]({_address:"",_ws:null,data:function(){return{connected:!1,players:{},activePlayerId:null,syncStatus:[]}},methods:{connect:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t.endsWith("/")||(t+="/"),this._address=t,a=t.replace("http","ws")+"ws",this._ws=new WebSocket(a),this._ws.onopen=this._onWsConnect,this._ws.onmessage=this._onWsMessage,this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError;case 8:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),toggleLibrary:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(0!==t.in_library.length){e.next=6;break}return e.next=3,this.putData("library",t);case 3:t.in_library=[t.provider],e.next=9;break;case 6:return e.next=8,this.deleteData("library",t);case 8:t.in_library=[];case 9:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),getImageUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return e&&e.media_type?4===e.media_type&&"image"!==t?"":5===e.media_type&&"image"!==t?"":"database"===e.provider&&"image"===t?"".concat(this._address,"api/").concat(e.media_type,"/").concat(e.item_id,"/thumb?provider=").concat(e.provider,"&size=").concat(a):e.metadata&&e.metadata[t]?e.metadata[t]:e.album&&e.album.metadata&&e.album.metadata[t]?e.album.metadata[t]:e.artist&&e.artist.metadata&&e.artist.metadata[t]?e.artist.metadata[t]:e.album&&e.album.artist&&e.album.artist.metadata&&e.album.artist.metadata[t]?e.album.artist.metadata[t]:e.artists&&e.artists[0].metadata&&e.artists[0].metadata[t]?e.artists[0].metadata[t]:"":""},getData:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t){var a,i,n,s=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return a=s.length>1&&void 0!==s[1]?s[1]:{},i=this._address+"api/"+t,e.next=4,nt.get(i,{params:a});case 4:return n=e.sent,r["a"].$log.debug("getData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),postData:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t,a){var i,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,a=JSON.stringify(a),e.next=4,nt.post(i,a);case 4:return n=e.sent,r["a"].$log.debug("postData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t,a){return e.apply(this,arguments)}return t}(),putData:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t,a){var i,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,a=JSON.stringify(a),e.next=4,nt.put(i,a);case 4:return n=e.sent,r["a"].$log.debug("putData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t,a){return e.apply(this,arguments)}return t}(),deleteData:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t,a){var i,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,a=JSON.stringify(a),e.next=4,nt.delete(i,{data:a});case 4:return n=e.sent,r["a"].$log.debug("deleteData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t,a){return e.apply(this,arguments)}return t}(),getAllItems:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t,a){var i,n,s,o,l=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:i=l.length>2&&void 0!==l[2]?l[2]:{},n=this._address+"api/"+t,i&&(s=new URLSearchParams(i),n+="?"+s.toString()),o=0,rt()(n).node("items.*",(function(e){r["a"].set(a,o,e),o+=1})).done((function(e){a.length>e.items.length&&a.splice(e.items.length)}));case 5:case"end":return e.stop()}}),e,this)})));function t(t,a){return e.apply(this,arguments)}return t}(),playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.activePlayerId,r="players/"+a+"/cmd/"+e;this.postData(r,t)},playItem:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t,a){var r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.$store.loading=!0,r="players/"+this.activePlayerId+"/play_media/"+a,e.next=4,this.postData(r,t);case 4:this.$store.loading=!1;case 5:case"end":return e.stop()}}),e,this)})));function t(t,a){return e.apply(this,arguments)}return t}(),switchPlayer:function(e){e!==this.activePlayerId&&(this.activePlayerId=e,localStorage.setItem("activePlayerId",e),this.$emit("new player selected",e))},_onWsConnect:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(){var t,a,i,n,s,o,l;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r["a"].$log.info("Connected to server "+this._address),this.connected=!0,e.next=4,this.getData("players");case 4:for(t=e.sent,a=!0,i=!1,n=void 0,e.prev=8,s=t[Symbol.iterator]();!(a=(o=s.next()).done);a=!0)l=o.value,r["a"].set(this.players,l.player_id,l);e.next=16;break;case 12:e.prev=12,e.t0=e["catch"](8),i=!0,n=e.t0;case 16:e.prev=16,e.prev=17,a||null==s.return||s.return();case 19:if(e.prev=19,!i){e.next=22;break}throw n;case 22:return e.finish(19);case 23:return e.finish(16);case 24:this._selectActivePlayer(),this.$emit("players changed");case 26:case"end":return e.stop()}}),e,this,[[8,12,16,24],[17,,19,23]])})));function t(){return e.apply(this,arguments)}return t}(),_onWsMessage:function(){var e=Object(M["a"])(regeneratorRuntime.mark((function e(t){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:a=JSON.parse(t.data),"player changed"===a.message?r["a"].set(this.players,a.message_details.player_id,a.message_details):"player added"===a.message?(r["a"].set(this.players,a.message_details.player_id,a.message_details),this._selectActivePlayer(),this.$emit("players changed")):"player removed"===a.message?(r["a"].delete(this.players,a.message_details.player_id),this._selectActivePlayer(),this.$emit("players changed")):"music sync status"===a.message?this.syncStatus=a.message_details:this.$emit(a.message,a.message_details);case 2:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),_onWsClose:function(e){this.connected=!1,r["a"].$log.error("Socket is closed. Reconnect will be attempted in 5 seconds.",e.reason),setTimeout(function(){this.connect(this._address)}.bind(this),5e3)},_onWsError:function(){this._ws.close()},_selectActivePlayer:function(){if(!this.activePlayer||!this.activePlayer.enabled||this.activePlayer.group_parents.length>0){var e=localStorage.getItem("activePlayerId");if(e&&this.players[e]&&this.players[e].enabled)this.switchPlayer(e);else{for(var t in this.players)if("playing"===this.players[t].state&&this.players[t].enabled&&0===this.players[t].group_parents.length){this.switchPlayer(t);break}if(!this.activePlayer||!this.activePlayer.enabled)for(var a in this.players)if(this.players[a].enabled&&0===this.players[a].group_parents.length){this.switchPlayer(a);break}}}}},computed:{activePlayer:function(){return this.activePlayerId?this.players[this.activePlayerId]:null}}}),ot={server:st,install:function(e,t){e.prototype.$server=st}},lt=a("85ff"),ct=a.n(lt),ut=!0,pt={isEnabled:!0,logLevel:ut?"error":"debug",stringifyArguments:!1,showLogLevel:!0,showMethodName:!1,separator:"|",showConsoleColors:!0};r["a"].config.productionTip=!1,r["a"].use(ct.a,pt),r["a"].use(Ke["a"]),r["a"].use($e),r["a"].use(ot),String.prototype.formatDuration=function(){var e=parseInt(this,10),t=Math.floor(e/3600),a=Math.floor((e-3600*t)/60),r=e-3600*t-60*a;return t<10&&(t="0"+t),a<10&&(a="0"+a),r<10&&(r="0"+r),"00"===t?a+":"+r:t+":"+a+":"+r},new r["a"]({router:Ue,i18n:Ge,vuetify:qe,render:function(e){return e(_e)}}).$mount("#app")},"57d1":function(e,t){e.exports="data:image/png;base64,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"},"71db":function(e,t,a){e.exports=a.p+"img/file.813f9dad.png"},"82f5":function(e,t,a){e.exports=a.p+"img/sonos.72e2fecb.png"},"94cc":function(e,t){e.exports="data:image/png;base64,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"},"9a36":function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKEAAABtCAYAAADJewF5AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QwaCisvSBa6TQAACqJJREFUeNrtnXmQFdUVh787MGyirMqgBlDUEAKImkRRqUIxcbfcjcakFDFqlZrSBMtKlf5hSs2uRrOVVuKSGI27FFQlLiHG4AKKKxBBDYICIrtsAvPLH31eqn3Ou91vmHHmvT5fVRfy+p7T3dyft++5fe+54DiO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziOU3RCkR9eUm9gFDACmGjHeqAn8IUcLlYBa4DtwDpgMfAqsBxYCswPIcx3mbkIy4W3L3AEcLyJby+gsZ0utxpYBLwGPGr/vSCEsN6lV0ARSpoIXAEcBvTtqNsA3gRmAh8C04H/hBBWuQjrW3wDgB8ClwLdOuEtvmWinAk8CSwJIWx1EdaPAI8Ffmr9vh1twTZbX68bsAJ42/4cBAwF9gQ2ADsBO1u5hiqvsxmYBfwdmAa8FkLY7iKs3YDjGuAHrRDCCuCfwPvWh1sCLAPeA9aavy0hhA2p6/UCegHbgK7Wx9wLGAPsBuwBDDShDjXhZrERmAf8BXg8hLDAe4+1I8A+kqapetZKulnS3u14bz0l7SnpQElnSPqlpOclbcy4t48kPSzpBEk9vJY7twD7SXqiFQJ8VNLoDrrnIGmUpPMkTTXBxXhV0hRJw7zGO6cIH61SfEslndvJnmE/SedKuk3SLEmrIq3j7ZLGes13jorrJumPVQrwdUljOvlzBUnDJV0kaXqF1/bLroDOUVmXVCnAZyUNqbFnDJJG2Kv4aUnb7Vne8Oi44yunBzDXotE8vAicGEL4sA3vYXdgpEW9g4Emi4pL45KrbfhmpUXcy2y4Z3kI4aNWXK8rcDBwOTAohDDBRdixIrwM+FXO4i8BJ4QQlrVF343k89+ZwH42/FINa02cq7DvzMACG5b5AFiUZ9Ba0uAQwlJ/H3acAHtKuruKIZhRO3i9LhY0zDB/7cVqSS9KulXSoZJ6em13XhEekOobZXHzDl5rjAUHHcELkn4i6RhJu3rNdy4RXiupOUclbtyRSFjS+ZJWtKGomiVta6XtMkn3Sposaa96qMdQ4yKcA+QZJ5sNHBxCaK7SfyNwPTCllbe4iWR+4UILShaTfAZcTPJZrp8FM03AEAtmmuz3gSRzGmN1tAZ4MIRwYS3XY9ca/59oY85yT7ZCgN2B3wCTWnFfzwD3ADOAxSGELdUMxZB8h+5tQvwScKAdY/n0d+e+JFPTnA5sCf+d8xV2Vit8/64Vr8onJR3Tjs87TNKpkv4gaa5dc6EroTZEeESVfsfl7GuWeFvSBZ/zszdK+oakSa6E2hDhkVX6vb8KAf7VBqudgvYJ20PYhwAn5ix+C3Bltf3NsuuNtP5e/0i/dxkwN4TwjouwGFxNstoui5nA91sR8OwETACOA8ZbVNwnh+lKSfMt6JlHMsl2GfB+COFjr7Y6eR1L6iHptRz+1lQ7hUrSzpIuTQUUbcFKSY95S9ix9Gpjf3uSTMXP4rYQwitVCPBI4OfAAW18v/2BfWpdhA01fv9/Aprb0F9TpG9WYhvwQBUC/DrwWDsIsMQWF2HH8jTJSrgs8q5Yy7N+4wWSqWN5BDgCuItk4NmpUxH2BrrkKDcgp7/uOcpMzznFqhG4lWR+oVPHIlxJsv43izNz+tspR4v6Qk5fk4CjXGJ1LsIQwlzrb2UxQVJTjnKbMs6vADIDElv3fKXLqxgtIcAjOYKTQcDhOXy9A8TG3NbakcV4ktnWThFEGEJ4FngoR9HTc5RZYEcses7TxzvbpVWslhDgqRxlJma9kkMIn2SIsDfJgqYs9nBpFU+E91t/LcZA4PwcvuZFznUhySXjuAg/04KtIVn+mNU3/F6OAGUa8XHFPDNmNru0itcSEkK4z4KUrAAla6r+S8DUyPmxNvs5xnMurYJiq+82ZHz035A1+cCWWW6tYP++Jd6M2X9R0sef00q8mk8D0lBPIgwhzCHJ5xejF3CdpNizPw88EXkdZw1+LyDJcegUtDUcYtm2sjgtw8/pGenZembYT/aWsNhCPC9H5b0Xm5ZvcwtnR+yvyriHpkhaNxdhQYT4SI4KvD3DxwRJn0RSdeybYf97F2GxRbi3pA8yKnCbJVeP+bkmYv9Qhu0+NvvZRVhgIZ6ZI1fNf2O5Cm1pZaUMsNslnZFxD1e5CF2Iv86ZNLMp4mOwpAWR3DCjI7YDJL3hIiy2CPtkBBglZkjaOeLnEEmLKti+JKlbxHa0BUIuwgILcZSk5Tkq9DHLQVPJz0GS1lWwvSlHkLPURVhsIR6WY7+QPBHzBRHbm2Kf9CRNlLTeRVhsIZ5lQytZ3Bv7omIJKytxt+3wVMn2bElbXITFFuJ4CyayeNAWK1Xy87OI7Z0ZLeK32vDbsouwRoU4LhJkpHk4I+C4MWJ7Y4YQT26jvNcuwhoW4khJ89qgRbwo8oq/R9LAiO2xbSBEF2GNC3GYpOdyCrFrxM8BET+vSzo0YvvVnK2yi7COhThA0gM5hdgz4qefpH9EEihdErHd33b7dBEWWIiNkq7PuZXDmIifwZJezkioObSCbX9Jt7gIXYyTc4zjrZf07Ur9REmDJP05Yr9c0jmVhoAknVRl+ri3av3fPbj0PiOCo4HYlgyNJJkabgwhvBrx8x3gpBZOdSdZCHVxCGFlBdu+wBXAl3Pc8rshhClec47jOP46dtqzexBIEnc2AOtDCJtdhMUVw/HA/iQL458JITxXhW1fklRxPUgyvd4RQliVYbM7cCxwMjDObOeRrGl+IITwL6+VYgmwt6R3UhHpHNvsO6/9WWUR7YUZ5YdLejMSEa+TdIrXTLFEeEILQhhXhf3UMtu/RYZoGmxe4//XsUg62o6rUzO8P5Z0uNdOcUT4UGqFXWm7sd/mtN039X24NAa5pdIG4LancekaU8u/0tjXlVKWiRdzpCRx6kCAw1Mimmzfgkv72Q3IYX+llV9kA9GlibU/qlD+mVRLNzIi1POtn+oUQIRTUhMRGiTdkHpVnp1h29VaK0m603571v7+hu3u9KkAxlb/lUTrO265ANUo6RUTxWWp1+Em++3xDPtDU4vnjysTtSQdVVZ+mKQPUyJs9FpwER5lglgiaZfU73fb72tjWRgk/bi0J7GkXSXtIunE1PT+O8vKD00tyFqYkbTJKYgI7zBBbLQZNLMlzSqb/3dRBdtdJL1rZTZJmm92K8rWLA9O2XS3vqasfJcKvi+XNNOO0V5T9SvAXVMpPLbYa3WbHekciLNbEouk01JlNtqcwpX2uv0odW5Smd119vtWSd9swe/u5qvk19MX17EIL7aK/kTSqZb4cqQdI1LDNlsljW/B/r6USA+0KV4Dbd7gcEmL7fwTLbySl9i5pZIOL/UNbafQaSkBX+s1Vb8C7GoDypI0o0KZU1Ji+EXZuSHWWm2XdE4F+1tSrdnYsnMHpV7L22zY5q6y2df3xhbqO7UvwjGpyv5uhTK7pTIqfJBOIZIaG2yW1L+C/ddMYJJ0QwvnR1ifryWmS+pTL//ePtreskD6k+xX0gzMCSFsqlBuFFCKmmeVNl6UtB/JlhXNwMu2P0q5bQPJ9rPdgdUhhHktlOkHfIVkd6geJDNpFgJPhRDWeU05juM4juM4juM4juM4juM4juM4juM4juM4juM4juM4juPUC/8DLSVc5VaBblAAAAAASUVORK5CYII="},"9ad3":function(e,t){e.exports="data:image/png;base64,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"},"9e01":function(e,t,a){var r={"./aac.png":"9a36","./chromecast.png":"57d1","./crossfade.png":"e7af","./default_artist.png":"4bfb","./file.png":"71db","./flac.png":"fb30","./hires.png":"f5e3","./homeassistant.png":"3232","./http_streamer.png":"2755","./logo.png":"cf05","./mp3.png":"f1d4","./ogg.png":"9ad3","./qobuz.png":"0863","./sonos.png":"82f5","./spotify.png":"0c3b","./squeezebox.png":"bd18","./tunein.png":"e428","./vorbis.png":"94cc","./web.png":"edbf","./webplayer.png":"3d05"};function i(e){var t=n(e);return a(t)}function n(e){if(!a.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=n,e.exports=i,i.id="9e01"},a091:function(e,t,a){"use strict";var r=a("3208"),i=a.n(r);i.a},a625:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artiesten","albums":"Albums","tracks":"Nummers","playlists":"Afspeellijsten","playlist_tracks":"Nummers in afspeellijst","radios":"Radio","search":"Zoeken","settings":"Instellingen","queue":"Wachtrij","artist_toptracks":"Top nummers","artist_albums":"Albums","album_tracks":"Album liedjes","album_versions":"Versies","track_versions":"Versies","type_to_search":"Type hier om te zoeken...","add_library":"Voeg toe aan bibliotheek","remove_library":"Verwijder uit bibliotheek","add_playlist":"Aan playlist toevoegen...","remove_playlist":"Verwijder uit playlist","no_player":"Geen speler geselecteerd","reboot_required":"Je moet de server opnieuw starten om de nieuwe instellingen actief te maken!","conf":{"enabled":"Ingeschakeld","base":"Algemene instellingen","musicproviders":"Muziek providers","playerproviders":"Speler providers","player_settings":"Speler instellingen","homeassistant":"Home Assistant integratie","web":"Webserver","http_streamer":"Ingebouwde (sox gebaseerde) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Bestandssysteem","chromecast":"Chromecast","squeezebox":"Squeezebox ondersteuning","sonos":"Sonos","webplayer":"Web Player (alleen Chrome browser)","username":"Gebruikersnaam","password":"Wachtwoord","hostname":"Hostnaam (of IP)","port":"Poort","hass_url":"URL naar homeassistant (b.v. https://homeassistant:8123)","hass_token":"Token met lange levensduur","hass_publish":"Publiceer spelers naar Home Assistant","hass_player_power":"Verbind speler aan/uit met homeassistant entity","hass_player_source":"Benodigde bron op de verbonden homeassistant entity (optioneel)","hass_player_volume":"Verbind volume van speler aan een homeassistant entity","web_ssl_cert":"Pad naar ssl certificaat bestand","web_ssl_key":"Pad naar ssl certificaat key bestand","player_enabled":"Speler inschakelen","player_name":"Aangepaste naam voor deze speler","player_group_with":"Groupeer deze speler met een andere (hoofd)speler","player_mute_power":"Gebruik mute als aan/uit","player_disable_vol":"Schakel volume bediening helemaal uit","player_group_vol":"Pas groep volume toe op onderliggende spelers (alleen groep spelers)","player_group_pow":"Pas groep aan/uit toe op onderliggende spelers (alleen groep spelers)","player_power_play":"Automatisch afspelen bij inschakelen","file_prov_music_path":"Pad naar muziek bestanden","file_prov_playlists_path":"Pad naar playlist bestanden (.m3u)","web_http_port":"HTTP poort","web_https_port":"HTTPS poort","cert_fqdn_host":"Hostname (FQDN van certificaat)","enable_r128_volume_normalisation":"Schakel R128 volume normalisatie in","target_volume_lufs":"Doelvolume (R128 standaard is -23 LUFS)","fallback_gain_correct":"Fallback gain correctie indien R128 meting (nog) niet beschikbaar is","enable_audio_cache":"Sta het cachen van audio toe naar temp map","trim_silence":"Strip stilte van begin en eind van audio (in temp bestanden)","http_streamer_sox_effects":"Eigen sox effects toepassen op audio (alleen voor ingebouwde streamer). Zie http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximale sample rate welke deze speler ondersteund, hoger wordt gedownsampled.","force_http_streamer":"Forceer het gebruik van de ingebouwde streamer, ook al heeft de speler directe ondersteuning voor de muziek provider","not_grouped":"Niet gegroepeerd","conf_saved":"Configuratie is opgeslagen, herstart om actief te maken","audio_cache_folder":"Map om te gebruiken voor cache bestanden","audio_cache_max_size_gb":"Maximale grootte van de cache map in GB.","gapless_enabled":"Schakel ondersteuning voor gapless in.","crossfade_duration":"Crossfade (in seconden, 0 om uit te schakelen)."},"players":"Spelers","play":"Afspelen","play_on":"Afspelen op:","play_now":"Nu afspelen","play_next":"Speel als volgende af","add_queue":"Voeg toe aan wachtrij","queue_clear":"Wachtrij leegmaken","show_info":"Bekijk informatie","queue_next_tracks":"Aankomend","queue_previous_tracks":"Afgespeeld","queue_move_up":"Verplaats omhoog","queue_move_down":"Verplaats omlaag","queue_options":"Wachtrij opties","enable_repeat":"Repeat inschakelen","disable_repeat":"Repeat uitschakelen","enable_shuffle":"Shuffle inschakelen","disable_shuffle":"Shuffle uitschakelen","read_more":"meer lezen","stream_details":"Streamdetails","crossfade_enabled":"Crossfade ingeschakeld","state":{"playing":"afspelen","stopped":"gestopt","paused":"gepauzeerd","off":"uitgeschakeld"}}')},bd18:function(e,t,a){e.exports=a.p+"img/squeezebox.60631223.png"},cf05:function(e,t,a){e.exports=a.p+"img/logo.c079bd97.png"},d3cc:function(e,t,a){"use strict";var r=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("v-list-item",{directives:[{name:"longpress",rawName:"v-longpress",value:e.menuClick,expression:"menuClick"}],attrs:{ripple:""},on:{click:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])?null:"button"in t&&0!==t.button?null:void(e.onclickHandler?e.onclickHandler(e.item):e.itemClicked(e.item))},contextmenu:[e.menuClick,function(e){e.preventDefault()}]}},[e.hideavatar?e._e():r("v-list-item-avatar",{attrs:{tile:"",color:"grey"}},[r("img",{staticStyle:{border:"1px solid rgba(0,0,0,.22)"},attrs:{src:e.$server.getImageUrl(e.item,"image",80),"lazy-src":a("71db")}})]),r("v-list-item-content",[r("v-list-item-title",[e._v(" "+e._s(e.item.name)+" "),e.item.version?r("span",[e._v("("+e._s(e.item.version)+")")]):e._e()]),e.item.artists?r("v-list-item-subtitle",[e._l(e.item.artists,(function(t,a){return r("span",{key:t.item_id},[r("a",{on:{click:[function(a){return e.itemClicked(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),a+1<e.item.artists.length?r("label",{key:a},[e._v("/")]):e._e()])})),e.item.album&&e.hidetracknum?r("a",{staticStyle:{color:"grey"},on:{click:[function(t){return e.itemClicked(e.item.album)},function(e){e.stopPropagation()}]}},[e._v(" - "+e._s(e.item.album.name))]):e._e(),!e.hidetracknum&&e.item.track_number?r("label",{staticStyle:{color:"grey"}},[e._v("- disc "+e._s(e.item.disc_number)+" track "+e._s(e.item.track_number))]):e._e()],2):e._e(),e.item.artist?r("v-list-item-subtitle",[r("a",{on:{click:[function(t){return e.itemClicked(e.item.artist)},function(e){e.stopPropagation()}]}},[e._v(e._s(e.item.artist.name))])]):e._e(),e.item.owner?r("v-list-item-subtitle",[e._v(e._s(e.item.owner))]):e._e()],1),e.hideproviders?e._e():r("v-list-item-action",[r("ProviderIcons",{attrs:{providerIds:e.item.provider_ids,height:20}})],1),e.isHiRes?r("v-list-item-action",[r("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var i=t.on;return[r("img",e._g({attrs:{src:a("f5e3"),height:"20"}},i))]}}],null,!1,2747613229)},[r("span",[e._v(e._s(e.isHiRes))])])],1):e._e(),e.hidelibrary?e._e():r("v-list-item-action",[r("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on;return[r("v-btn",e._g({attrs:{icon:"",ripple:""},on:{click:[function(t){return e.toggleLibrary(e.item)},function(e){e.preventDefault()},function(e){e.stopPropagation()}]}},a),[e.item.in_library.length>0?r("v-icon",{attrs:{height:"20"}},[e._v("favorite")]):e._e(),0==e.item.in_library.length?r("v-icon",{attrs:{height:"20"}},[e._v("favorite_border")]):e._e()],1)]}}],null,!1,113966118)},[e.item.in_library.length>0?r("span",[e._v(e._s(e.$t("remove_library")))]):e._e(),0==e.item.in_library.length?r("span",[e._v(e._s(e.$t("add_library")))]):e._e()])],1),!e.hideduration&&e.item.duration?r("v-list-item-action",[e._v(e._s(e.item.duration.toString().formatDuration()))]):e._e(),e.hidemenu?e._e():r("v-icon",{staticStyle:{"margin-right":"-10px","padding-left":"10px"},attrs:{color:"grey lighten-1"},on:{click:[function(t){return e.menuClick(e.item)},function(e){e.stopPropagation()}]}},[e._v("more_vert")])],1),r("v-divider")],1)},i=[],n=(a("a4d3"),a("e01a"),a("d28b"),a("4160"),a("a9e3"),a("d3b7"),a("3ca3"),a("ddb0"),a("96cf"),a("89ba")),s=a("2b0e"),o=a("e00a"),l=600;s["a"].directive("longpress",{bind:function(e,t,a){var r=t.value;if("function"===typeof r){var i=null,n=function(e){"click"===e.type&&0!==e.button||null===i&&(i=setTimeout((function(){return r(e)}),l))},o=function(){null!==i&&(clearTimeout(i),i=null)};["mousedown","touchstart"].forEach((function(t){return e.addEventListener(t,n)})),["click","mouseout","touchend","touchcancel"].forEach((function(t){return e.addEventListener(t,o)}))}else s["a"].$log.warn("Expect a function, got ".concat(r))}});var c=s["a"].extend({components:{ProviderIcons:o["a"]},props:{item:Object,index:Number,totalitems:Number,hideavatar:Boolean,hidetracknum:Boolean,hideproviders:Boolean,hidemenu:Boolean,hidelibrary:Boolean,hideduration:Boolean,onclickHandler:null},data:function(){return{touchMoving:!1,cancelled:!1}},computed:{isHiRes:function(){var e=!0,t=!1,a=void 0;try{for(var r,i=this.item.provider_ids[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){var n=r.value;if(n.quality>6)return n.details?n.details:7===n.quality?"44.1/48khz 24 bits":8===n.quality?"88.2/96khz 24 bits":9===n.quality?"176/192khz 24 bits":"+192kHz 24 bits"}}catch(s){t=!0,a=s}finally{try{e||null==i.return||i.return()}finally{if(t)throw a}}return""}},created:function(){},beforeDestroy:function(){this.cancelled=!0},mounted:function(){},methods:{itemClicked:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showPlayMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(){this.cancelled||this.$server.$emit("showContextMenu",this.item)},toggleLibrary:function(){var e=Object(n["a"])(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.cancelled=!0,e.next=3,this.$server.toggleLibrary(t);case 3:this.cancelled=!1;case 4:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()}}),u=c,p=a("2877"),d=a("6544"),m=a.n(d),h=a("8336"),v=a("ce7e"),f=a("132d"),g=a("da13"),y=a("1800"),A=a("8270"),b=a("5d23"),k=a("3a2f"),w=Object(p["a"])(u,r,i,!1,null,null,null);t["a"]=w.exports;m()(w,{VBtn:h["a"],VDivider:v["a"],VIcon:f["a"],VListItem:g["a"],VListItemAction:y["a"],VListItemAvatar:A["a"],VListItemContent:b["a"],VListItemSubtitle:b["b"],VListItemTitle:b["c"],VTooltip:k["a"]})},dd63:function(e,t,a){},e00a:function(e,t,a){"use strict";var r=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",e._l(e.uniqueProviders,(function(t){return r("img",{key:t.provider,staticStyle:{"margin-right":"6px","margin-top":"6px"},attrs:{height:e.height,src:a("9e01")("./"+t.provider+".png")}})})),0)},i=[],n=(a("4160"),a("c975"),a("a9e3"),a("159b"),a("2b0e")),s=n["a"].extend({props:{providerIds:Array,height:Number},data:function(){return{isHiRes:!1}},computed:{uniqueProviders:function(){var e=[],t=[];return this.providerIds?(this.providerIds.forEach((function(a){var r=a["provider"];-1===t.indexOf(r)&&(t.push(r),e.push(a))})),e):[]}},mounted:function(){},methods:{}}),o=s,l=a("2877"),c=Object(l["a"])(o,r,i,!1,null,null,null);t["a"]=c.exports},e428:function(e,t,a){e.exports=a.p+"img/tunein.ca1c1bb0.png"},e7af:function(e,t){e.exports="data:image/png;base64,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"},edbf:function(e,t,a){e.exports=a.p+"img/web.798ba28f.png"},edd4:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artists","albums":"Albums","tracks":"Tracks","playlists":"Playlists","playlist_tracks":"Playlist tracks","radios":"Radio","search":"Search","settings":"Settings","queue":"Queue","artist_toptracks":"Top tracks","artist_albums":"Albums","album_tracks":"Album tracks","album_versions":"Versions","track_versions":"Versions","type_to_search":"Type here to search...","add_library":"Add to library","remove_library":"Remove from library","add_playlist":"Add to playlist...","remove_playlist":"Remove from playlist","no_player":"No player selected","reboot_required":"A reboot is required to activate the new settings!","conf":{"enabled":"Enabled","base":"Generic settings","musicproviders":"Music providers","playerproviders":"Player providers","player_settings":"Player settings","homeassistant":"Home Assistant integration","web":"Webserver","http_streamer":"Built-in (sox based) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Filesystem","chromecast":"Chromecast","squeezebox":"Squeezebox support","sonos":"Sonos","webplayer":"Web Player (Chrome browser only)","username":"Username","password":"Password","hostname":"Hostname (or IP)","port":"Port","hass_url":"URL to homeassistant (e.g. https://homeassistant:8123)","hass_token":"Long Lived Access Token","hass_publish":"Publish players to Home Assistant","hass_player_power":"Attach player power to homeassistant entity","hass_player_source":"Source on the homeassistant entity (optional)","hass_player_volume":"Attach player volume to homeassistant entity","web_ssl_cert":"Path to ssl certificate file","web_ssl_key":"Path to ssl keyfile","player_enabled":"Enable player","player_name":"Custom name for this player","player_group_with":"Group this player to another (parent)player","player_mute_power":"Use muting as power control","player_disable_vol":"Disable volume controls","player_group_vol":"Apply group volume to childs (for group players only)","player_group_pow":"Apply group power based on childs (for group players only)","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)","web_http_port":"HTTP port","web_https_port":"HTTPS port","cert_fqdn_host":"FQDN of hostname in certificate","enable_r128_volume_normalisation":"Enable R128 volume normalization","target_volume_lufs":"Target volume (R128 default is -23 LUFS)","fallback_gain_correct":"Fallback gain correction if R128 readings not (yet) available","enable_audio_cache":"Allow caching of audio to temp files","trim_silence":"Strip silence from beginning and end of audio (temp files only!)","http_streamer_sox_effects":"Custom sox effects to apply to audio (built-in streamer only!) See http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximum sample rate this player supports, higher will be downsampled","force_http_streamer":"Force use of built-in streamer, even if the player can handle the music provider directly","not_grouped":"Not grouped","conf_saved":"Configuration saved, restart app to make effective","audio_cache_folder":"Directory to use for cache files","audio_cache_max_size_gb":"Maximum size of the cache folder (GB)","gapless_enabled":"Enable gapless support","crossfade_duration":"Crossfade duration (in seconds, 0 to disable)"},"players":"Players","play":"Play","play_on":"Play on:","play_now":"Play Now","play_next":"Play Next","add_queue":"Add to Queue","queue_clear":"Clear queue","show_info":"Show info","queue_next_tracks":"Next","queue_previous_tracks":"Played","queue_move_up":"Move up","queue_move_down":"Move down","queue_options":"Queue options","enable_repeat":"Enable repeat","disable_repeat":"Disable repeat","enable_shuffle":"Enable shuffle","disable_shuffle":"Disable shuffle","read_more":"read more","stream_details":"Streamdetails","crossfade_enabled":"Crossfade enabled","state":{"playing":"playing","stopped":"stopped","paused":"paused","off":"off"}}')},f1d4:function(e,t){e.exports="data:image/png;base64,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"},f5e3:function(e,t,a){e.exports=a.p+"img/hires.e97b001e.png"},fb30:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABfCAYAAADoOiXnAAAPMElEQVR4nO2de7RUVR3HP3Pv9V5eF71eUEBAEQVBufhM0FziE1NRSi1NqaXlI2v5LmtZUlZqrVo+yJKWWCaRWpLio3yh+UjRRJ4higgJIpgooMCFy0x/fPfunDnMzDkzZ98HuL9rzZqZM/vsfc7Z3/3bv9fek8nlcnh4pEFVe1+Ax7YPTyKP1PAk8kgNTyKP1PAk8kgNTyKP1PAk8kgNTyKP1PAk8kgNTyKP1PAk8kgNTyKP1PAk8kgNTyKP1PAk8kgNTyKP1PAk8kiNGgd1TAJaECFXANeZ7x6fEmQcpMeGK1gADAO2pK3UY9uBC0kUxnrH9bnALkhKrgM+aedr2S7hmkTtjb7AUOAIoBcwCOiP7vN+4LIy66sCsi4vcHuEaxJVO64vKY4BvgwcB/QrUmY00Ah8YL5XAw3A3kAG6AEMBJrM773N72cBi1vlqrcTuCDRBqQDVQMfO6ivHPQFvgV8E+gWU3YQIpglURMwDehDcSs1C3RJf5nbN1yQqAdSrjOITG2lVPcH7kDSJwmqkMSaZb7XIRKWwkb8dBYLFyT6PiJOFbAS+DXFTfzz0cjPmrYfAV6uoM0dgYkkJ5DFsNDnHAH5PVLABYm+F/r8BiJRMVwM7B/6/g6VkWgccEIF541CkvO/FZzrUQSuPdZxOlHUBbCpgjZ2oXwry6I3sFeF53oUwbYY9hiNrKhKUIv0Ig+HcG3ix5HShf5xSpnlNyAnYwbdb4ODa/AIwQWJmpGinEHTUymi5ELvmZiyhVBNcin0MHArsApYbo5VIYvLwyFckKgvAYmylA6+jkWmdRZ16Ooy2+qNTPs4TAPOpu39Vp9KuCDROQQm/vvAFGQFjQQ2mzZmA38DDgZ6Epj4LwGvl9HWAOR1jsMU2pZA1ei+GoAR5j0b+f1NYC56Rq6vrQfQFT33XgXanmNeyxy3C7gh0U2hzwtRB54MXBk6fg8i0XWISBbnEU+izsCeiKh9ifftbERT7JBQuSrgPdyb9gOBrwEHAcOR17xrifIfIrfGdCQtnyE/C6IcZIDDkXQfjfxvOxcpm0P3/gLwKPAEsKTCdreCa8XajrCo3rGhyPEkJv6xwL0EDztOj9oBuBsRx5bNAKcCjydorxyMIN9PFocG82oCvo6u8+eU36F7AtcApyHHaxwySFKONa+3UR7YLTiQim1t4lcy6oYgadSFZHGsaiQRupjzOgOdKmw7DvukOLcb8A3gAeCAMs47B3gSSfEkBCqEAcBPkFQ6tMI6/g/XJComJdKY9uWGNtoShzuoYzgwGRgcU6478CMkQQY4aBeUMvObtJW4JpGtL5oSYklUGzkeN53WUXyeb29kkJRzgaHAj9FUXAzjgWvZ+hmmxRNpK3ChEw0hMNmtznMTcFfo+Efm+NlIBFvl+O2Yug8gP2jakTCYeOlRDj4PHImmqijORukurvE88Iu0lbggURP5ZFmC/Dn7EOQZLUbWUQ9Eoqw5/gGyWIqhkdKjsz1hk9ZcoQYRaTr5JnoT6ug6h22Bnv145HJIBRckujf0+XUkmcaRb+L/CWUe3kK+Incu8PsSdX/OwfVZuJ66e0W+v4s841uARWiwWKIl9bIfjaZImwueAa4q0JYL3IYImxquTXx781FT3n7fHDke/R5FZ+TfaEFTYC3xzsYcsBZlDNjQSguBm8EVjkc+nz8DzwL/RtNzhuC+apD0HQv8APlySqEb+SQ6GJnxSbESmIFcGcuQz+pA5PgdSaCb/h2FhJygrRP1yzWzL0ESzZ53BPBQzDlrkbNzbqRdlytRqlAnXI880cXQgqbx25GkmgzUlyjfkyDfqQq4kOTpudPQ9DQrcnwK6ufRwM3IUPkuQZpwargmkWsTP7rEZ12Cc7JIB1tTYZtJkAVeixzrjkZ+LSLtx+ZlHarTgHlIIhRDHYHu0xM5WpPgDpRr3lzk9xaURTofSfLZCetNBNcksg+gmCkfHVXlKs1JV5O4NoOLYQ9gDHAUsiLr0T3lEOGXo3DPNCQZn6c0iTYRkO4wkgWbX0OmfzEChbEEh+EOCxckOpLAOrMu9NsR8611tsIcvxCJa4s5DtpvD9QBX0Shh2JmfiMi2eHA1cioiEv6X0MgbRuIl+A5FDZZEVOuVeGCRLnIqxQ2I93EkiuLRu5hBNZTBphJ4FvqaOiCAslXxhUMoR4taEgSp7LP8LMJyi5BSnK7wgWJng19tib+RcC3Q8cnI7P/ThTxthiH4jePEES/c6ZMVOfoKBhPeQQKI25tXFjy7JGgvnfpAEvDXftOrGkbjc6XOp4jX8y35dq1cnEqlRMoCdYRSKskz+BV4t0krQ7XJCo2neVifs8W+dyR0Ih0oNZcKt5MMgXZoo4OsG6urUz8uN8zCcq0N5qAQxKUW4G8+E+iFJSjkLNxtwTnhvPOkwzwgxGp23U/KNeSyEa1O0WOd4r8blGLHlo4G3AH2m9jiEKw0vOkBGXnIk/25UjPux/5b05iaydgMVgSzU9Q1u6C0q5wIYlOJzDxbTD1D8j93mLasLtqXIoWH24xx2cgPeALBL6dLK3gy3CAuHX7m5EFNq/Ab7PRVDiV+ECqJVES0u2K9LR2dZW4kETV5hXOr2lG8bLN5t2O5l4oMNkA7ISslVrkO6o3rwbazllYDuIi9ssoHdB8isIEK4ZVJAsTXUo7J+65juKvQeQ4Dfhp6PijSKRPQJLI4iJkjUyK1DkSBRM7AmxHxiWgxa2jaybekgrnhT+PJHJcFmMjyk68gPio/KEok3ISDi1g1zrRpsi7hbW4opF0a+KHkaNjmfi2U1fFlOuDUjmKYSTxCXZrCZTkNSRfWDAQpdSchQZxFDuiae+PaDeV8xLWmwiurbM4E39bRpwUqUWe7CVsHeAcDPyS0suJQFOiTZvJAX9BOVdJpvd+yKk7H3iMwFVQh5T9oQT9/UOkjzrRpba3PRtbE4sSlGlCU/dU4EFkNBwLnIGmkThErdJ/oNSXpDlFVUjaxUm8PiiWdwrJMiNiG3UJO9KiI8ea+NEofg1b6xGZVriuNLDX91TC8n2QWf8E8CJampOEQFDYo389rRNgHUXlW/TkwdVm6HYtvk10mok2u7Kmv93I6m5klubQqHsLjYTJofrC9XQkzELZi+X4Zcp1nL5b4NhMZKTcgnv/2dVIgX86TSUuSHRD6LNViF9GS6otbKrqdGTG2+i91QEeJtCbqpGC2dHwERoEN8QVbAVMRBmJ43FLpK6m7kFpKnFBorCusBr5fC5BN2zxOErPnEi++/8ClMpwT6TOEcRbQ+2BW1EY4/hWqr/YNN6CpFELeq4uV36kXtfXVrqHHT1R072YKZ8mCOsyKLlDpK71aP3XPyuo60PypXMhlNpwIgvcCHyJ8nZSKYVXgDPTVtJaUfxCvp9Cx0vVUQhxG2i9h0zcJAHJJJtsvVegrkXAV9AUnJTsq9G6+xkx5eJWpOSQ1XccctxW6pBdhFbcnkzhxZJlYVsz8ZvR6FmHLJeX0APZjDp8ofktyW5oWdQJy5Fjz9Zt61tuPheaVt9CI/hEtDp1OIWTyBaj7WN+hZLsDkJ/orOSIJl/PlKo30e77ybBMhTuuBmpCWPRTiHFNjXdhEIuC1C+91M4NF5c/8vQJmTOX4+WpVi8iFJgV5If9rgQ6URLI3WOoPCotUnwLlIfapGSv47KdrENYzfUgTl0fx+ia1yIyG1hXRyt8Uc6jYjM9l8AuiNi5pCEe5X091kQLiTRbQRr6/9jPj9H/vqqmeb3x5EfxZr4K9ADDftg7D8CFYLLLL5NuBuNywn2hSyF1vwXpg9wtKK1XLiQRFEH4nokMcLLgbag6aIXAXGtP6gZLTcOYyUdIO3TIxlcKNarQ683CdaPh49PNWWfRiJ+IbIwjkZTwcLQayalk9T7oGh0JWauTVspB23lQQ+348oXZFN0WhUuHk5d6GWlUk3kuA172B3M7MuGPcLHusVc11XIMuqH9JpiU3KhjhiDNoqySHL/9ShCbvOJ0j4zS5bodY8CfoY84hMi5Qsh7jqGokhAseCts4HheoRZv090jsxGfqdIuUJlwtgZ+CrSvY4B/oXCK6ORFTQRdfoZSC+bQn5GYj2aOnsDf0XK+yiUs3MH8sN0RQsTp6NQQzcUha8FrjD1XmuO34ik63lIsX4ArXgNB0B7mut4BmVwDgK+Y9odj8g0wbwGoryl3iil4zZkMZ4beQ7nI0X5VhRGmmTu5XSkUN+FpP9+iIQXAfehvQxq0VY1r6Ct+1KjIwU6k2ADUsafRg97FzT93YAe3hgUVLwGec7HkJ87k0Vm9QWo0+ejlNbzUaT8RPQnemci8u2PSLUG7a5xBeqEy5Cv5lSk5w03ZY9AS5/3DLXZH9gdWU/j0EDYG0ndQ9CWO59BMSz7h8xZ9Ac4JyDSXkwwfe+EArwvmns8GbkOXkUW8fHmel4y93ogIs0ByCVwFHJYLkD7IUXz4cuGaxLZxXlRfaVL5HeLmgLXUGo624B0qaXIunoFLdluRPG2tWjk1RMsSQ5fi3UwdkfB1KmITG8jqdYJdewcpMv1NNezBeluPZAxYFfxzkCLB3uZa5uLDIJwNuIwcw0bCaYwu/FDMyLUYpQhaqf3KjRI3jDHu4TO7YcGz0MoKNzXnH8nIuHuSDe1i0obEZnsHtq7mvv9nXlPbaG7MPEfI3/7vBxiefj4c6bsfeSP0hXIp/IgwYhYT+kclxr0gD9GD7cK5d3sjTryBeRn6o9GdNgHZTtoHpqy9kWrMjoTbAO4ET14u5F7jalnNuqILsicX4c6cCMiST0imd1LycLmlK8icG8MRyuFF6Jp9S4kLV43bdnrHojIMY/APbAASd+bzf1ejqbJ35r6piPJuh8aSAvN+dYFM9NczwREvnLWuRWECxO/rTEMddwnaFTOQFNEE5JEc1FnDkMdPYsgnNAHSYGlBFPVHHPeQaiD7UMehki+1Jz3FpIwA9DmVm8i4vZBnu01iBg1pk47EDoR/MfbBtRxAxDplqNMyH0R2d5Bg8q2NxhJndnkb0u4BxqMKxGp9kKEttJmiDlvNZK4vU2b80w9Q0wb83CQy74tksijg2FbU6w9OiA8iTxSw5PIIzU8iTxSw5PIIzU8iTxSw5PIIzU8iTxSw5PIIzU8iTxSw5PIIzU8iTxSw5PIIzU8iTxSw5PIIzU8iTxSw5PIIzU8iTxSw5PIIzX+B1yXSRtpspd4AAAAAElFTkSuQmCC"}});
+//# sourceMappingURL=app.3be71134.js.map
\ No newline at end of file
--- /dev/null
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?a9d7","webpack:///./src/assets/qobuz.png","webpack:///./src/assets/spotify.png","webpack:///./src/components/PlayerOSD.vue?f337","webpack:///./src/assets/http_streamer.png","webpack:///./src/assets/homeassistant.png","webpack:///./src/assets/webplayer.png","webpack:///./src/locales sync [A-Za-z0-9-_,\\s]+\\.json$/","webpack:///./src/assets/default_artist.png","webpack:///./src/App.vue?fd4a","webpack:///./src/components/NavigationMenu.vue?5294","webpack:///src/components/NavigationMenu.vue","webpack:///./src/components/NavigationMenu.vue?f679","webpack:///./src/components/NavigationMenu.vue","webpack:///./src/components/TopBar.vue?50c5","webpack:///src/components/TopBar.vue","webpack:///./src/components/TopBar.vue?8cdd","webpack:///./src/components/TopBar.vue","webpack:///./src/components/ContextMenu.vue?6654","webpack:///src/components/ContextMenu.vue","webpack:///./src/components/ContextMenu.vue?03fa","webpack:///./src/components/ContextMenu.vue","webpack:///./src/components/PlayerOSD.vue?c789","webpack:///./src/components/VolumeControl.vue?d50f","webpack:///src/components/VolumeControl.vue","webpack:///./src/components/VolumeControl.vue?0e80","webpack:///./src/components/VolumeControl.vue","webpack:///src/components/PlayerOSD.vue","webpack:///./src/components/PlayerOSD.vue?1917","webpack:///./src/components/PlayerOSD.vue?3e15","webpack:///./src/components/PlayerSelect.vue?8641","webpack:///src/components/PlayerSelect.vue","webpack:///./src/components/PlayerSelect.vue?ed4c","webpack:///./src/components/PlayerSelect.vue?2bb5","webpack:///src/App.vue","webpack:///./src/App.vue?0bd2","webpack:///./src/App.vue?4f7e","webpack:///./src/registerServiceWorker.js","webpack:///./src/views/Home.vue?7d43","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?f351","webpack:///./src/views/Home.vue","webpack:///./src/views/Browse.vue?c8c8","webpack:///src/views/Browse.vue","webpack:///./src/views/Browse.vue?0b2d","webpack:///./src/views/Browse.vue","webpack:///./src/router/index.js","webpack:///./src/i18n.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/plugins/store.js","webpack:///./src/plugins/server.js","webpack:///./src/main.js","webpack:///./src/assets/chromecast.png","webpack:///./src/assets/file.png","webpack:///./src/assets/sonos.png","webpack:///./src/assets/vorbis.png","webpack:///./src/assets/aac.png","webpack:///./src/assets/ogg.png","webpack:///./src/assets sync ^\\.\\/.*\\.png$","webpack:///./src/components/PlayerSelect.vue?121a","webpack:///./src/assets/squeezebox.png","webpack:///./src/assets/logo.png","webpack:///./src/components/ListviewItem.vue?0309","webpack:///src/components/ListviewItem.vue","webpack:///./src/components/ListviewItem.vue?6ea0","webpack:///./src/components/ListviewItem.vue","webpack:///./src/components/ProviderIcons.vue?233a","webpack:///src/components/ProviderIcons.vue","webpack:///./src/components/ProviderIcons.vue?97c3","webpack:///./src/components/ProviderIcons.vue","webpack:///./src/assets/tunein.png","webpack:///./src/assets/crossfade.png","webpack:///./src/assets/web.png","webpack:///./src/assets/mp3.png","webpack:///./src/assets/hires.png","webpack:///./src/assets/flac.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","keys","_vm","this","_h","$createElement","_c","_self","$route","path","attrs","showPlayerSelect","$store","loading","staticRenderFns","model","callback","$$v","$set","expression","_l","item","title","on","$event","$router","_v","_s","icon","showNavigationMenu","props","items","mounted","methods","component","VBtn","VIcon","VList","VListItem","VListItemAction","VListItemContent","VListItemTitle","VNavigationDrawer","color","topBarTransparent","_e","staticClass","staticStyle","windowtitle","go","$server","$emit","topBarContextItem","computed","VAppBar","VLayout","VSpacer","visible","playlists","header","subheader","label","itemCommand","action","$t","index","item_id","addToPlaylist","components","ListviewItem","watch","menuItems","curItem","curPlaylist","playerQueueItems","created","$on","showContextMenu","showPlayMenu","mediaItem","curBrowseContext","in_library","media_type","is_editable","cmd","endpoint","query","showPlaylistsMenu","removeFromPlaylist","toggleLibrary","playItem","putData","deleteData","track","VCard","VDialog","VDivider","VListItemAvatar","VSubheader","getImageUrl","curQueueItem","activePlayer","artist","artistindex","artistClick","stopPropagation","artists","nativeOn","preventDefault","scopedSlots","_u","fn","ref","_g","streamDetails","quality","content_type","provider","sample_rate","bit_depth","playerQueueDetails","streamVolumeLevelAdjustment","playerCurTimeStr","playerTotalTimeStr","style","progressBarWidth","progress","playerCommand","state","isMobile","Math","round","volume_level","players","player_id","is_group","child_id","powered","togglePlayerPower","disable_volume","setPlayerVolume","volumePlayerIds","allIds","playerId","newVolume","VListItemSubtitle","VSlider","VolumeControl","cur_item","totalSecs","duration","curSecs","cur_item_time","curPercent","toString","formatDuration","innerWidth","streamdetails","sox_options","includes","re","volLevel","replace","queueUpdatedMsg","getQueueDetails","cmd_opt","activePlayerId","url","VFlex","VFooter","VImg","VListItemIcon","VMenu","VProgressLinear","switchPlayer","filteredPlayerIds","show","getAvailablePlayers","enabled","group_parents","VCardTitle","NavigationMenu","TopBar","ContextMenu","PlayerOSD","PlayerSelect","serverAddress","loc","origin","pathname","connect","VApp","VContent","VOverlay","VProgressCircular","register","process","ready","registered","cached","updatefound","updated","alert","location","reload","offline","domProps","mediatype","String","selected","getItems","Vue","use","VueRouter","routes","Home","route","params","Browse","router","loadLocaleMessages","locales","require","messages","forEach","matched","match","locale","VueI18n","navigator","language","split","fallbackLocale","Vuetify","icons","iconfont","globalStore","isInStandaloneMode","handleWindowOptions","addEventListener","destroyed","removeEventListener","body","clientWidth","standalone","matchMedia","matches","install","options","axiosConfig","_axios","axios","server","_address","_ws","connected","syncStatus","endsWith","wsAddress","WebSocket","onopen","_onWsConnect","onmessage","_onWsMessage","onclose","_onWsClose","_onWsError","imageType","size","metadata","album","getData","$log","debug","postData","JSON","stringify","post","put","dataObj","delete","getAllItems","list","urlParams","URLSearchParams","oboe","node","set","done","fullList","queueOpt","newPlayerId","localStorage","setItem","info","player","_selectActivePlayer","msg","parse","message_details","reason","close","lastPlayerId","getItem","isProduction","loggerOptions","isEnabled","logLevel","stringifyArguments","showLogLevel","showMethodName","separator","showConsoleColors","config","productionTip","VueLogger","VueVirtualScroller","store","secNum","parseInt","hours","floor","minutes","seconds","i18n","vuetify","render","h","App","$mount","directives","rawName","indexOf","_k","keyCode","button","onclickHandler","itemClicked","menuClick","hideavatar","version","hidetracknum","track_number","disc_number","owner","hideproviders","provider_ids","isHiRes","hidelibrary","hideduration","hidemenu","pressTimer","ProviderIcons","Number","totalitems","Boolean","touchMoving","cancelled","beforeDestroy","VTooltip","prov","height","providerIds","Array","uniqueProviders","output"],"mappings":"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","file":"js/app.3be71134.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"9f3e890b\",\"config\":\"06165bdd\",\"itemdetails~playerqueue~search\":\"1e2b2bfd\",\"search\":\"6612f8cb\",\"itemdetails\":\"46a862f8\",\"playerqueue\":\"5bd65be6\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"config~search\":1,\"config\":1,\"itemdetails~playerqueue~search\":1,\"itemdetails\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"af60f7e1\",\"config\":\"18def958\",\"itemdetails~playerqueue~search\":\"93e2919b\",\"search\":\"31d6cfe0\",\"itemdetails\":\"0e5e583e\",\"playerqueue\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","module.exports = __webpack_public_path__ + \"img/qobuz.c7eb9a76.png\";","module.exports = __webpack_public_path__ + \"img/spotify.1f3fb1af.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=6419b11e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=6419b11e&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/http_streamer.4c4e4880.png\";","module.exports = __webpack_public_path__ + \"img/homeassistant.29fe3282.png\";","module.exports = __webpack_public_path__ + \"img/webplayer.8e1a0da9.png\";","var map = {\n\t\"./en.json\": \"edd4\",\n\t\"./nl.json\": \"a625\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"49f8\";","module.exports = __webpack_public_path__ + \"img/default_artist.7305b29c.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('TopBar'),_c('NavigationMenu'),_c('v-content',[_c('router-view',{key:_vm.$route.path,attrs:{\"app\":\"\"}})],1),_c('PlayerOSD',{attrs:{\"showPlayerSelect\":_vm.showPlayerSelect}}),_c('ContextMenu'),_c('PlayerSelect'),_c('v-overlay',{attrs:{\"value\":_vm.$store.loading}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"size\":\"64\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"dark\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\"},model:{value:(_vm.$store.showNavigationMenu),callback:function ($$v) {_vm.$set(_vm.$store, \"showNavigationMenu\", $$v)},expression:\"$store.showNavigationMenu\"}},[_c('v-list',[_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-navigation-drawer dark app clipped temporary v-model=\"$store.showNavigationMenu\">\n <v-list>\n <v-list-item v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-action>\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-action>\n <v-list-item-content>\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" />\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: {},\n data () {\n return {\n items: [\n { title: this.$t('home'), icon: 'home', path: '/' },\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('radios'), icon: 'radio', path: '/radios' },\n { title: this.$t('search'), icon: 'search', path: '/search' },\n { title: this.$t('settings'), icon: 'settings', path: '/config' }\n ]\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationMenu.vue?vue&type=template&id=5fe9f182&\"\nimport script from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app-bar',{attrs:{\"app\":\"\",\"flat\":\"\",\"dense\":\"\",\"dark\":\"\",\"color\":_vm.color}},[_c('v-layout',[(!_vm.$store.topBarTransparent)?_c('div',{staticClass:\"body-1\",staticStyle:{\"position\":\"fixed\",\"width\":\"100%\",\"text-align\":\"center\",\"vertical-align\":\"center\",\"margin-top\":\"11px\"}},[_vm._v(_vm._s(_vm.$store.windowtitle))]):_vm._e(),_c('v-btn',{staticStyle:{\"margin-left\":\"-13px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}},[_c('v-icon',[_vm._v(\"menu\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}},[_c('v-icon',[_vm._v(\"arrow_back\")])],1),_c('v-spacer'),(_vm.$store.topBarContextItem)?_c('v-btn',{staticStyle:{\"margin-right\":\"-23px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showContextMenu', _vm.$store.topBarContextItem)}}},[_c('v-icon',[_vm._v(\"more_vert\")])],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-app-bar app flat dense dark :color=\"color\">\n <v-layout>\n <div class=\"body-1\" v-if=\"!$store.topBarTransparent\" style=\"position:fixed;width:100%;text-align:center;vertical-align:center;margin-top:11px;\">{{ $store.windowtitle }}</div>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" style=\"margin-left:-13px\">\n <v-icon>menu</v-icon>\n </v-btn>\n <v-btn @click=\"$router.go(-1)\" icon>\n <v-icon>arrow_back</v-icon>\n </v-btn>\n <v-spacer></v-spacer>\n <v-btn v-if=\"$store.topBarContextItem\" icon @click=\"$server.$emit('showContextMenu', $store.topBarContextItem)\" style=\"margin-right:-23px\">\n <v-icon>more_vert</v-icon>\n </v-btn>\n </v-layout>\n </v-app-bar>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: { },\n data () {\n return {\n }\n },\n computed: {\n color () {\n if (this.$store.topBarTransparent) {\n return 'transparent'\n } else return 'black'\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=0b1c8523&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VAppBar,VBtn,VIcon,VLayout,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"max-width\":\"500px\"},on:{\"input\":function($event){return _vm.$emit('input', $event)}},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card',[(_vm.playlists.length === 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),(_vm.subheader)?_c('v-subheader',[_vm._v(_vm._s(_vm.subheader))]):_vm._e(),_vm._l((_vm.menuItems),function(item){return _c('div',{key:item.label},[_c('v-list-item',{on:{\"click\":function($event){return _vm.itemCommand(item.action)}}},[_c('v-list-item-avatar',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(item.label)))])],1)],1),_c('v-divider')],1)})],2):_vm._e(),(_vm.playlists.length > 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.item_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hideavatar\":false,\"hidetracknum\":true,\"hideproviders\":false,\"hidelibrary\":true,\"hidemenu\":true,\"onclickHandler\":_vm.addToPlaylist}})})],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-dialog v-model=\"visible\" @input=\"$emit('input', $event)\" max-width=\"500px\">\r\n <v-card>\r\n <!-- normal contextmenu items -->\r\n <v-list v-if=\"playlists.length === 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <v-subheader v-if=\"subheader\">{{ subheader }}</v-subheader>\r\n <div v-for=\"item of menuItems\" :key=\"item.label\">\r\n <v-list-item @click=\"itemCommand(item.action)\">\r\n <v-list-item-avatar>\r\n <v-icon>{{ item.icon }}</v-icon>\r\n </v-list-item-avatar>\r\n <v-list-item-content>\r\n <v-list-item-title>{{ $t(item.label) }}</v-list-item-title>\r\n </v-list-item-content>\r\n </v-list-item>\r\n <v-divider></v-divider>\r\n </div>\r\n </v-list>\r\n <!-- playlists selection -->\r\n <v-list v-if=\"playlists.length > 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <listviewItem\r\n v-for=\"(item, index) in playlists\"\r\n :key=\"item.item_id\"\r\n v-bind:item=\"item\"\r\n v-bind:totalitems=\"playlists.length\"\r\n v-bind:index=\"index\"\r\n :hideavatar=\"false\"\r\n :hidetracknum=\"true\"\r\n :hideproviders=\"false\"\r\n :hidelibrary=\"true\"\r\n :hidemenu=\"true\"\r\n :onclickHandler=\"addToPlaylist\"\r\n ></listviewItem>\r\n </v-list>\r\n </v-card>\r\n </v-dialog>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ListviewItem from '@/components/ListviewItem.vue'\r\n\r\nexport default Vue.extend({\r\n components:\r\n {\r\n ListviewItem\r\n },\r\n props:\r\n {},\r\n watch:\r\n {},\r\n data () {\r\n return {\r\n visible: false,\r\n menuItems: [],\r\n header: '',\r\n subheader: '',\r\n curItem: null,\r\n curPlaylist: null,\r\n playerQueueItems: [],\r\n playlists: []\r\n }\r\n },\r\n mounted () { },\r\n created () {\r\n this.$server.$on('showContextMenu', this.showContextMenu)\r\n this.$server.$on('showPlayMenu', this.showPlayMenu)\r\n },\r\n computed: {\r\n },\r\n methods: {\r\n showContextMenu (mediaItem) {\r\n // show contextmenu items for the given mediaItem\r\n this.playlists = []\r\n if (!mediaItem) return\r\n this.curItem = mediaItem\r\n let curBrowseContext = this.$store.topBarContextItem\r\n let menuItems = []\r\n // show info\r\n if (mediaItem !== curBrowseContext) {\r\n menuItems.push({\r\n label: 'show_info',\r\n action: 'info',\r\n icon: 'info'\r\n })\r\n }\r\n // add to library\r\n if (mediaItem.in_library.length === 0) {\r\n menuItems.push({\r\n label: 'add_library',\r\n action: 'toggle_library',\r\n icon: 'favorite_border'\r\n })\r\n }\r\n // remove from library\r\n if (mediaItem.in_library.length > 0) {\r\n menuItems.push({\r\n label: 'remove_library',\r\n action: 'toggle_library',\r\n icon: 'favorite'\r\n })\r\n }\r\n // remove from playlist (playlist tracks only)\r\n if (curBrowseContext && curBrowseContext.media_type === 4) {\r\n this.curPlaylist = curBrowseContext\r\n if (mediaItem.media_type === 3 && curBrowseContext.is_editable) {\r\n menuItems.push({\r\n label: 'remove_playlist',\r\n action: 'remove_playlist',\r\n icon: 'remove_circle_outline'\r\n })\r\n }\r\n }\r\n // add to playlist action (tracks only)\r\n if (mediaItem.media_type === 3) {\r\n menuItems.push({\r\n label: 'add_playlist',\r\n action: 'add_playlist',\r\n icon: 'add_circle_outline'\r\n })\r\n }\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n showPlayMenu (mediaItem) {\r\n // show playmenu items for the given mediaItem\r\n this.playlists = []\r\n this.curItem = mediaItem\r\n if (!mediaItem) return\r\n let menuItems = [\r\n {\r\n label: 'play_now',\r\n action: 'play',\r\n icon: 'play_circle_outline'\r\n },\r\n {\r\n label: 'play_next',\r\n action: 'next',\r\n icon: 'queue_play_next'\r\n },\r\n {\r\n label: 'add_queue',\r\n action: 'add',\r\n icon: 'playlist_add'\r\n }\r\n ]\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n async showPlaylistsMenu () {\r\n // get all editable playlists\r\n let trackProviders = []\r\n for (let item of this.curItem.provider_ids) {\r\n trackProviders.push(item.provider)\r\n }\r\n let playlists = await this.$server.getData('library/playlists')\r\n let items = []\r\n for (var playlist of playlists['items']) {\r\n if (\r\n playlist.is_editable &&\r\n (!this.curPlaylist || playlist.item_id !== this.curPlaylist.item_id)\r\n ) {\r\n for (let item of playlist.provider_ids) {\r\n if (trackProviders.includes(item.provider)) {\r\n items.push(playlist)\r\n break\r\n }\r\n }\r\n }\r\n }\r\n this.playlists = items\r\n },\r\n itemCommand (cmd) {\r\n if (cmd === 'info') {\r\n // show media info\r\n let endpoint = ''\r\n if (this.curItem.media_type === 1) endpoint = 'artists'\r\n if (this.curItem.media_type === 2) endpoint = 'albums'\r\n if (this.curItem.media_type === 3) endpoint = 'tracks'\r\n if (this.curItem.media_type === 4) endpoint = 'playlists'\r\n if (this.curItem.media_type === 5) endpoint = 'radios'\r\n this.$router.push({\r\n path: '/' + endpoint + '/' + this.curItem.item_id,\r\n query: { provider: this.curItem.provider }\r\n })\r\n this.visible = false\r\n } else if (cmd === 'playmenu') {\r\n // show play menu\r\n return this.showPlayMenu(this.curItem)\r\n } else if (cmd === 'add_playlist') {\r\n // add to playlist\r\n return this.showPlaylistsMenu()\r\n } else if (cmd === 'remove_playlist') {\r\n // remove track from playlist\r\n this.removeFromPlaylist(\r\n this.curItem,\r\n this.curPlaylist.item_id,\r\n 'playlist_remove'\r\n )\r\n this.visible = false\r\n } else if (cmd === 'toggle_library') {\r\n // add/remove to/from library\r\n this.$server.toggleLibrary(this.curItem)\r\n this.visible = false\r\n } else {\r\n // assume play command\r\n this.$server.playItem(this.curItem, cmd)\r\n this.visible = false\r\n }\r\n },\r\n addToPlaylist (playlistObj) {\r\n /// add track to playlist\r\n let endpoint = 'playlists/' + playlistObj.item_id + '/tracks'\r\n this.$server.putData(endpoint, this.curItem)\r\n .then(result => {\r\n this.visible = false\r\n })\r\n },\r\n removeFromPlaylist (track, playlistId) {\r\n /// remove track from playlist\r\n let endpoint = 'playlists/' + playlistId + '/tracks'\r\n this.$server.deleteData(endpoint, track)\r\n .then(result => {\r\n // reload listing\r\n this.$server.$emit('refresh_listing')\r\n })\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextMenu.vue?vue&type=template&id=54776170&\"\nimport script from \"./ContextMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VCard,VDialog,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-footer',{staticStyle:{\"background-color\":\"black\"},attrs:{\"app\":\"\",\"fixed\":\"\",\"padless\":\"\",\"light\":\"\",\"elevation\":\"10\"}},[_c('v-card',{staticStyle:{\"margin-top\":\"1px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"#E0E0E0\"}},[_c('v-list-item',{attrs:{\"two-line\":\"\"}},[(_vm.curQueueItem)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.54)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.curQueueItem),\"lazy-src\":require('../assets/file.png')}})]):_c('v-list-item-avatar',[_c('v-icon',[_vm._v(\"speaker\")])],1),_c('v-list-item-content',[(_vm.curQueueItem)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.curQueueItem.name))]):(_vm.$server.activePlayer)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$server.activePlayer.name))]):_vm._e(),(_vm.curQueueItem)?_c('v-list-item-subtitle',{staticStyle:{\"color\":\"primary\"}},_vm._l((_vm.curQueueItem.artists),function(artist,artistindex){return _c('span',{key:artistindex},[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.curQueueItem.artists.length)?_c('label',{key:artistindex},[_vm._v(\" / \")]):_vm._e()])}),0):_vm._e()],1),(_vm.streamDetails)?_c('v-list-item-action',[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[(_vm.streamDetails.quality > 6)?_c('v-img',{attrs:{\"contain\":\"\",\"src\":require('../assets/hires.png'),\"height\":\"30\"}}):_vm._e(),(_vm.streamDetails.quality <= 6)?_c('v-img',{staticStyle:{\"filter\":\"invert(100%)\"},attrs:{\"contain\":\"\",\"src\":_vm.streamDetails.content_type ? require('../assets/' + _vm.streamDetails.content_type + '.png') : '',\"height\":\"30\"}}):_vm._e()],1)]}}],null,false,872579316)},[(_vm.streamDetails)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.$t('stream_details')))]),_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":_vm.streamDetails.provider ? require('../assets/' + _vm.streamDetails.provider + '.png') : ''}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.streamDetails.provider))])],1)],1),_c('v-divider'),_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{staticStyle:{\"filter\":\"invert(100%)\"},attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":_vm.streamDetails.content_type ? require('../assets/' + _vm.streamDetails.content_type + '.png') : ''}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.streamDetails.sample_rate/1000)+\" kHz / \"+_vm._s(_vm.streamDetails.bit_depth)+\" bits \")])],1)],1),_c('v-divider'),(_vm.playerQueueDetails.crossfade_enabled)?_c('div',[_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":require('../assets/crossfade.png')}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t('crossfade_enabled')))])],1)],1),_c('v-divider')],1):_vm._e(),(_vm.streamVolumeLevelAdjustment)?_c('div',[_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-icon',{staticStyle:{\"margin-left\":\"13px\"},attrs:{\"color\":\"black\"}},[_vm._v(\"volume_up\")])],1),_c('v-list-item-content',[_c('v-list-item-title',{staticStyle:{\"margin-left\":\"12px\"}},[_vm._v(_vm._s(_vm.streamVolumeLevelAdjustment))])],1)],1),_c('v-divider')],1):_vm._e()],1):_vm._e()],1)],1):_vm._e()],1),_c('div',{staticClass:\"body-2\",staticStyle:{\"height\":\"30px\",\"width\":\"100%\",\"color\":\"rgba(0,0,0,.65)\",\"margin-top\":\"-12px\",\"background-color\":\"#E0E0E0\"},attrs:{\"align\":\"center\"}},[(_vm.curQueueItem)?_c('div',{staticStyle:{\"height\":\"12px\",\"margin-left\":\"22px\",\"margin-right\":\"20px\",\"margin-top\":\"2px\"}},[_c('span',{staticClass:\"left\"},[_vm._v(\" \"+_vm._s(_vm.playerCurTimeStr)+\" \")]),_c('span',{staticClass:\"right\"},[_vm._v(\" \"+_vm._s(_vm.playerTotalTimeStr)+\" \")])]):_vm._e()]),(_vm.curQueueItem)?_c('v-progress-linear',{style:('margin-top:-22px;margin-left:80px;width:' + _vm.progressBarWidth + 'px;'),attrs:{\"fixed\":\"\",\"light\":\"\",\"value\":_vm.progress}}):_vm._e()],1),_c('v-list-item',{staticStyle:{\"height\":\"44px\",\"margin-bottom\":\"5px\",\"margin-top\":\"-4px\",\"background-color\":\"black\"},attrs:{\"dark\":\"\",\"dense\":\"\"}},[(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('previous')}}},[_c('v-icon',[_vm._v(\"skip_previous\")])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-left\":\"-32px\",\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"x-large\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('play_pause')}}},[_c('v-icon',{attrs:{\"size\":\"50\"}},[_vm._v(_vm._s(_vm.$server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"))])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('next')}}},[_c('v-icon',[_vm._v(\"skip_next\")])],1)],1):_vm._e(),_c('v-list-item-content'),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"padding\":\"28px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/playerqueue/')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"queue_music\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$t(\"queue\")))])],1)],1)],1):_vm._e(),(_vm.$server.activePlayer && !_vm.$store.isMobile)?_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.activePlayer.volume_level)))])],1)],1)]}}],null,false,1951340450)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":_vm.$server.activePlayer.player_id}})],1)],1):_vm._e(),_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\",\"margin-right\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayersMenu')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"speaker\")]),(_vm.$server.activePlayer)?_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$server.activePlayer.name))]):_c('span',{staticClass:\"overline\"})],1)],1)],1)],1),(_vm.$store.isInStandaloneMode)?_c('v-card',{staticStyle:{\"height\":\"20px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"black\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-list',[_c('v-list-item',{staticStyle:{\"height\":\"50px\",\"padding-bottom\":\"5\"}},[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-10px\"},attrs:{\"tile\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(_vm._s(_vm.players[_vm.player_id].is_group ? \"speaker_group\" : \"speaker\"))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.players[_vm.player_id].name))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.$t(\"state.\" + _vm.players[_vm.player_id].state)))])],1)],1),_c('v-divider'),_vm._l((_vm.volumePlayerIds),function(child_id){return _c('div',{key:child_id},[_c('div',{staticClass:\"body-2\",style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);')},[_c('v-btn',{staticStyle:{\"margin-left\":\"8px\"},style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'),attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.togglePlayerPower(child_id)}}},[_c('v-icon',[_vm._v(\"power_settings_new\")])],1),_c('span',{staticStyle:{\"margin-left\":\"10px\"}},[_vm._v(_vm._s(_vm.players[child_id].name))]),_c('div',{staticStyle:{\"margin-top\":\"-8px\",\"margin-left\":\"15px\",\"margin-right\":\"15px\",\"height\":\"35px\"}},[(!_vm.players[child_id].disable_volume)?_c('v-slider',{attrs:{\"lazy\":\"\",\"disabled\":!_vm.players[child_id].powered,\"value\":Math.round(_vm.players[child_id].volume_level),\"prepend-icon\":\"volume_down\",\"append-icon\":\"volume_up\"},on:{\"end\":function($event){return _vm.setPlayerVolume(child_id, $event)},\"click:append\":function($event){return _vm.setPlayerVolume(child_id, 'up')},\"click:prepend\":function($event){return _vm.setPlayerVolume(child_id, 'down')}}}):_vm._e()],1)],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-card>\n <v-list>\n <v-list-item style=\"height:50px;padding-bottom:5;\">\n <v-list-item-avatar tile style=\"margin-left:-10px;\">\n <v-icon large>{{\n players[player_id].is_group ? \"speaker_group\" : \"speaker\"\n }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title>{{ players[player_id].name }}</v-list-item-title>\n <v-list-item-subtitle>{{\n $t(\"state.\" + players[player_id].state)\n }}</v-list-item-subtitle>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <div v-for=\"child_id in volumePlayerIds\" :key=\"child_id\">\n <div\n class=\"body-2\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-btn\n icon\n @click=\"togglePlayerPower(child_id)\"\n style=\"margin-left:8px\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-icon>power_settings_new</v-icon>\n </v-btn>\n <span style=\"margin-left:10px\">{{ players[child_id].name }}</span>\n <div\n style=\"margin-top:-8px;margin-left:15px;margin-right:15px;height:35px;\"\n >\n <v-slider\n lazy\n :disabled=\"!players[child_id].powered\"\n v-if=\"!players[child_id].disable_volume\"\n :value=\"Math.round(players[child_id].volume_level)\"\n prepend-icon=\"volume_down\"\n append-icon=\"volume_up\"\n @end=\"setPlayerVolume(child_id, $event)\"\n @click:append=\"setPlayerVolume(child_id, 'up')\"\n @click:prepend=\"setPlayerVolume(child_id, 'down')\"\n ></v-slider>\n </div>\n </div>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: ['value', 'players', 'player_id'],\n data () {\n return {}\n },\n computed: {\n volumePlayerIds () {\n var allIds = [this.player_id]\n allIds.push(...this.players[this.player_id].group_childs)\n return allIds\n }\n },\n mounted () { },\n methods: {\n setPlayerVolume: function (playerId, newVolume) {\n this.players[playerId].volume_level = newVolume\n if (newVolume === 'up') {\n this.$server.playerCommand('volume_up', null, playerId)\n } else if (newVolume === 'down') {\n this.$server.playerCommand('volume_down', null, playerId)\n } else {\n this.$server.playerCommand('volume_set', newVolume, playerId)\n }\n },\n togglePlayerPower: function (playerId) {\n this.$server.playerCommand('power_toggle', null, playerId)\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VolumeControl.vue?vue&type=template&id=65f7b2c2&\"\nimport script from \"./VolumeControl.vue?vue&type=script&lang=js&\"\nexport * from \"./VolumeControl.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\ninstallComponents(component, {VBtn,VCard,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSlider})\n","<template>\n <v-footer\n app\n fixed\n padless\n light\n elevation=\"10\"\n style=\"background-color: black;\"\n >\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"#E0E0E0\"\n style=\"margin-top:1px;\"\n >\n <!-- now playing media -->\n <v-list-item two-line>\n <v-list-item-avatar tile v-if=\"curQueueItem\">\n <img\n :src=\"$server.getImageUrl(curQueueItem)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.54);\"\n />\n </v-list-item-avatar>\n <v-list-item-avatar v-else>\n <v-icon>speaker</v-icon>\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title v-if=\"curQueueItem\">\n {{ curQueueItem.name }}</v-list-item-title\n >\n <v-list-item-title v-else-if=\"$server.activePlayer\">\n {{ $server.activePlayer.name }}</v-list-item-title\n >\n <v-list-item-subtitle v-if=\"curQueueItem\" style=\"color: primary\">\n <span\n v-for=\"(artist, artistindex) in curQueueItem.artists\"\n :key=\"artistindex\"\n >\n <a v-on:click=\"artistClick(artist)\" @click.stop=\"\">{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < curQueueItem.artists.length\"\n :key=\"artistindex\"\n >\n /\n </label>\n </span>\n </v-list-item-subtitle>\n </v-list-item-content>\n <!-- streaming quality details -->\n <v-list-item-action v-if=\"streamDetails\">\n <v-menu\n :close-on-content-click=\"false\"\n :nudge-width=\"250\"\n offset-x\n top\n @click.native.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-img contain v-if=\"streamDetails.quality > 6\" :src=\"require('../assets/hires.png')\" height=\"30\" />\n <v-img contain v-if=\"streamDetails.quality <= 6\" :src=\"streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''\" height=\"30\" style='filter: invert(100%);' />\n </v-btn>\n </template>\n <v-list v-if=\"streamDetails\">\n <v-subheader class=\"title\">{{ $t('stream_details') }}</v-subheader>\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"streamDetails.provider ? require('../assets/' + streamDetails.provider + '.png') : ''\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ streamDetails.provider }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''\" style='filter: invert(100%);' />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ streamDetails.sample_rate/1000 }} kHz / {{ streamDetails.bit_depth }} bits </v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <div v-if=\"playerQueueDetails.crossfade_enabled\">\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"require('../assets/crossfade.png')\"/>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ $t('crossfade_enabled') }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n <div v-if=\"streamVolumeLevelAdjustment\">\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-icon color=\"black\" style=\"margin-left:13px\">volume_up</v-icon>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title style=\"margin-left:12px\">{{ streamVolumeLevelAdjustment }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-menu>\n </v-list-item-action>\n </v-list-item>\n\n <!-- progress bar -->\n <div\n class=\"body-2\"\n style=\"height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-12px;background-color:#E0E0E0;\"\n align=\"center\"\n >\n <div\n style=\"height:12px;margin-left:22px;margin-right:20px;margin-top:2px;\"\n v-if=\"curQueueItem\"\n >\n <span class=\"left\">\n {{ playerCurTimeStr }}\n </span>\n <span class=\"right\">\n {{ playerTotalTimeStr }}\n </span>\n </div>\n </div>\n <v-progress-linear\n fixed\n light\n :value=\"progress\"\n v-if=\"curQueueItem\"\n :style=\"\n 'margin-top:-22px;margin-left:80px;width:' + progressBarWidth + 'px;'\n \"\n />\n </v-card>\n\n <!-- Control buttons -->\n <v-list-item\n dark\n dense\n style=\"height:44px;margin-bottom:5px;margin-top:-4px;background-color:black;\"\n >\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn small icon @click=\"playerCommand('previous')\">\n <v-icon>skip_previous</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action\n v-if=\"$server.activePlayer\"\n style=\"margin-left:-32px;margin-top:15px\"\n >\n <v-btn icon x-large @click=\"playerCommand('play_pause')\">\n <v-icon size=\"50\">{{\n $server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"\n }}</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn icon small @click=\"playerCommand('next')\">\n <v-icon>skip_next</v-icon>\n </v-btn>\n </v-list-item-action>\n <!-- player controls -->\n <v-list-item-content> </v-list-item-content>\n\n <!-- active player queue button -->\n <v-list-item-action style=\"padding:28px;\" v-if=\"$server.activePlayer\">\n <v-btn\n small\n text\n icon\n @click=\"$router.push('/playerqueue/')\"\n >\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>queue_music</v-icon>\n <span class=\"overline\">{{ $t(\"queue\") }}</span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n\n <!-- active player volume -->\n <v-list-item-action style=\"padding:20px;\" v-if=\"$server.activePlayer && !$store.isMobile\">\n <v-menu\n :close-on-content-click=\"false\"\n :nudge-width=\"250\"\n offset-x\n top\n @click.native.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn small icon v-on=\"on\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>volume_up</v-icon>\n <span class=\"overline\">{{\n Math.round($server.activePlayer.volume_level)\n }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"$server.activePlayer.player_id\"\n />\n </v-menu>\n </v-list-item-action>\n\n <!-- active player btn -->\n <v-list-item-action style=\"padding:20px;margin-right:15px\">\n <v-btn small text icon @click=\"$server.$emit('showPlayersMenu')\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>speaker</v-icon>\n <span class=\"overline\" v-if=\"$server.activePlayer\">{{\n $server.activePlayer.name\n }}</span>\n <span class=\"overline\" v-else> </span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n </v-list-item>\n <!-- add some additional whitespace in standalone mode only -->\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"black\"\n style=\"height:20px\" v-if=\"$store.isInStandaloneMode\"/>\n </v-footer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.divider {\n height: 1px;\n width: 100%;\n background-color: #cccccc;\n}\n.right {\n float: right;\n}\n.left {\n float: left;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n props: [],\n data () {\n return {\n playerQueueDetails: {}\n }\n },\n watch: { },\n computed: {\n curQueueItem () {\n if (this.playerQueueDetails) {\n return this.playerQueueDetails.cur_item\n } else {\n return null\n }\n },\n progress () {\n if (!this.curQueueItem) return 0\n var totalSecs = this.curQueueItem.duration\n var curSecs = this.playerQueueDetails.cur_item_time\n var curPercent = curSecs / totalSecs * 100\n return curPercent\n },\n playerCurTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var curSecs = this.playerQueueDetails.cur_item_time\n return curSecs.toString().formatDuration()\n },\n playerTotalTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var totalSecs = this.curQueueItem.duration\n return totalSecs.toString().formatDuration()\n },\n progressBarWidth () {\n return window.innerWidth - 160\n },\n streamDetails () {\n if (!this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item.streamdetails.provider || !this.playerQueueDetails.cur_item.streamdetails.content_type) return {}\n return this.playerQueueDetails.cur_item.streamdetails\n },\n streamVolumeLevelAdjustment () {\n if (!this.streamDetails || !this.streamDetails.sox_options) return ''\n if (this.streamDetails.sox_options.includes('vol ')) {\n var re = /(.*vol\\s+)(.*)(\\s+dB.*)/\n var volLevel = this.streamDetails.sox_options.replace(re, '$2')\n return volLevel + ' dB'\n }\n return ''\n }\n },\n created () {\n this.$server.$on('queue updated', this.queueUpdatedMsg)\n this.$server.$on('new player selected', this.getQueueDetails)\n },\n methods: {\n playerCommand (cmd, cmd_opt = null) {\n this.$server.playerCommand(cmd, cmd_opt, this.$server.activePlayerId)\n },\n artistClick (item) {\n // artist entry clicked within the listviewItem\n var url = '/artists/' + item.item_id\n this.$router.push({ path: url, query: { provider: item.provider } })\n },\n queueUpdatedMsg (data) {\n if (data.player_id === this.$server.activePlayerId) {\n for (const [key, value] of Object.entries(data)) {\n Vue.set(this.playerQueueDetails, key, value)\n }\n }\n },\n async getQueueDetails () {\n if (this.$server.activePlayer) {\n let endpoint = 'players/' + this.$server.activePlayerId + '/queue'\n this.playerQueueDetails = await this.$server.getData(endpoint)\n }\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerOSD.vue?vue&type=template&id=6419b11e&scoped=true&\"\nimport script from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerOSD.vue?vue&type=style&index=0&id=6419b11e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6419b11e\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VBtn,VCard,VDivider,VFlex,VFooter,VIcon,VImg,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemIcon,VListItemSubtitle,VListItemTitle,VMenu,VProgressLinear,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"right\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\",\"width\":\"300\"},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card-title',{staticClass:\"headline\"},[_c('b',[_vm._v(_vm._s(_vm.$t('players')))])]),_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-divider'),_vm._l((_vm.filteredPlayerIds),function(playerId){return _c('div',{key:playerId,style:(_vm.$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : '')},[_c('v-list-item',{staticStyle:{\"margin-left\":\"-5px\",\"margin-right\":\"-15px\"},attrs:{\"ripple\":\"\",\"dense\":\"\"},on:{\"click\":function($event){return _vm.$server.switchPlayer(_vm.$server.players[playerId].player_id)}}},[_c('v-list-item-avatar',[_c('v-icon',{attrs:{\"size\":\"45\"}},[_vm._v(_vm._s(_vm.$server.players[playerId].is_group ? 'speaker_group' : 'speaker'))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',{staticClass:\"subtitle-1\"},[_vm._v(_vm._s(_vm.$server.players[playerId].name))]),_c('v-list-item-subtitle',{key:_vm.$server.players[playerId].state,staticClass:\"body-2\",staticStyle:{\"font-weight\":\"normal\"}},[_vm._v(\" \"+_vm._s(_vm.$t('state.' + _vm.$server.players[playerId].state))+\" \")])],1),(_vm.$server.activePlayerId)?_c('v-list-item-action',{staticStyle:{\"padding-right\":\"10px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"close-on-click\":true,\"nudge-width\":250,\"offset-x\":\"\",\"right\":\"\"},nativeOn:{\"click\":[function($event){$event.stopPropagation();},function($event){$event.stopPropagation();$event.preventDefault();}]},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({staticStyle:{\"color\":\"rgba(0,0,0,.54)\"},attrs:{\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.players[playerId].volume_level)))])],1)],1)]}}],null,true)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":playerId}})],1)],1):_vm._e()],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <!-- players side menu -->\n <v-navigation-drawer\n right\n app\n clipped\n temporary\n v-model=\"visible\"\n width=\"300\"\n >\n <v-card-title class=\"headline\">\n <b>{{ $t('players') }}</b>\n </v-card-title>\n <v-list dense>\n <v-divider></v-divider>\n <div\n v-for=\"playerId of filteredPlayerIds\"\n :key=\"playerId\"\n :style=\"$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : ''\"\n >\n <v-list-item\n ripple\n dense\n style=\"margin-left: -5px; margin-right: -15px\"\n @click=\"$server.switchPlayer($server.players[playerId].player_id)\"\n >\n <v-list-item-avatar>\n <v-icon size=\"45\">{{ $server.players[playerId].is_group ? 'speaker_group' : 'speaker' }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title class=\"subtitle-1\">{{ $server.players[playerId].name }}</v-list-item-title>\n\n <v-list-item-subtitle\n class=\"body-2\"\n style=\"font-weight:normal;\"\n :key=\"$server.players[playerId].state\"\n >\n {{ $t('state.' + $server.players[playerId].state) }}\n </v-list-item-subtitle>\n\n </v-list-item-content>\n\n <v-list-item-action\n style=\"padding-right:10px;\"\n v-if=\"$server.activePlayerId\"\n >\n <v-menu\n :close-on-content-click=\"false\"\n :close-on-click=\"true\"\n :nudge-width=\"250\"\n offset-x\n right\n @click.native.stop\n @click.native.stop.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n style=\"color:rgba(0,0,0,.54);\"\n v-on=\"on\"\n >\n <v-flex\n xs12\n class=\"vertical-btn\"\n >\n <v-icon>volume_up</v-icon>\n <span class=\"overline\">{{ Math.round($server.players[playerId].volume_level) }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"playerId\"\n />\n </v-menu>\n </v-list-item-action>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n watch: {\n },\n data () {\n return {\n filteredPlayerIds: [],\n visible: false\n }\n },\n computed: {\n },\n created () {\n this.$server.$on('showPlayersMenu', this.show)\n this.$server.$on('players changed', this.getAvailablePlayers)\n this.getAvailablePlayers()\n },\n methods: {\n show () {\n this.visible = true\n },\n getAvailablePlayers () {\n // generate a list of playerIds that we want to show in the list\n this.filteredPlayerIds = []\n for (var playerId in this.$server.players) {\n // we're only interested in enabled players that are not group childs\n if (this.$server.players[playerId].enabled && this.$server.players[playerId].group_parents.length === 0) {\n this.filteredPlayerIds.push(playerId)\n }\n }\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerSelect.vue?vue&type=template&id=502704d8&scoped=true&\"\nimport script from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerSelect.vue?vue&type=style&index=0&id=502704d8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"502704d8\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VCardTitle,VDivider,VFlex,VIcon,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VNavigationDrawer})\n","<template>\n <v-app>\n <TopBar />\n <NavigationMenu></NavigationMenu>\n <v-content>\n <router-view app :key=\"$route.path\"></router-view>\n </v-content>\n <PlayerOSD :showPlayerSelect=\"showPlayerSelect\" />\n <ContextMenu/>\n <PlayerSelect/>\n <v-overlay :value=\"$store.loading\">\n <v-progress-circular indeterminate size=\"64\"></v-progress-circular>\n </v-overlay>\n </v-app>\n</template>\n\n<style>\n .body {\n background-color: black;\n overscroll-behavior-x: none;\n }\n</style>\n\n<script>\nimport Vue from 'vue'\nimport NavigationMenu from './components/NavigationMenu.vue'\nimport TopBar from './components/TopBar.vue'\nimport ContextMenu from './components/ContextMenu.vue'\nimport PlayerOSD from './components/PlayerOSD.vue'\nimport PlayerSelect from './components/PlayerSelect.vue'\n\nexport default Vue.extend({\n name: 'App',\n components: {\n NavigationMenu,\n TopBar,\n ContextMenu,\n PlayerOSD,\n PlayerSelect\n },\n data: () => ({\n showPlayerSelect: false\n }),\n created () {\n // TODO: retrieve serveraddress through discovery and/or user settings\n let serverAddress = ''\n if (process.env.NODE_ENV === 'production') {\n let loc = window.location\n serverAddress = loc.origin + loc.pathname\n } else {\n serverAddress = 'http://192.168.1.79:8095/'\n }\n this.$server.connect(serverAddress)\n }\n})\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=85e13390&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VApp,VContent,VOverlay,VProgressCircular})\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered () {\n console.log('Service worker has been registered.')\n },\n cached () {\n console.log('Content has been cached for offline use.')\n },\n updatefound () {\n console.log('New content is downloading.')\n },\n updated () {\n alert('New content is available; please refresh.')\n window.location.reload(true)\n },\n offline () {\n alert('No internet connection found. App is running in offline mode.')\n },\n error (error) {\n console.error('Error during service worker registration:', error)\n }\n })\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-icon',{staticStyle:{\"margin-left\":\"15px\"}},[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.title)}})],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-list tile>\n <v-list-item tile\n v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-icon style=\"margin-left:15px\">\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title v-text=\"item.title\"></v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </section>\n</template>\n\n<script>\n\nexport default {\n name: 'home',\n data () {\n return {\n items: [\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('search'), icon: 'search', path: '/search' }\n ]\n }\n },\n created () {\n this.$store.windowtitle = this.$t('musicassistant')\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=38d5da10&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":item.media_type < 4 ? _vm.$store.isMobile : false,\"hidelibrary\":true,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hideduration\":item.media_type == 5}})]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"items\"\n :item-size=\"72\"\n key-field=\"item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"item.media_type < 4 ? $store.isMobile : false\"\n :hidelibrary=\"true\"\n :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n :hideduration=\"item.media_type == 5\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n name: 'browse',\n components: {\n ListviewItem\n },\n props: {\n mediatype: String,\n provider: String\n },\n data () {\n return {\n selected: [2],\n items: []\n }\n },\n created () {\n this.$store.windowtitle = this.$t(this.mediatype)\n this.getItems()\n this.$server.$on('refresh_listing', this.getItems)\n },\n methods: {\n async getItems () {\n // retrieve the full list of items\n let endpoint = 'library/' + this.mediatype\n return this.$server.getAllItems(endpoint, this.items)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=14629744&\"\nimport script from \"./Browse.vue?vue&type=script&lang=js&\"\nexport * from \"./Browse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VList } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VList})\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Browse from '../views/Browse.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/config',\n name: 'config',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/config/:configKey',\n name: 'configKey',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/search',\n name: 'search',\n component: () => import(/* webpackChunkName: \"search\" */ '../views/Search.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:media_type/:media_id',\n name: 'itemdetails',\n component: () => import(/* webpackChunkName: \"itemdetails\" */ '../views/ItemDetails.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/playerqueue',\n name: 'playerqueue',\n component: () => import(/* webpackChunkName: \"playerqueue\" */ '../views/PlayerQueue.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:mediatype',\n name: 'browse',\n component: Browse,\n props: route => ({ ...route.params, ...route.query })\n }\n]\n\nconst router = new VueRouter({\n mode: 'hash',\n routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\n\nVue.use(VueI18n)\n\nfunction loadLocaleMessages () {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.json$/i)\n const messages = {}\n locales.keys().forEach(key => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (matched && matched.length > 1) {\n const locale = matched[1]\n messages[locale] = locales(key)\n }\n })\n return messages\n}\n\nexport default new VueI18n({\n // locale: process.env.VUE_APP_I18N_LOCALE || 'en',\n locale: navigator.language.split('-')[0],\n fallbackLocale: 'en',\n messages: loadLocaleMessages()\n})\n","import Vue from 'vue'\n// import Vuetify from 'vuetify'\nimport Vuetify from 'vuetify/lib'\nimport 'vuetify/dist/vuetify.min.css'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n icons: {\n iconfont: 'md'\n }\n})\n","import Vue from 'vue'\n\nconst globalStore = new Vue({\n data () {\n return {\n windowtitle: 'Home',\n loading: false,\n showNavigationMenu: false,\n topBarTransparent: false,\n topBarContextItem: null,\n isMobile: false,\n isInStandaloneMode: false\n }\n },\n created () {\n this.handleWindowOptions()\n window.addEventListener('resize', this.handleWindowOptions)\n },\n destroyed () {\n window.removeEventListener('resize', this.handleWindowOptions)\n },\n methods: {\n handleWindowOptions () {\n this.isMobile = (document.body.clientWidth < 700)\n this.isInStandaloneMode = (window.navigator.standalone === true) || (window.matchMedia('(display-mode: standalone)').matches)\n }\n }\n})\n\nexport default {\n globalStore,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$store = globalStore\n }\n}\n","'use strict'\n\nimport Vue from 'vue'\nimport axios from 'axios'\nimport oboe from 'oboe'\n\nconst axiosConfig = {\n timeout: 60 * 1000\n // withCredentials: true, // Check cross-site Access-Control\n}\nconst _axios = axios.create(axiosConfig)\n\n// Holds the connection to the server\n\nconst server = new Vue({\n\n _address: '',\n _ws: null,\n\n data () {\n return {\n connected: false,\n players: {},\n activePlayerId: null,\n syncStatus: []\n }\n },\n methods: {\n\n async connect (serverAddress) {\n // Connect to the server\n if (!serverAddress.endsWith('/')) {\n serverAddress = serverAddress + '/'\n }\n this._address = serverAddress\n let wsAddress = serverAddress.replace('http', 'ws') + 'ws'\n this._ws = new WebSocket(wsAddress)\n this._ws.onopen = this._onWsConnect\n this._ws.onmessage = this._onWsMessage\n this._ws.onclose = this._onWsClose\n this._ws.onerror = this._onWsError\n },\n\n async toggleLibrary (item) {\n /// triggered when user clicks the library (heart) button\n if (item.in_library.length === 0) {\n // add to library\n await this.putData('library', item)\n item.in_library = [item.provider]\n } else {\n // remove from library\n await this.deleteData('library', item)\n item.in_library = []\n }\n },\n\n getImageUrl (mediaItem, imageType = 'image', size = 0) {\n // format the image url\n if (!mediaItem || !mediaItem.media_type) return ''\n if (mediaItem.media_type === 4 && imageType !== 'image') return ''\n if (mediaItem.media_type === 5 && imageType !== 'image') return ''\n if (mediaItem.provider === 'database' && imageType === 'image') {\n return `${this._address}api/${mediaItem.media_type}/${mediaItem.item_id}/thumb?provider=${mediaItem.provider}&size=${size}`\n } else if (mediaItem.metadata && mediaItem.metadata[imageType]) {\n return mediaItem.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.metadata && mediaItem.album.metadata[imageType]) {\n return mediaItem.album.metadata[imageType]\n } else if (mediaItem.artist && mediaItem.artist.metadata && mediaItem.artist.metadata[imageType]) {\n return mediaItem.artist.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.artist && mediaItem.album.artist.metadata && mediaItem.album.artist.metadata[imageType]) {\n return mediaItem.album.artist.metadata[imageType]\n } else if (mediaItem.artists && mediaItem.artists[0].metadata && mediaItem.artists[0].metadata[imageType]) {\n return mediaItem.artists[0].metadata[imageType]\n } else return ''\n },\n\n async getData (endpoint, params = {}) {\n // get data from the server\n let url = this._address + 'api/' + endpoint\n let result = await _axios.get(url, { params: params })\n Vue.$log.debug('getData', endpoint, result)\n return result.data\n },\n\n async postData (endpoint, data) {\n // post data to the server\n let url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n let result = await _axios.post(url, data)\n Vue.$log.debug('postData', endpoint, result)\n return result.data\n },\n\n async putData (endpoint, data) {\n // put data to the server\n let url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n let result = await _axios.put(url, data)\n Vue.$log.debug('putData', endpoint, result)\n return result.data\n },\n\n async deleteData (endpoint, dataObj) {\n // delete data on the server\n let url = this._address + 'api/' + endpoint\n dataObj = JSON.stringify(dataObj)\n let result = await _axios.delete(url, { data: dataObj })\n Vue.$log.debug('deleteData', endpoint, result)\n return result.data\n },\n\n async getAllItems (endpoint, list, params = {}) {\n // retrieve all items and fill list\n let url = this._address + 'api/' + endpoint\n if (params) {\n var urlParams = new URLSearchParams(params)\n url += '?' + urlParams.toString()\n }\n let index = 0\n oboe(url)\n .node('items.*', function (item) {\n Vue.set(list, index, item)\n index += 1\n })\n .done(function (fullList) {\n // truncate list if needed\n if (list.length > fullList.items.length) {\n list.splice(fullList.items.length)\n }\n })\n },\n\n playerCommand (cmd, cmd_opt = '', playerId = this.activePlayerId) {\n let endpoint = 'players/' + playerId + '/cmd/' + cmd\n this.postData(endpoint, cmd_opt)\n },\n\n async playItem (item, queueOpt) {\n this.$store.loading = true\n let endpoint = 'players/' + this.activePlayerId + '/play_media/' + queueOpt\n await this.postData(endpoint, item)\n this.$store.loading = false\n },\n\n switchPlayer (newPlayerId) {\n if (newPlayerId !== this.activePlayerId) {\n this.activePlayerId = newPlayerId\n localStorage.setItem('activePlayerId', newPlayerId)\n this.$emit('new player selected', newPlayerId)\n }\n },\n\n async _onWsConnect () {\n // Websockets connection established\n Vue.$log.info('Connected to server ' + this._address)\n this.connected = true\n // retrieve all players once through api\n let players = await this.getData('players')\n for (let player of players) {\n Vue.set(this.players, player.player_id, player)\n }\n this._selectActivePlayer()\n this.$emit('players changed')\n },\n\n async _onWsMessage (e) {\n // Message retrieved on the websocket\n var msg = JSON.parse(e.data)\n if (msg.message === 'player changed') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n } else if (msg.message === 'player added') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'player removed') {\n Vue.delete(this.players, msg.message_details.player_id)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'music sync status') {\n this.syncStatus = msg.message_details\n } else {\n this.$emit(msg.message, msg.message_details)\n }\n },\n\n _onWsClose (e) {\n this.connected = false\n Vue.$log.error('Socket is closed. Reconnect will be attempted in 5 seconds.', e.reason)\n setTimeout(function () {\n this.connect(this._address)\n }.bind(this), 5000)\n },\n\n _onWsError () {\n this._ws.close()\n },\n\n _selectActivePlayer () {\n // auto select new active player if we have none\n if (!this.activePlayer || !this.activePlayer.enabled || this.activePlayer.group_parents.length > 0) {\n // prefer last selected player\n let lastPlayerId = localStorage.getItem('activePlayerId')\n if (lastPlayerId && this.players[lastPlayerId] && this.players[lastPlayerId].enabled) {\n this.switchPlayer(lastPlayerId)\n } else {\n // prefer the first playing player\n for (let playerId in this.players) {\n if (this.players[playerId].state === 'playing' && this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n // fallback to just the first player\n if (!this.activePlayer || !this.activePlayer.enabled) {\n for (let playerId in this.players) {\n if (this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n }\n }\n }\n }\n },\n computed: {\n activePlayer () {\n if (!this.activePlayerId) {\n return null\n } else {\n return this.players[this.activePlayerId]\n }\n }\n }\n})\n\n// install as plugin\nexport default {\n server,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$server = server\n }\n}\n","import Vue from 'vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\nimport i18n from './i18n'\nimport 'roboto-fontface/css/roboto/roboto-fontface.css'\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\nimport vuetify from './plugins/vuetify'\nimport store from './plugins/store'\nimport server from './plugins/server'\nimport '@babel/polyfill'\nimport VueLogger from 'vuejs-logger'\n\nconst isProduction = process.env.NODE_ENV === 'production'\nconst loggerOptions = {\n isEnabled: true,\n logLevel: isProduction ? 'error' : 'debug',\n stringifyArguments: false,\n showLogLevel: true,\n showMethodName: false,\n separator: '|',\n showConsoleColors: true\n}\n\nVue.config.productionTip = false\nVue.use(VueLogger, loggerOptions)\nVue.use(VueVirtualScroller)\nVue.use(store)\nVue.use(server)\n\n// eslint-disable-next-line no-extend-native\nString.prototype.formatDuration = function () {\n var secNum = parseInt(this, 10) // don't forget the second param\n var hours = Math.floor(secNum / 3600)\n var minutes = Math.floor((secNum - (hours * 3600)) / 60)\n var seconds = secNum - (hours * 3600) - (minutes * 60)\n if (hours < 10) { hours = '0' + hours }\n if (minutes < 10) { minutes = '0' + minutes }\n if (seconds < 10) { seconds = '0' + seconds }\n if (hours === '00') { return minutes + ':' + seconds } else { return hours + ':' + minutes + ':' + seconds }\n}\n\nnew Vue({\n router,\n i18n,\n vuetify,\n render: h => h(App)\n}).$mount('#app')\n","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/file.813f9dad.png\";","module.exports = __webpack_public_path__ + \"img/sonos.72e2fecb.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","var map = {\n\t\"./aac.png\": \"9a36\",\n\t\"./chromecast.png\": \"57d1\",\n\t\"./crossfade.png\": \"e7af\",\n\t\"./default_artist.png\": \"4bfb\",\n\t\"./file.png\": \"71db\",\n\t\"./flac.png\": \"fb30\",\n\t\"./hires.png\": \"f5e3\",\n\t\"./homeassistant.png\": \"3232\",\n\t\"./http_streamer.png\": \"2755\",\n\t\"./logo.png\": \"cf05\",\n\t\"./mp3.png\": \"f1d4\",\n\t\"./ogg.png\": \"9ad3\",\n\t\"./qobuz.png\": \"0863\",\n\t\"./sonos.png\": \"82f5\",\n\t\"./spotify.png\": \"0c3b\",\n\t\"./squeezebox.png\": \"bd18\",\n\t\"./tunein.png\": \"e428\",\n\t\"./vorbis.png\": \"94cc\",\n\t\"./web.png\": \"edbf\",\n\t\"./webplayer.png\": \"3d05\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"9e01\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=502704d8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=502704d8&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/squeezebox.60631223.png\";","module.exports = __webpack_public_path__ + \"img/logo.c079bd97.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-list-item',{directives:[{name:\"longpress\",rawName:\"v-longpress\",value:(_vm.menuClick),expression:\"menuClick\"}],attrs:{\"ripple\":\"\"},on:{\"click\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }_vm.onclickHandler ? _vm.onclickHandler(_vm.item) : _vm.itemClicked(_vm.item)},\"contextmenu\":[_vm.menuClick,function($event){$event.preventDefault();}]}},[(!_vm.hideavatar)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\",\"color\":\"grey\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.22)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', 80),\"lazy-src\":require('../assets/file.png')}})]):_vm._e(),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.item.name)+\" \"),(!!_vm.item.version)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.item.version)+\")\")]):_vm._e()]),(_vm.item.artists)?_c('v-list-item-subtitle',[_vm._l((_vm.item.artists),function(artist,artistindex){return _c('span',{key:artist.item_id},[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.item.artists.length)?_c('label',{key:artistindex},[_vm._v(\"/\")]):_vm._e()])}),(!!_vm.item.album && !!_vm.hidetracknum)?_c('a',{staticStyle:{\"color\":\"grey\"},on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.album)},function($event){$event.stopPropagation();}]}},[_vm._v(\" - \"+_vm._s(_vm.item.album.name))]):_vm._e(),(!_vm.hidetracknum && _vm.item.track_number)?_c('label',{staticStyle:{\"color\":\"grey\"}},[_vm._v(\"- disc \"+_vm._s(_vm.item.disc_number)+\" track \"+_vm._s(_vm.item.track_number))]):_vm._e()],2):_vm._e(),(_vm.item.artist)?_c('v-list-item-subtitle',[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(_vm.item.artist.name))])]):_vm._e(),(!!_vm.item.owner)?_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.item.owner))]):_vm._e()],1),(!_vm.hideproviders)?_c('v-list-item-action',[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.item.provider_ids,\"height\":20}})],1):_vm._e(),(_vm.isHiRes)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('img',_vm._g({attrs:{\"src\":require('../assets/hires.png'),\"height\":\"20\"}},on))]}}],null,false,2747613229)},[_c('span',[_vm._v(_vm._s(_vm.isHiRes))])])],1):_vm._e(),(!_vm.hidelibrary)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"ripple\":\"\"},on:{\"click\":[function($event){return _vm.toggleLibrary(_vm.item)},function($event){$event.preventDefault();},function($event){$event.stopPropagation();}]}},on),[(_vm.item.in_library.length > 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite\")]):_vm._e(),(_vm.item.in_library.length == 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite_border\")]):_vm._e()],1)]}}],null,false,113966118)},[(_vm.item.in_library.length > 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"remove_library\")))]):_vm._e(),(_vm.item.in_library.length == 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"add_library\")))]):_vm._e()])],1):_vm._e(),(!_vm.hideduration && !!_vm.item.duration)?_c('v-list-item-action',[_vm._v(_vm._s(_vm.item.duration.toString().formatDuration()))]):_vm._e(),(!_vm.hidemenu)?_c('v-icon',{staticStyle:{\"margin-right\":\"-10px\",\"padding-left\":\"10px\"},attrs:{\"color\":\"grey lighten-1\"},on:{\"click\":[function($event){return _vm.menuClick(_vm.item)},function($event){$event.stopPropagation();}]}},[_vm._v(\"more_vert\")]):_vm._e()],1),_c('v-divider')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <v-list-item\n ripple\n @click.left=\"onclickHandler ? onclickHandler(item) : itemClicked(item)\"\n @contextmenu=\"menuClick\"\n @contextmenu.prevent\n v-longpress=\"menuClick\"\n >\n <v-list-item-avatar tile color=\"grey\" v-if=\"!hideavatar\">\n <img\n :src=\"$server.getImageUrl(item, 'image', 80)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.22);\"\n />\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title>\n {{ item.name }}\n <span v-if=\"!!item.version\">({{ item.version }})</span>\n </v-list-item-title>\n\n <v-list-item-subtitle v-if=\"item.artists\">\n <span\n v-for=\"(artist, artistindex) in item.artists\"\n :key=\"artist.item_id\"\n >\n <a v-on:click=\"itemClicked(artist)\" @click.stop>{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < item.artists.length\"\n :key=\"artistindex\"\n >/</label\n >\n </span>\n <a\n v-if=\"!!item.album && !!hidetracknum\"\n v-on:click=\"itemClicked(item.album)\"\n @click.stop\n style=\"color:grey\"\n >\n - {{ item.album.name }}</a\n >\n <label v-if=\"!hidetracknum && item.track_number\" style=\"color:grey\"\n >- disc {{ item.disc_number }} track {{ item.track_number }}</label\n >\n </v-list-item-subtitle>\n <v-list-item-subtitle v-if=\"item.artist\">\n <a v-on:click=\"itemClicked(item.artist)\" @click.stop>{{\n item.artist.name\n }}</a>\n </v-list-item-subtitle>\n\n <v-list-item-subtitle v-if=\"!!item.owner\">{{\n item.owner\n }}</v-list-item-subtitle>\n </v-list-item-content>\n\n <v-list-item-action v-if=\"!hideproviders\">\n <ProviderIcons v-bind:providerIds=\"item.provider_ids\" :height=\"20\" />\n </v-list-item-action>\n\n <v-list-item-action v-if=\"isHiRes\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <img :src=\"require('../assets/hires.png')\" height=\"20\" v-on=\"on\" />\n </template>\n <span>{{ isHiRes }}</span>\n </v-tooltip>\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hidelibrary\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n ripple\n v-on=\"on\"\n v-on:click=\"toggleLibrary(item)\"\n @click.prevent\n @click.stop\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length > 0\"\n >favorite</v-icon\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length == 0\"\n >favorite_border</v-icon\n >\n </v-btn>\n </template>\n <span v-if=\"item.in_library.length > 0\">{{\n $t(\"remove_library\")\n }}</span>\n <span v-if=\"item.in_library.length == 0\">{{\n $t(\"add_library\")\n }}</span>\n </v-tooltip>\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hideduration && !!item.duration\">{{\n item.duration.toString().formatDuration()\n }}</v-list-item-action>\n\n <!-- menu button/icon -->\n <v-icon\n v-if=\"!hidemenu\"\n @click=\"menuClick(item)\"\n @click.stop\n color=\"grey lighten-1\"\n style=\"margin-right:-10px;padding-left:10px\"\n >more_vert</v-icon\n >\n </v-list-item>\n <v-divider></v-divider>\n </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ProviderIcons from '@/components/ProviderIcons.vue'\n\nconst PRESS_TIMEOUT = 600\n\nVue.directive('longpress', {\n bind: function (el, { value }, vNode) {\n if (typeof value !== 'function') {\n Vue.$log.warn(`Expect a function, got ${value}`)\n return\n }\n let pressTimer = null\n const start = e => {\n if (e.type === 'click' && e.button !== 0) {\n return\n }\n if (pressTimer === null) {\n pressTimer = setTimeout(() => value(e), PRESS_TIMEOUT)\n }\n }\n const cancel = () => {\n if (pressTimer !== null) {\n clearTimeout(pressTimer)\n pressTimer = null\n }\n }\n ;['mousedown', 'touchstart'].forEach(e => el.addEventListener(e, start))\n ;['click', 'mouseout', 'touchend', 'touchcancel'].forEach(e => el.addEventListener(e, cancel))\n }\n})\n\nexport default Vue.extend({\n components: {\n ProviderIcons\n },\n props: {\n item: Object,\n index: Number,\n totalitems: Number,\n hideavatar: Boolean,\n hidetracknum: Boolean,\n hideproviders: Boolean,\n hidemenu: Boolean,\n hidelibrary: Boolean,\n hideduration: Boolean,\n onclickHandler: null\n },\n data () {\n return {\n touchMoving: false,\n cancelled: false\n }\n },\n computed: {\n isHiRes () {\n for (var prov of this.item.provider_ids) {\n if (prov.quality > 6) {\n if (prov.details) {\n return prov.details\n } else if (prov.quality === 7) {\n return '44.1/48khz 24 bits'\n } else if (prov.quality === 8) {\n return '88.2/96khz 24 bits'\n } else if (prov.quality === 9) {\n return '176/192khz 24 bits'\n } else {\n return '+192kHz 24 bits'\n }\n }\n }\n return ''\n }\n },\n created () { },\n beforeDestroy () {\n this.cancelled = true\n },\n mounted () { },\n methods: {\n itemClicked (mediaItem = null) {\n // mediaItem in the list is clicked\n let url = ''\n if (mediaItem.media_type === 1) {\n url = '/artists/' + mediaItem.item_id\n } else if (mediaItem.media_type === 2) {\n url = '/albums/' + mediaItem.item_id\n } else if (mediaItem.media_type === 4) {\n url = '/playlists/' + mediaItem.item_id\n } else {\n // assume track (or radio) item\n this.$server.$emit('showPlayMenu', mediaItem)\n return\n }\n this.$router.push({ path: url, query: { provider: mediaItem.provider } })\n },\n menuClick () {\n // contextmenu button clicked\n if (this.cancelled) return\n this.$server.$emit('showContextMenu', this.item)\n },\n async toggleLibrary (mediaItem) {\n // library button clicked on item\n this.cancelled = true\n await this.$server.toggleLibrary(mediaItem)\n this.cancelled = false\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListviewItem.vue?vue&type=template&id=36620bf4&\"\nimport script from \"./ListviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VDivider,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.uniqueProviders),function(prov){return _c('img',{key:prov.provider,staticStyle:{\"margin-right\":\"6px\",\"margin-top\":\"6px\"},attrs:{\"height\":_vm.height,\"src\":require('../assets/' + prov.provider + '.png')}})}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <img\r\n v-for=\"prov of uniqueProviders\" :key=\"prov.provider\"\r\n :height=\"height\"\r\n :src=\"require('../assets/' + prov.provider + '.png')\"\r\n style=\"margin-right:6px;margin-top:6px;\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n props: {\r\n providerIds: Array,\r\n height: Number\r\n },\r\n data () {\r\n return {\r\n isHiRes: false\r\n }\r\n },\r\n computed: {\r\n uniqueProviders: function () {\r\n var output = []\r\n var keys = []\r\n if (!this.providerIds) return []\r\n this.providerIds.forEach(function (prov) {\r\n var key = prov['provider']\r\n if (keys.indexOf(key) === -1) {\r\n keys.push(key)\r\n output.push(prov)\r\n }\r\n })\r\n return output\r\n }\r\n },\r\n mounted () { },\r\n methods: {\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProviderIcons.vue?vue&type=template&id=39dc952a&\"\nimport script from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/tunein.ca1c1bb0.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/web.798ba28f.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/hires.e97b001e.png\";","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}
\ No newline at end of file
+++ /dev/null
-(function(e){function t(t){for(var a,i,o=t[0],l=t[1],c=t[2],u=0,p=[];u<o.length;u++)i=o[u],Object.prototype.hasOwnProperty.call(n,i)&&n[i]&&p.push(n[i][0]),n[i]=0;for(a in l)Object.prototype.hasOwnProperty.call(l,a)&&(e[a]=l[a]);d&&d(t);while(p.length)p.shift()();return s.push.apply(s,c||[]),r()}function r(){for(var e,t=0;t<s.length;t++){for(var r=s[t],a=!0,i=1;i<r.length;i++){var o=r[i];0!==n[o]&&(a=!1)}a&&(s.splice(t--,1),e=l(l.s=r[0]))}return e}var a={},i={app:0},n={app:0},s=[];function o(e){return l.p+"js/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"9f3e890b",config:"06165bdd","itemdetails~playerqueue~search":"1e2b2bfd",search:"6612f8cb",itemdetails:"f383b9f8",playerqueue:"231c77e4"}[e]+".js"}function l(t){if(a[t])return a[t].exports;var r=a[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[],r={"config~search":1,config:1,"itemdetails~playerqueue~search":1,itemdetails:1};i[e]?t.push(i[e]):0!==i[e]&&r[e]&&t.push(i[e]=new Promise((function(t,r){for(var a="css/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"af60f7e1",config:"18def958","itemdetails~playerqueue~search":"93e2919b",search:"31d6cfe0",itemdetails:"742ba64e",playerqueue:"31d6cfe0"}[e]+".css",n=l.p+a,s=document.getElementsByTagName("link"),o=0;o<s.length;o++){var c=s[o],u=c.getAttribute("data-href")||c.getAttribute("href");if("stylesheet"===c.rel&&(u===a||u===n))return t()}var p=document.getElementsByTagName("style");for(o=0;o<p.length;o++){c=p[o],u=c.getAttribute("data-href");if(u===a||u===n)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var a=t&&t.target&&t.target.src||n,s=new Error("Loading CSS chunk "+e+" failed.\n("+a+")");s.code="CSS_CHUNK_LOAD_FAILED",s.request=a,delete i[e],d.parentNode.removeChild(d),r(s)},d.href=n;var m=document.getElementsByTagName("head")[0];m.appendChild(d)})).then((function(){i[e]=0})));var a=n[e];if(0!==a)if(a)t.push(a[2]);else{var s=new Promise((function(t,r){a=n[e]=[t,r]}));t.push(a[2]=s);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=o(e);var p=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(d);var r=n[e];if(0!==r){if(r){var a=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;p.message="Loading chunk "+e+" failed.\n("+a+": "+i+")",p.name="ChunkLoadError",p.type=a,p.request=i,r[1](p)}n[e]=void 0}};var d=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=a,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)l.d(r,a,function(t){return e[t]}.bind(null,a));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw e};var c=window["webpackJsonp"]=window["webpackJsonp"]||[],u=c.push.bind(c);c.push=t,c=c.slice();for(var p=0;p<c.length;p++)t(c[p]);var d=u;s.push([0,"chunk-vendors"]),r()})({0:function(e,t,r){e.exports=r("56d7")},"034f":function(e,t,r){"use strict";var a=r("19b3"),i=r.n(a);i.a},"0863":function(e,t,r){e.exports=r.p+"img/qobuz.c7eb9a76.png"},"0c3b":function(e,t,r){e.exports=r.p+"img/spotify.1f3fb1af.png"},"19b3":function(e,t,r){},2755:function(e,t,r){e.exports=r.p+"img/http_streamer.4c4e4880.png"},3208:function(e,t,r){},3232:function(e,t,r){e.exports=r.p+"img/homeassistant.29fe3282.png"},"3d05":function(e,t,r){e.exports=r.p+"img/webplayer.8e1a0da9.png"},"49f8":function(e,t,r){var a={"./en.json":"edd4","./nl.json":"a625"};function i(e){var t=n(e);return r(t)}function n(e){if(!r.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}i.keys=function(){return Object.keys(a)},i.resolve=n,e.exports=i,i.id="49f8"},"4bfb":function(e,t,r){e.exports=r.p+"img/default_artist.7305b29c.png"},"56d7":function(e,t,r){"use strict";r.r(t);r("e25e"),r("e260"),r("e6cf"),r("cca6"),r("a79d");var a=r("2b0e"),i=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-app",[r("TopBar"),r("NavigationMenu"),r("v-content",[r("router-view",{key:e.$route.path,attrs:{app:""}})],1),r("PlayerOSD",{attrs:{showPlayerSelect:e.showPlayerSelect}}),r("ContextMenu"),r("PlayerSelect"),r("v-overlay",{attrs:{value:e.$store.loading}},[r("v-progress-circular",{attrs:{indeterminate:"",size:"64"}})],1)],1)},n=[],s=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-navigation-drawer",{attrs:{dark:"",app:"",clipped:"",temporary:""},model:{value:e.$store.showNavigationMenu,callback:function(t){e.$set(e.$store,"showNavigationMenu",t)},expression:"$store.showNavigationMenu"}},[r("v-list",[e._l(e.items,(function(t){return r("v-list-item",{key:t.title,on:{click:function(r){return e.$router.push(t.path)}}},[r("v-list-item-action",[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(t.title))])],1)],1)})),r("v-btn",{attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}})],2)],1)},o=[],l=a["a"].extend({props:{},data:function(){return{items:[{title:this.$t("home"),icon:"home",path:"/"},{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("radios"),icon:"radio",path:"/radios"},{title:this.$t("search"),icon:"search",path:"/search"},{title:this.$t("settings"),icon:"settings",path:"/config"}]}},mounted:function(){},methods:{}}),c=l,u=r("2877"),p=r("6544"),d=r.n(p),m=r("8336"),h=r("132d"),v=r("8860"),f=r("da13"),g=r("1800"),y=r("5d23"),b=r("f774"),A=Object(u["a"])(c,s,o,!1,null,null,null),k=A.exports;d()(A,{VBtn:m["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VNavigationDrawer:b["a"]});var w=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-app-bar",{attrs:{app:"",flat:"",dense:"",dark:"",color:e.color}},[r("v-layout",[e.$store.topBarTransparent?e._e():r("div",{staticClass:"body-1",staticStyle:{position:"fixed",width:"100%","text-align":"center","vertical-align":"center","margin-top":"11px"}},[e._v(e._s(e.$store.windowtitle))]),r("v-btn",{staticStyle:{"margin-left":"-13px"},attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}},[r("v-icon",[e._v("menu")])],1),r("v-btn",{attrs:{icon:""},on:{click:function(t){return e.$router.go(-1)}}},[r("v-icon",[e._v("arrow_back")])],1),r("v-spacer"),e.$store.topBarContextItem?r("v-btn",{staticStyle:{"margin-right":"-23px"},attrs:{icon:""},on:{click:function(t){return e.$server.$emit("showContextMenu",e.$store.topBarContextItem)}}},[r("v-icon",[e._v("more_vert")])],1):e._e()],1)],1)},_=[],I=a["a"].extend({props:{},data:function(){return{}},computed:{color:function(){return this.$store.topBarTransparent?"transparent":"black"}},mounted:function(){},methods:{}}),x=I,P=r("40dc"),S=r("a722"),C=r("2fa4"),R=Object(u["a"])(x,w,_,!1,null,null,null),O=R.exports;d()(R,{VAppBar:P["a"],VBtn:m["a"],VIcon:h["a"],VLayout:S["a"],VSpacer:C["a"]});var B=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-dialog",{attrs:{"max-width":"500px"},on:{input:function(t){return e.$emit("input",t)}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[r("v-card",[0===e.playlists.length?r("v-list",[r("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e.subheader?r("v-subheader",[e._v(e._s(e.subheader))]):e._e(),e._l(e.menuItems,(function(t){return r("div",{key:t.label},[r("v-list-item",{on:{click:function(r){return e.itemCommand(t.action)}}},[r("v-list-item-avatar",[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(e.$t(t.label)))])],1)],1),r("v-divider")],1)}))],2):e._e(),e.playlists.length>0?r("v-list",[r("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e._l(e.playlists,(function(t,a){return r("listviewItem",{key:t.item_id,attrs:{item:t,totalitems:e.playlists.length,index:a,hideavatar:!1,hidetracknum:!0,hideproviders:!1,hidelibrary:!0,hidemenu:!0,onclickHandler:e.addToPlaylist}})}))],2):e._e()],1)],1)},M=[],D=(r("a4d3"),r("e01a"),r("d28b"),r("caad"),r("b0c0"),r("d3b7"),r("2532"),r("3ca3"),r("ddb0"),r("96cf"),r("89ba")),E=r("d3cc"),L=a["a"].extend({components:{ListviewItem:E["a"]},props:{},watch:{},data:function(){return{visible:!1,menuItems:[],header:"",subheader:"",curItem:null,curPlaylist:null,playerQueueItems:[],playlists:[]}},mounted:function(){},created:function(){this.$server.$on("showContextMenu",this.showContextMenu),this.$server.$on("showPlayMenu",this.showPlayMenu)},computed:{},methods:{showContextMenu:function(e){if(this.playlists=[],e){this.curItem=e;var t=this.$store.topBarContextItem,r=[];e!==t&&r.push({label:"show_info",action:"info",icon:"info"}),0===e.in_library.length&&r.push({label:"add_library",action:"toggle_library",icon:"favorite_border"}),e.in_library.length>0&&r.push({label:"remove_library",action:"toggle_library",icon:"favorite"}),t&&4===t.media_type&&(this.curPlaylist=t,3===e.media_type&&t.is_editable&&r.push({label:"remove_playlist",action:"remove_playlist",icon:"remove_circle_outline"})),3===e.media_type&&r.push({label:"add_playlist",action:"add_playlist",icon:"add_circle_outline"}),this.menuItems=r,this.header=e.name,this.subheader="",this.visible=!0}},showPlayMenu:function(e){if(this.playlists=[],this.curItem=e,e){var t=[{label:"play_now",action:"play",icon:"play_circle_outline"},{label:"play_next",action:"next",icon:"queue_play_next"},{label:"add_queue",action:"add",icon:"playlist_add"}];this.menuItems=t,this.header=e.name,this.subheader="",this.visible=!0}},showPlaylistsMenu:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(){var t,r,a,i,n,s,o,l,c,u,p,d,m,h,v,f,g,y,b,A,k;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:for(t=[],r=!0,a=!1,i=void 0,e.prev=4,n=this.curItem.provider_ids[Symbol.iterator]();!(r=(s=n.next()).done);r=!0)o=s.value,t.push(o.provider);e.next=12;break;case 8:e.prev=8,e.t0=e["catch"](4),a=!0,i=e.t0;case 12:e.prev=12,e.prev=13,r||null==n.return||n.return();case 15:if(e.prev=15,!a){e.next=18;break}throw i;case 18:return e.finish(15);case 19:return e.finish(12);case 20:return e.next=22,this.$server.getData("library/playlists");case 22:l=e.sent,c=[],u=!0,p=!1,d=void 0,e.prev=27,m=l["items"][Symbol.iterator]();case 29:if(u=(h=m.next()).done){e.next=62;break}if(v=h.value,!v.is_editable||this.curPlaylist&&v.item_id===this.curPlaylist.item_id){e.next=59;break}f=!0,g=!1,y=void 0,e.prev=35,b=v.provider_ids[Symbol.iterator]();case 37:if(f=(A=b.next()).done){e.next=45;break}if(k=A.value,!t.includes(k.provider)){e.next=42;break}return c.push(v),e.abrupt("break",45);case 42:f=!0,e.next=37;break;case 45:e.next=51;break;case 47:e.prev=47,e.t1=e["catch"](35),g=!0,y=e.t1;case 51:e.prev=51,e.prev=52,f||null==b.return||b.return();case 54:if(e.prev=54,!g){e.next=57;break}throw y;case 57:return e.finish(54);case 58:return e.finish(51);case 59:u=!0,e.next=29;break;case 62:e.next=68;break;case 64:e.prev=64,e.t2=e["catch"](27),p=!0,d=e.t2;case 68:e.prev=68,e.prev=69,u||null==m.return||m.return();case 71:if(e.prev=71,!p){e.next=74;break}throw d;case 74:return e.finish(71);case 75:return e.finish(68);case 76:this.playlists=c;case 77:case"end":return e.stop()}}),e,this,[[4,8,12,20],[13,,15,19],[27,64,68,76],[35,47,51,59],[52,,54,58],[69,,71,75]])})));function t(){return e.apply(this,arguments)}return t}(),itemCommand:function(e){if("info"===e){var t="";1===this.curItem.media_type&&(t="artists"),2===this.curItem.media_type&&(t="albums"),3===this.curItem.media_type&&(t="tracks"),4===this.curItem.media_type&&(t="playlists"),5===this.curItem.media_type&&(t="radios"),this.$router.push({path:"/"+t+"/"+this.curItem.item_id,query:{provider:this.curItem.provider}}),this.visible=!1}else{if("playmenu"===e)return this.showPlayMenu(this.curItem);if("add_playlist"===e)return this.showPlaylistsMenu();"remove_playlist"===e?(this.removeFromPlaylist(this.curItem,this.curPlaylist.item_id,"playlist_remove"),this.visible=!1):"toggle_library"===e?(this.$server.toggleLibrary(this.curItem),this.visible=!1):(this.$server.playItem(this.curItem,e),this.visible=!1)}},addToPlaylist:function(e){var t=this,r="playlists/"+e.item_id+"/tracks";this.$server.putData(r,this.curItem).then((function(e){t.visible=!1}))},removeFromPlaylist:function(e,t){var r=this,a="playlists/"+t+"/tracks";this.$server.deleteData(a,e).then((function(e){r.$server.$emit("refresh_listing")}))}}}),V=L,N=r("b0af"),F=r("169a"),T=r("ce7e"),z=r("8270"),J=r("e0c7"),H=Object(u["a"])(V,B,M,!1,null,null,null),Q=H.exports;d()(H,{VCard:N["a"],VDialog:F["a"],VDivider:T["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:z["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VSubheader:J["a"]});var U=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-footer",{staticStyle:{"background-color":"black"},attrs:{app:"",fixed:"",padless:"",light:"",elevation:"10"}},[a("v-card",{staticStyle:{"margin-top":"1px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"#E0E0E0"}},[a("v-list-item",{attrs:{"two-line":""}},[e.curQueueItem?a("v-list-item-avatar",{attrs:{tile:""}},[a("img",{staticStyle:{border:"1px solid rgba(0,0,0,.54)"},attrs:{src:e.$server.getImageUrl(e.curQueueItem),"lazy-src":r("71db")}})]):a("v-list-item-avatar",[a("v-icon",[e._v("speaker")])],1),a("v-list-item-content",[e.curQueueItem?a("v-list-item-title",[e._v(" "+e._s(e.curQueueItem.name))]):e.$server.activePlayer?a("v-list-item-title",[e._v(" "+e._s(e.$server.activePlayer.name))]):e._e(),e.curQueueItem?a("v-list-item-subtitle",{staticStyle:{color:"primary"}},e._l(e.curQueueItem.artists,(function(t,r){return a("span",{key:r},[a("a",{on:{click:[function(r){return e.artistClick(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),r+1<e.curQueueItem.artists.length?a("label",{key:r},[e._v(" / ")]):e._e()])})),0):e._e()],1)],1),a("div",{staticClass:"body-2",staticStyle:{height:"30px",width:"100%",color:"rgba(0,0,0,.65)","margin-top":"-12px","background-color":"#E0E0E0"},attrs:{align:"center"}},[e.curQueueItem?a("div",{staticStyle:{height:"12px","margin-left":"22px","margin-right":"20px","margin-top":"2px"}},[a("span",{staticClass:"left"},[e._v(" "+e._s(e.playerCurTimeStr)+" ")]),a("span",{staticClass:"right"},[e._v(" "+e._s(e.playerTotalTimeStr)+" ")])]):e._e()]),e.curQueueItem?a("v-progress-linear",{style:"margin-top:-22px;margin-left:80px;width:"+e.progressBarWidth+"px;",attrs:{fixed:"",light:"",value:e.progress}}):e._e()],1),a("v-list-item",{staticStyle:{height:"44px","margin-bottom":"5px","margin-top":"-4px","background-color":"black"},attrs:{dark:"",dense:""}},[e.$server.activePlayer?a("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[a("v-btn",{attrs:{small:"",icon:""},on:{click:function(t){return e.playerCommand("previous")}}},[a("v-icon",[e._v("skip_previous")])],1)],1):e._e(),e.$server.activePlayer?a("v-list-item-action",{staticStyle:{"margin-left":"-32px","margin-top":"15px"}},[a("v-btn",{attrs:{icon:"","x-large":""},on:{click:function(t){return e.playerCommand("play_pause")}}},[a("v-icon",{attrs:{size:"50"}},[e._v(e._s("playing"==e.$server.activePlayer.state?"pause":"play_arrow"))])],1)],1):e._e(),e.$server.activePlayer?a("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[a("v-btn",{attrs:{icon:"",small:""},on:{click:function(t){return e.playerCommand("next")}}},[a("v-icon",[e._v("skip_next")])],1)],1):e._e(),a("v-list-item-content"),e.$server.activePlayer?a("v-list-item-action",{staticStyle:{padding:"28px"}},[a("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$router.push("/playerqueue/")}}},[a("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[a("v-icon",[e._v("queue_music")]),a("span",{staticClass:"overline"},[e._v(e._s(e.$t("queue")))])],1)],1)],1):e._e(),e.$server.activePlayer&&!e.$store.isMobile?a("v-list-item-action",{staticStyle:{padding:"20px"}},[a("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[a("v-btn",e._g({attrs:{small:"",icon:""}},r),[a("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[a("v-icon",[e._v("volume_up")]),a("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.activePlayer.volume_level)))])],1)],1)]}}],null,!1,1951340450)},[a("VolumeControl",{attrs:{players:e.$server.players,player_id:e.$server.activePlayer.player_id}})],1)],1):e._e(),a("v-list-item-action",{staticStyle:{padding:"20px","margin-right":"15px"}},[a("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$server.$emit("showPlayersMenu")}}},[a("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[a("v-icon",[e._v("speaker")]),e.$server.activePlayer?a("span",{staticClass:"overline"},[e._v(e._s(e.$server.activePlayer.name))]):a("span",{staticClass:"overline"})],1)],1)],1)],1),e.$store.isInStandaloneMode?a("v-card",{staticStyle:{height:"20px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"black"}}):e._e()],1)},j=[],Y=(r("0d03"),r("4fad"),r("25f0"),r("e587")),X=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-card",[r("v-list",[r("v-list-item",{staticStyle:{height:"50px","padding-bottom":"5"}},[r("v-list-item-avatar",{staticStyle:{"margin-left":"-10px"},attrs:{tile:""}},[r("v-icon",{attrs:{large:""}},[e._v(e._s(e.players[e.player_id].is_group?"speaker_group":"speaker"))])],1),r("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[r("v-list-item-title",[e._v(e._s(e.players[e.player_id].name))]),r("v-list-item-subtitle",[e._v(e._s(e.$t("state."+e.players[e.player_id].state)))])],1)],1),r("v-divider"),e._l(e.volumePlayerIds,(function(t){return r("div",{key:t},[r("div",{staticClass:"body-2",style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);"},[r("v-btn",{staticStyle:{"margin-left":"8px"},style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);",attrs:{icon:""},on:{click:function(r){return e.togglePlayerPower(t)}}},[r("v-icon",[e._v("power_settings_new")])],1),r("span",{staticStyle:{"margin-left":"10px"}},[e._v(e._s(e.players[t].name))]),r("div",{staticStyle:{"margin-top":"-8px","margin-left":"15px","margin-right":"15px",height:"35px"}},[e.players[t].disable_volume?e._e():r("v-slider",{attrs:{lazy:"",disabled:!e.players[t].powered,value:Math.round(e.players[t].volume_level),"prepend-icon":"volume_down","append-icon":"volume_up"},on:{end:function(r){return e.setPlayerVolume(t,r)},"click:append":function(r){return e.setPlayerVolume(t,"up")},"click:prepend":function(r){return e.setPlayerVolume(t,"down")}}})],1)],1),r("v-divider")],1)}))],2)],1)},q=[],W=r("284c"),Z=a["a"].extend({props:["value","players","player_id"],data:function(){return{}},computed:{volumePlayerIds:function(){var e=[this.player_id];return e.push.apply(e,Object(W["a"])(this.players[this.player_id].group_childs)),e}},mounted:function(){},methods:{setPlayerVolume:function(e,t){this.players[e].volume_level=t,"up"===t?this.$server.playerCommand("volume_up",null,e):"down"===t?this.$server.playerCommand("volume_down",null,e):this.$server.playerCommand("volume_set",t,e)},togglePlayerPower:function(e){this.$server.playerCommand("power_toggle",null,e)}}}),K=Z,G=r("ba0d"),$=Object(u["a"])(K,X,q,!1,null,null,null),ee=$.exports;d()($,{VBtn:m["a"],VCard:N["a"],VDivider:T["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:z["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VSlider:G["a"]});var te=a["a"].extend({components:{VolumeControl:ee},props:[],data:function(){return{playerQueueDetails:{}}},watch:{},computed:{curQueueItem:function(){return this.playerQueueDetails?this.playerQueueDetails.cur_item:null},progress:function(){if(!this.curQueueItem)return 0;var e=this.curQueueItem.duration,t=this.playerQueueDetails.cur_item_time,r=t/e*100;return r},playerCurTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.playerQueueDetails.cur_item_time;return e.toString().formatDuration()},playerTotalTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.curQueueItem.duration;return e.toString().formatDuration()},progressBarWidth:function(){return window.innerWidth-160}},created:function(){this.$server.$on("queue updated",this.queueUpdatedMsg),this.$server.$on("new player selected",this.getQueueDetails)},methods:{playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.$server.playerCommand(e,t,this.$server.activePlayerId)},artistClick:function(e){var t="/artists/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},queueUpdatedMsg:function(e){if(e.player_id===this.$server.activePlayerId)for(var t=0,r=Object.entries(e);t<r.length;t++){var i=Object(Y["a"])(r[t],2),n=i[0],s=i[1];a["a"].set(this.playerQueueDetails,n,s)}},getQueueDetails:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(!this.$server.activePlayer){e.next=5;break}return t="players/"+this.$server.activePlayerId+"/queue",e.next=4,this.$server.getData(t);case 4:this.playerQueueDetails=e.sent;case 5:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}}),re=te,ae=(r("a2052"),r("0e8f")),ie=r("553a"),ne=r("e449"),se=r("8e36"),oe=Object(u["a"])(re,U,j,!1,null,"1cdf04ce",null),le=oe.exports;d()(oe,{VBtn:m["a"],VCard:N["a"],VFlex:ae["a"],VFooter:ie["a"],VIcon:h["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:z["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:ne["a"],VProgressLinear:se["a"]});var ce=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-navigation-drawer",{attrs:{right:"",app:"",clipped:"",temporary:"",width:"300"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[r("v-card-title",{staticClass:"headline"},[r("b",[e._v(e._s(e.$t("players")))])]),r("v-list",{attrs:{dense:""}},[r("v-divider"),e._l(e.filteredPlayerIds,(function(t){return r("div",{key:t,style:e.$server.activePlayerId==t?"background-color:rgba(50, 115, 220, 0.3);":""},[r("v-list-item",{staticStyle:{"margin-left":"-5px","margin-right":"-15px"},attrs:{ripple:"",dense:""},on:{click:function(r){return e.$server.switchPlayer(e.$server.players[t].player_id)}}},[r("v-list-item-avatar",[r("v-icon",{attrs:{size:"45"}},[e._v(e._s(e.$server.players[t].is_group?"speaker_group":"speaker"))])],1),r("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[r("v-list-item-title",{staticClass:"subtitle-1"},[e._v(e._s(e.$server.players[t].name))]),r("v-list-item-subtitle",{key:e.$server.players[t].state,staticClass:"body-2",staticStyle:{"font-weight":"normal"}},[e._v(" "+e._s(e.$t("state."+e.$server.players[t].state))+" ")])],1),e.$server.activePlayerId?r("v-list-item-action",{staticStyle:{"padding-right":"10px"}},[r("v-menu",{attrs:{"close-on-content-click":!1,"close-on-click":!0,"nudge-width":250,"offset-x":"",right:""},nativeOn:{click:[function(e){e.stopPropagation()},function(e){e.stopPropagation(),e.preventDefault()}]},scopedSlots:e._u([{key:"activator",fn:function(a){var i=a.on;return[r("v-btn",e._g({staticStyle:{color:"rgba(0,0,0,.54)"},attrs:{icon:""}},i),[r("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[r("v-icon",[e._v("volume_up")]),r("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.players[t].volume_level)))])],1)],1)]}}],null,!0)},[r("VolumeControl",{attrs:{players:e.$server.players,player_id:t}})],1)],1):e._e()],1),r("v-divider")],1)}))],2)],1)},ue=[],pe=a["a"].extend({components:{VolumeControl:ee},watch:{},data:function(){return{filteredPlayerIds:[],visible:!1}},computed:{},created:function(){this.$server.$on("showPlayersMenu",this.show),this.$server.$on("players changed",this.getAvailablePlayers),this.getAvailablePlayers()},methods:{show:function(){this.visible=!0},getAvailablePlayers:function(){for(var e in this.filteredPlayerIds=[],this.$server.players)this.$server.players[e].enabled&&0===this.$server.players[e].group_parents.length&&this.filteredPlayerIds.push(e)}}}),de=pe,me=(r("a091"),r("99d9")),he=Object(u["a"])(de,ce,ue,!1,null,"502704d8",null),ve=he.exports;d()(he,{VBtn:m["a"],VCardTitle:me["c"],VDivider:T["a"],VFlex:ae["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:z["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:ne["a"],VNavigationDrawer:b["a"]});var fe=a["a"].extend({name:"App",components:{NavigationMenu:k,TopBar:O,ContextMenu:Q,PlayerOSD:le,PlayerSelect:ve},data:function(){return{showPlayerSelect:!1}},created:function(){var e="",t=window.location;e=t.origin+t.pathname,this.$server.connect(e)}}),ge=fe,ye=(r("034f"),r("7496")),be=r("a75b"),Ae=r("a797"),ke=r("490a"),we=Object(u["a"])(ge,i,n,!1,null,null,null),_e=we.exports;d()(we,{VApp:ye["a"],VContent:be["a"],VOverlay:Ae["a"],VProgressCircular:ke["a"]});var Ie=r("9483");Object(Ie["a"])("".concat("","service-worker.js"),{ready:function(){},registered:function(){},cached:function(){},updatefound:function(){},updated:function(){alert("New content is available; please refresh."),window.location.reload(!0)},offline:function(){alert("No internet connection found. App is running in offline mode.")},error:function(e){}});r("4de4"),r("4160"),r("e439"),r("dbb4"),r("b64b"),r("159b");var xe=r("2fa7"),Pe=r("8c4f"),Se=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("section",[r("v-list",{attrs:{tile:""}},e._l(e.items,(function(t){return r("v-list-item",{key:t.title,attrs:{tile:""},on:{click:function(r){return e.$router.push(t.path)}}},[r("v-list-item-icon",{staticStyle:{"margin-left":"15px"}},[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",{domProps:{textContent:e._s(t.title)}})],1)],1)})),1)],1)},Ce=[],Re={name:"home",data:function(){return{items:[{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("search"),icon:"search",path:"/search"}]}},created:function(){this.$store.windowtitle=this.$t("musicassistant")}},Oe=Re,Be=r("34c3"),Me=Object(u["a"])(Oe,Se,Ce,!1,null,null,null),De=Me.exports;d()(Me,{VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemContent:y["a"],VListItemIcon:Be["a"],VListItemTitle:y["c"]});var Ee=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("section",[r("v-list",{attrs:{"two-line":""}},[r("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var a=t.item;return[r("ListviewItem",{attrs:{item:a,hideavatar:3==a.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:a.media_type<4&&e.$store.isMobile,hidelibrary:!0,hidemenu:3==a.media_type&&e.$store.isMobile,hideduration:5==a.media_type}})]}}])})],1)],1)},Le=[],Ve={name:"browse",components:{ListviewItem:E["a"]},props:{mediatype:String,provider:String},data:function(){return{selected:[2],items:[]}},created:function(){this.$store.windowtitle=this.$t(this.mediatype),this.getItems(),this.$server.$on("refresh_listing",this.getItems)},methods:{getItems:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t="library/"+this.mediatype,e.abrupt("return",this.$server.getAllItems(t,this.items));case 2:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}},Ne=Ve,Fe=Object(u["a"])(Ne,Ee,Le,!1,null,null,null),Te=Fe.exports;function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function Je(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ze(r,!0).forEach((function(t){Object(xe["a"])(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ze(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}d()(Fe,{VList:v["a"]}),a["a"].use(Pe["a"]);var He=[{path:"/",name:"home",component:De},{path:"/config",name:"config",component:function(){return Promise.all([r.e("config~search"),r.e("config")]).then(r.bind(null,"1071"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/config/:configKey",name:"configKey",component:function(){return Promise.all([r.e("config~search"),r.e("config")]).then(r.bind(null,"1071"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/search",name:"search",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("config~search"),r.e("search")]).then(r.bind(null,"2d3b"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/:media_type/:media_id",name:"itemdetails",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("itemdetails")]).then(r.bind(null,"32a2"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/playerqueue",name:"playerqueue",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("playerqueue")]).then(r.bind(null,"b097"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/:mediatype",name:"browse",component:Te,props:function(e){return Je({},e.params,{},e.query)}}],Qe=new Pe["a"]({mode:"hash",routes:He}),Ue=Qe,je=(r("ac1f"),r("466d"),r("1276"),r("a925"));function Ye(){var e=r("49f8"),t={};return e.keys().forEach((function(r){var a=r.match(/([A-Za-z0-9-_]+)\./i);if(a&&a.length>1){var i=a[1];t[i]=e(r)}})),t}a["a"].use(je["a"]);var Xe=new je["a"]({locale:navigator.language.split("-")[0],fallbackLocale:"en",messages:Ye()}),qe=(r("d5e8"),r("d1e78"),r("e508")),We=(r("a899"),r("f309"));r("bf40");a["a"].use(We["a"]);var Ze=new We["a"]({icons:{iconfont:"md"}}),Ke=new a["a"]({data:function(){return{windowtitle:"Home",loading:!1,showNavigationMenu:!1,topBarTransparent:!1,topBarContextItem:null,isMobile:!1,isInStandaloneMode:!1}},created:function(){this.handleWindowOptions(),window.addEventListener("resize",this.handleWindowOptions)},destroyed:function(){window.removeEventListener("resize",this.handleWindowOptions)},methods:{handleWindowOptions:function(){this.isMobile=document.body.clientWidth<700,this.isInStandaloneMode=!0===window.navigator.standalone||window.matchMedia("(display-mode: standalone)").matches}}}),Ge={globalStore:Ke,install:function(e,t){e.prototype.$store=Ke}},$e=(r("99af"),r("a434"),r("8a79"),r("5319"),r("2b3d"),r("bc3a")),et=r.n($e),tt=r("3667"),rt=r.n(tt),at={timeout:6e4},it=et.a.create(at),nt=new a["a"]({_address:"",_ws:null,data:function(){return{connected:!1,players:{},activePlayerId:null,syncStatus:[]}},methods:{connect:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t){var r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t.endsWith("/")||(t+="/"),this._address=t,r=t.replace("http","ws")+"ws",this._ws=new WebSocket(r),this._ws.onopen=this._onWsConnect,this._ws.onmessage=this._onWsMessage,this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError;case 8:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),toggleLibrary:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(0!==t.in_library.length){e.next=6;break}return e.next=3,this.putData("library",t);case 3:t.in_library=[t.provider],e.next=9;break;case 6:return e.next=8,this.deleteData("library",t);case 8:t.in_library=[];case 9:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),getImageUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return e&&e.media_type?4===e.media_type&&"image"!==t?"":5===e.media_type&&"image"!==t?"":"database"===e.provider&&"image"===t?"".concat(this._address,"api/").concat(e.media_type,"/").concat(e.item_id,"/thumb?provider=").concat(e.provider,"&size=").concat(r):e.metadata&&e.metadata[t]?e.metadata[t]:e.album&&e.album.metadata&&e.album.metadata[t]?e.album.metadata[t]:e.artist&&e.artist.metadata&&e.artist.metadata[t]?e.artist.metadata[t]:e.album&&e.album.artist&&e.album.artist.metadata&&e.album.artist.metadata[t]?e.artist.metadata[t]:"":""},getData:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t){var r,i,n,s=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r=s.length>1&&void 0!==s[1]?s[1]:{},i=this._address+"api/"+t,e.next=4,it.get(i,{params:r});case 4:return n=e.sent,a["a"].$log.debug("getData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),postData:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t,r){var i,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,r=JSON.stringify(r),e.next=4,it.post(i,r);case 4:return n=e.sent,a["a"].$log.debug("postData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),putData:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t,r){var i,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,r=JSON.stringify(r),e.next=4,it.put(i,r);case 4:return n=e.sent,a["a"].$log.debug("putData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),deleteData:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t,r){var i,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,r=JSON.stringify(r),e.next=4,it.delete(i,{data:r});case 4:return n=e.sent,a["a"].$log.debug("deleteData",t,n),e.abrupt("return",n.data);case 7:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),getAllItems:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t,r){var i,n,s,o,l=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:i=l.length>2&&void 0!==l[2]?l[2]:{},n=this._address+"api/"+t,i&&(s=new URLSearchParams(i),n+="?"+s.toString()),o=0,rt()(n).node("items.*",(function(e){a["a"].set(r,o,e),o+=1})).done((function(e){r.length>e.items.length&&r.splice(e.items.length)}));case 5:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.activePlayerId,a="players/"+r+"/cmd/"+e;this.postData(a,t)},playItem:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t,r){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.$store.loading=!0,a="players/"+this.activePlayerId+"/play_media/"+r,e.next=4,this.postData(a,t);case 4:this.$store.loading=!1;case 5:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),switchPlayer:function(e){e!==this.activePlayerId&&(this.activePlayerId=e,localStorage.setItem("activePlayerId",e),this.$emit("new player selected",e))},_onWsConnect:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(){var t,r,i,n,s,o,l;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return a["a"].$log.info("Connected to server "+this._address),this.connected=!0,e.next=4,this.getData("players");case 4:for(t=e.sent,r=!0,i=!1,n=void 0,e.prev=8,s=t[Symbol.iterator]();!(r=(o=s.next()).done);r=!0)l=o.value,a["a"].set(this.players,l.player_id,l);e.next=16;break;case 12:e.prev=12,e.t0=e["catch"](8),i=!0,n=e.t0;case 16:e.prev=16,e.prev=17,r||null==s.return||s.return();case 19:if(e.prev=19,!i){e.next=22;break}throw n;case 22:return e.finish(19);case 23:return e.finish(16);case 24:this._selectActivePlayer(),this.$emit("players changed");case 26:case"end":return e.stop()}}),e,this,[[8,12,16,24],[17,,19,23]])})));function t(){return e.apply(this,arguments)}return t}(),_onWsMessage:function(){var e=Object(D["a"])(regeneratorRuntime.mark((function e(t){var r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:r=JSON.parse(t.data),"player changed"===r.message?a["a"].set(this.players,r.message_details.player_id,r.message_details):"player added"===r.message?(a["a"].set(this.players,r.message_details.player_id,r.message_details),this._selectActivePlayer(),this.$emit("players changed")):"player removed"===r.message?(a["a"].delete(this.players,r.message_details.player_id),this._selectActivePlayer(),this.$emit("players changed")):"music sync status"===r.message?this.syncStatus=r.message_details:this.$emit(r.message,r.message_details);case 2:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),_onWsClose:function(e){this.connected=!1,a["a"].$log.error("Socket is closed. Reconnect will be attempted in 5 seconds.",e.reason),setTimeout(function(){this.connect(this._address)}.bind(this),5e3)},_onWsError:function(){this._ws.close()},_selectActivePlayer:function(){if(!this.activePlayer||!this.activePlayer.enabled||this.activePlayer.group_parents.length>0){var e=localStorage.getItem("activePlayerId");if(e&&this.players[e]&&this.players[e].enabled)this.switchPlayer(e);else{for(var t in this.players)if("playing"===this.players[t].state&&this.players[t].enabled&&0===this.players[t].group_parents.length){this.switchPlayer(t);break}if(!this.activePlayer||!this.activePlayer.enabled)for(var r in this.players)if(this.players[r].enabled&&0===this.players[r].group_parents.length){this.switchPlayer(r);break}}}}},computed:{activePlayer:function(){return this.activePlayerId?this.players[this.activePlayerId]:null}}}),st={server:nt,install:function(e,t){e.prototype.$server=nt}},ot=r("85ff"),lt=r.n(ot),ct=!0,ut={isEnabled:!0,logLevel:ct?"error":"debug",stringifyArguments:!1,showLogLevel:!0,showMethodName:!1,separator:"|",showConsoleColors:!0};a["a"].config.productionTip=!1,a["a"].use(lt.a,ut),a["a"].use(qe["a"]),a["a"].use(Ge),a["a"].use(st),String.prototype.formatDuration=function(){var e=parseInt(this,10),t=Math.floor(e/3600),r=Math.floor((e-3600*t)/60),a=e-3600*t-60*r;return t<10&&(t="0"+t),r<10&&(r="0"+r),a<10&&(a="0"+a),"00"===t?r+":"+a:t+":"+r+":"+a},new a["a"]({router:Ue,i18n:Xe,vuetify:Ze,render:function(e){return e(_e)}}).$mount("#app")},"57d1":function(e,t){e.exports="data:image/png;base64,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"},"71db":function(e,t,r){e.exports=r.p+"img/file.813f9dad.png"},"82f5":function(e,t,r){e.exports=r.p+"img/sonos.72e2fecb.png"},"94cc":function(e,t){e.exports="data:image/png;base64,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"},"9a36":function(e,t){e.exports="data:image/png;base64,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"},"9e01":function(e,t,r){var a={"./aac.png":"9a36","./chromecast.png":"57d1","./default_artist.png":"4bfb","./file.png":"71db","./flac.png":"fb30","./hires.png":"f5e3","./homeassistant.png":"3232","./http_streamer.png":"2755","./logo.png":"cf05","./mp3.png":"f1d4","./qobuz.png":"0863","./sonos.png":"82f5","./spotify.png":"0c3b","./squeezebox.png":"bd18","./tunein.png":"e428","./vorbis.png":"94cc","./web.png":"edbf","./webplayer.png":"3d05"};function i(e){var t=n(e);return r(t)}function n(e){if(!r.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}i.keys=function(){return Object.keys(a)},i.resolve=n,e.exports=i,i.id="9e01"},a091:function(e,t,r){"use strict";var a=r("3208"),i=r.n(a);i.a},a2052:function(e,t,r){"use strict";var a=r("c697"),i=r.n(a);i.a},a625:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artiesten","albums":"Albums","tracks":"Nummers","playlists":"Afspeellijsten","playlist_tracks":"Nummers in afspeellijst","radios":"Radio","search":"Zoeken","settings":"Instellingen","queue":"Wachtrij","artist_toptracks":"Top nummers","artist_albums":"Albums","album_tracks":"Album liedjes","album_versions":"Versies","track_versions":"Versies","type_to_search":"Type hier om te zoeken...","add_library":"Voeg toe aan bibliotheek","remove_library":"Verwijder uit bibliotheek","add_playlist":"Aan playlist toevoegen...","remove_playlist":"Verwijder uit playlist","no_player":"Geen speler geselecteerd","reboot_required":"Je moet de server opnieuw starten om de nieuwe instellingen actief te maken!","conf":{"enabled":"Ingeschakeld","base":"Algemene instellingen","musicproviders":"Muziek providers","playerproviders":"Speler providers","player_settings":"Speler instellingen","homeassistant":"Home Assistant integratie","web":"Webserver","http_streamer":"Ingebouwde (sox gebaseerde) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Bestandssysteem","chromecast":"Chromecast","squeezebox":"Squeezebox ondersteuning","sonos":"Sonos","webplayer":"Web Player (alleen Chrome browser)","username":"Gebruikersnaam","password":"Wachtwoord","hostname":"Hostnaam (of IP)","port":"Poort","hass_url":"URL naar homeassistant (b.v. https://homeassistant:8123)","hass_token":"Token met lange levensduur","hass_publish":"Publiceer spelers naar Home Assistant","hass_player_power":"Verbind speler aan/uit met homeassistant entity","hass_player_source":"Benodigde bron op de verbonden homeassistant entity (optioneel)","hass_player_volume":"Verbind volume van speler aan een homeassistant entity","web_ssl_cert":"Pad naar ssl certificaat bestand","web_ssl_key":"Pad naar ssl certificaat key bestand","player_enabled":"Speler inschakelen","player_name":"Aangepaste naam voor deze speler","player_group_with":"Groupeer deze speler met een andere (hoofd)speler","player_mute_power":"Gebruik mute als aan/uit","player_disable_vol":"Schakel volume bediening helemaal uit","player_group_vol":"Pas groep volume toe op onderliggende spelers (alleen groep spelers)","player_group_pow":"Pas groep aan/uit toe op onderliggende spelers (alleen groep spelers)","player_power_play":"Automatisch afspelen bij inschakelen","file_prov_music_path":"Pad naar muziek bestanden","file_prov_playlists_path":"Pad naar playlist bestanden (.m3u)","web_http_port":"HTTP poort","web_https_port":"HTTPS poort","cert_fqdn_host":"Hostname (FQDN van certificaat)","enable_r128_volume_normalisation":"Schakel R128 volume normalisatie in","target_volume_lufs":"Doelvolume (R128 standaard is -23 LUFS)","fallback_gain_correct":"Fallback gain correctie indien R128 meting (nog) niet beschikbaar is","enable_audio_cache":"Sta het cachen van audio toe naar temp map","trim_silence":"Strip stilte van begin en eind van audio (in temp bestanden)","http_streamer_sox_effects":"Eigen sox effects toepassen op audio (alleen voor ingebouwde streamer). Zie http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximale sample rate welke deze speler ondersteund, hoger wordt gedownsampled.","force_http_streamer":"Forceer het gebruik van de ingebouwde streamer, ook al heeft de speler directe ondersteuning voor de muziek provider","not_grouped":"Niet gegroepeerd","conf_saved":"Configuratie is opgeslagen, herstart om actief te maken","audio_cache_folder":"Map om te gebruiken voor cache bestanden","audio_cache_max_size_gb":"Maximale grootte van de cache map in GB.","gapless_enabled":"Schakel ondersteuning voor gapless in.","crossfade_duration":"Crossfade (in seconden, 0 om uit te schakelen)."},"players":"Spelers","play":"Afspelen","play_on":"Afspelen op:","play_now":"Nu afspelen","play_next":"Speel als volgende af","add_queue":"Voeg toe aan wachtrij","queue_clear":"Wachtrij leegmaken","show_info":"Bekijk informatie","queue_next_tracks":"Aankomend","queue_previous_tracks":"Reeds afgespeeld","queue_move_up":"Verplaats omhoog","queue_move_down":"Verplaats omlaag","queue_options":"Wachtrij opties","enable_repeat":"Repeat inschakelen","disable_repeat":"Repeat uitschakelen","enable_shuffle":"Shuffle inschakelen","disable_shuffle":"Shuffle uitschakelen","read_more":"meer lezen","state":{"playing":"afspelen","stopped":"gestopt","paused":"gepauzeerd","off":"uitgeschakeld"}}')},bd18:function(e,t,r){e.exports=r.p+"img/squeezebox.60631223.png"},c697:function(e,t,r){},cf05:function(e,t,r){e.exports=r.p+"img/logo.c079bd97.png"},d3cc:function(e,t,r){"use strict";var a=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("v-list-item",{directives:[{name:"longpress",rawName:"v-longpress",value:e.menuClick,expression:"menuClick"}],attrs:{ripple:""},on:{click:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])?null:"button"in t&&0!==t.button?null:e.itemClicked(e.item)},contextmenu:[e.menuClick,function(e){e.preventDefault()}]}},[e.hideavatar?e._e():a("v-list-item-avatar",{attrs:{tile:"",color:"grey"}},[a("img",{staticStyle:{border:"1px solid rgba(0,0,0,.22)"},attrs:{src:e.$server.getImageUrl(e.item,"image",80),"lazy-src":r("71db")}})]),a("v-list-item-content",[a("v-list-item-title",[e._v(" "+e._s(e.item.name)+" "),e.item.version?a("span",[e._v("("+e._s(e.item.version)+")")]):e._e()]),e.item.artists?a("v-list-item-subtitle",[e._l(e.item.artists,(function(t,r){return a("span",{key:t.item_id},[a("a",{on:{click:[function(r){return e.itemClicked(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),r+1<e.item.artists.length?a("label",{key:r},[e._v("/")]):e._e()])})),e.item.album&&e.hidetracknum?a("a",{staticStyle:{color:"grey"},on:{click:[function(t){return e.itemClicked(e.item.album)},function(e){e.stopPropagation()}]}},[e._v(" - "+e._s(e.item.album.name))]):e._e(),!e.hidetracknum&&e.item.track_number?a("label",{staticStyle:{color:"grey"}},[e._v("- disc "+e._s(e.item.disc_number)+" track "+e._s(e.item.track_number))]):e._e()],2):e._e(),e.item.artist?a("v-list-item-subtitle",[a("a",{on:{click:[function(t){return e.itemClicked(e.item.artist)},function(e){e.stopPropagation()}]}},[e._v(e._s(e.item.artist.name))])]):e._e(),e.item.owner?a("v-list-item-subtitle",[e._v(e._s(e.item.owner))]):e._e()],1),e.hideproviders?e._e():a("v-list-item-action",[a("ProviderIcons",{attrs:{providerIds:e.item.provider_ids,height:20}})],1),e.isHiRes?a("v-list-item-action",[a("img",{attrs:{src:r("f5e3"),height:"20"}})]):e._e(),e.hidelibrary?e._e():a("v-list-item-action",[a("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[a("v-btn",e._g({attrs:{icon:"",ripple:""},on:{click:[function(t){return e.toggleLibrary(e.item)},function(e){e.preventDefault()},function(e){e.stopPropagation()}]}},r),[e.item.in_library.length>0?a("v-icon",{attrs:{height:"20"}},[e._v("favorite")]):e._e(),0==e.item.in_library.length?a("v-icon",{attrs:{height:"20"}},[e._v("favorite_border")]):e._e()],1)]}}],null,!1,113966118)},[e.item.in_library.length>0?a("span",[e._v(e._s(e.$t("remove_library")))]):e._e(),0==e.item.in_library.length?a("span",[e._v(e._s(e.$t("add_library")))]):e._e()])],1),!e.hideduration&&e.item.duration?a("v-list-item-action",[e._v(e._s(e.item.duration.toString().formatDuration()))]):e._e(),e.hidemenu?e._e():a("v-icon",{staticStyle:{"margin-right":"-10px","padding-left":"10px"},attrs:{color:"grey lighten-1"},on:{click:[function(t){return e.menuClick(e.item)},function(e){e.stopPropagation()}]}},[e._v("more_vert")])],1),a("v-divider")],1)},i=[],n=(r("a4d3"),r("e01a"),r("d28b"),r("4160"),r("a9e3"),r("d3b7"),r("3ca3"),r("ddb0"),r("96cf"),r("89ba")),s=r("2b0e"),o=r("e00a"),l=600;s["a"].directive("longpress",{bind:function(e,t,r){var a=t.value;if("function"===typeof a){var i=null,n=function(e){"click"===e.type&&0!==e.button||null===i&&(i=setTimeout((function(){return a(e)}),l))},o=function(){null!==i&&(clearTimeout(i),i=null)};["mousedown","touchstart"].forEach((function(t){return e.addEventListener(t,n)})),["click","mouseout","touchend","touchcancel"].forEach((function(t){return e.addEventListener(t,o)}))}else s["a"].$log.warn("Expect a function, got ".concat(a))}});var c=s["a"].extend({components:{ProviderIcons:o["a"]},props:{item:Object,index:Number,totalitems:Number,hideavatar:Boolean,hidetracknum:Boolean,hideproviders:Boolean,hidemenu:Boolean,hidelibrary:Boolean,hideduration:Boolean,onclickHandler:null},data:function(){return{touchMoving:!1,cancelled:!1}},computed:{isHiRes:function(){var e=!0,t=!1,r=void 0;try{for(var a,i=this.item.provider_ids[Symbol.iterator]();!(e=(a=i.next()).done);e=!0){var n=a.value;if(n.quality>6)return!0}}catch(s){t=!0,r=s}finally{try{e||null==i.return||i.return()}finally{if(t)throw r}}return!1}},created:function(){},beforeDestroy:function(){this.cancelled=!0},mounted:function(){},methods:{itemClicked:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(this.onclickHandler)return this.onclickHandler(e);var t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showPlayMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(){this.cancelled||this.$server.$emit("showContextMenu",this.item)},toggleLibrary:function(){var e=Object(n["a"])(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.cancelled=!0,e.next=3,this.$server.toggleLibrary(t);case 3:this.cancelled=!1;case 4:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()}}),u=c,p=r("2877"),d=r("6544"),m=r.n(d),h=r("8336"),v=r("ce7e"),f=r("132d"),g=r("da13"),y=r("1800"),b=r("8270"),A=r("5d23"),k=r("3a2f"),w=Object(p["a"])(u,a,i,!1,null,null,null);t["a"]=w.exports;m()(w,{VBtn:h["a"],VDivider:v["a"],VIcon:f["a"],VListItem:g["a"],VListItemAction:y["a"],VListItemAvatar:b["a"],VListItemContent:A["a"],VListItemSubtitle:A["b"],VListItemTitle:A["c"],VTooltip:k["a"]})},e00a:function(e,t,r){"use strict";var a=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",e._l(e.uniqueProviders,(function(t){return a("img",{key:t.provider,staticStyle:{"margin-right":"6px","margin-top":"6px"},attrs:{height:e.height,src:r("9e01")("./"+t.provider+".png")}})})),0)},i=[],n=(r("4160"),r("c975"),r("a9e3"),r("159b"),r("2b0e")),s=n["a"].extend({props:{providerIds:Array,height:Number},data:function(){return{isHiRes:!1}},computed:{uniqueProviders:function(){var e=[],t=[];return this.providerIds?(this.providerIds.forEach((function(r){var a=r["provider"];-1===t.indexOf(a)&&(t.push(a),e.push(r))})),e):[]}},mounted:function(){},methods:{}}),o=s,l=r("2877"),c=Object(l["a"])(o,a,i,!1,null,null,null);t["a"]=c.exports},e428:function(e,t,r){e.exports=r.p+"img/tunein.ca1c1bb0.png"},edbf:function(e,t,r){e.exports=r.p+"img/web.798ba28f.png"},edd4:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artists","albums":"Albums","tracks":"Tracks","playlists":"Playlists","playlist_tracks":"Playlist tracks","radios":"Radio","search":"Search","settings":"Settings","queue":"Queue","artist_toptracks":"Top tracks","artist_albums":"Albums","album_tracks":"Album tracks","album_versions":"Versions","track_versions":"Versions","type_to_search":"Type here to search...","add_library":"Add to library","remove_library":"Remove from library","add_playlist":"Add to playlist...","remove_playlist":"Remove from playlist","no_player":"No player selected","reboot_required":"A reboot is required to activate the new settings!","conf":{"enabled":"Enabled","base":"Generic settings","musicproviders":"Music providers","playerproviders":"Player providers","player_settings":"Player settings","homeassistant":"Home Assistant integration","web":"Webserver","http_streamer":"Built-in (sox based) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Filesystem","chromecast":"Chromecast","squeezebox":"Squeezebox support","sonos":"Sonos","webplayer":"Web Player (Chrome browser only)","username":"Username","password":"Password","hostname":"Hostname (or IP)","port":"Port","hass_url":"URL to homeassistant (e.g. https://homeassistant:8123)","hass_token":"Long Lived Access Token","hass_publish":"Publish players to Home Assistant","hass_player_power":"Attach player power to homeassistant entity","hass_player_source":"Source on the homeassistant entity (optional)","hass_player_volume":"Attach player volume to homeassistant entity","web_ssl_cert":"Path to ssl certificate file","web_ssl_key":"Path to ssl keyfile","player_enabled":"Enable player","player_name":"Custom name for this player","player_group_with":"Group this player to another (parent)player","player_mute_power":"Use muting as power control","player_disable_vol":"Disable volume controls","player_group_vol":"Apply group volume to childs (for group players only)","player_group_pow":"Apply group power based on childs (for group players only)","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)","web_http_port":"HTTP port","web_https_port":"HTTPS port","cert_fqdn_host":"FQDN of hostname in certificate","enable_r128_volume_normalisation":"Enable R128 volume normalization","target_volume_lufs":"Target volume (R128 default is -23 LUFS)","fallback_gain_correct":"Fallback gain correction if R128 readings not (yet) available","enable_audio_cache":"Allow caching of audio to temp files","trim_silence":"Strip silence from beginning and end of audio (temp files only!)","http_streamer_sox_effects":"Custom sox effects to apply to audio (built-in streamer only!) See http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximum sample rate this player supports, higher will be downsampled","force_http_streamer":"Force use of built-in streamer, even if the player can handle the music provider directly","not_grouped":"Not grouped","conf_saved":"Configuration saved, restart app to make effective","audio_cache_folder":"Directory to use for cache files","audio_cache_max_size_gb":"Maximum size of the cache folder (GB)","gapless_enabled":"Enable gapless support","crossfade_duration":"Crossfade duration (in seconds, 0 to disable)"},"players":"Players","play":"Play","play_on":"Play on:","play_now":"Play Now","play_next":"Play Next","add_queue":"Add to Queue","queue_clear":"Clear queue","show_info":"Show info","queue_next_tracks":"Next tracks","queue_previous_tracks":"Played tracks","queue_move_up":"Move up","queue_move_down":"Move down","queue_options":"Queue options","enable_repeat":"Enable repeat","disable_repeat":"Disable repeat","enable_shuffle":"Enable shuffle","disable_shuffle":"Disable shuffle","read_more":"read more","state":{"playing":"playing","stopped":"stopped","paused":"paused","off":"off"}}')},f1d4:function(e,t){e.exports="data:image/png;base64,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"},f5e3:function(e,t,r){e.exports=r.p+"img/hires.e97b001e.png"},fb30:function(e,t){e.exports="data:image/png;base64,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"}});
-//# sourceMappingURL=app.ddc40933.js.map
\ No newline at end of file
+++ /dev/null
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?a9d7","webpack:///./src/assets/qobuz.png","webpack:///./src/assets/spotify.png","webpack:///./src/assets/http_streamer.png","webpack:///./src/assets/homeassistant.png","webpack:///./src/assets/webplayer.png","webpack:///./src/locales sync [A-Za-z0-9-_,\\s]+\\.json$/","webpack:///./src/assets/default_artist.png","webpack:///./src/App.vue?fd4a","webpack:///./src/components/NavigationMenu.vue?5294","webpack:///src/components/NavigationMenu.vue","webpack:///./src/components/NavigationMenu.vue?f679","webpack:///./src/components/NavigationMenu.vue","webpack:///./src/components/TopBar.vue?50c5","webpack:///src/components/TopBar.vue","webpack:///./src/components/TopBar.vue?8cdd","webpack:///./src/components/TopBar.vue","webpack:///./src/components/ContextMenu.vue?6654","webpack:///src/components/ContextMenu.vue","webpack:///./src/components/ContextMenu.vue?03fa","webpack:///./src/components/ContextMenu.vue","webpack:///./src/components/PlayerOSD.vue?e069","webpack:///./src/components/VolumeControl.vue?d50f","webpack:///src/components/VolumeControl.vue","webpack:///./src/components/VolumeControl.vue?0e80","webpack:///./src/components/VolumeControl.vue","webpack:///src/components/PlayerOSD.vue","webpack:///./src/components/PlayerOSD.vue?1917","webpack:///./src/components/PlayerOSD.vue?3e15","webpack:///./src/components/PlayerSelect.vue?8641","webpack:///src/components/PlayerSelect.vue","webpack:///./src/components/PlayerSelect.vue?ed4c","webpack:///./src/components/PlayerSelect.vue?2bb5","webpack:///src/App.vue","webpack:///./src/App.vue?0bd2","webpack:///./src/App.vue?4f7e","webpack:///./src/registerServiceWorker.js","webpack:///./src/views/Home.vue?7d43","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?f351","webpack:///./src/views/Home.vue","webpack:///./src/views/Browse.vue?c8c8","webpack:///src/views/Browse.vue","webpack:///./src/views/Browse.vue?0b2d","webpack:///./src/views/Browse.vue","webpack:///./src/router/index.js","webpack:///./src/i18n.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/plugins/store.js","webpack:///./src/plugins/server.js","webpack:///./src/main.js","webpack:///./src/assets/chromecast.png","webpack:///./src/assets/file.png","webpack:///./src/assets/sonos.png","webpack:///./src/assets/vorbis.png","webpack:///./src/assets/aac.png","webpack:///./src/assets sync ^\\.\\/.*\\.png$","webpack:///./src/components/PlayerSelect.vue?121a","webpack:///./src/components/PlayerOSD.vue?85d3","webpack:///./src/assets/squeezebox.png","webpack:///./src/assets/logo.png","webpack:///./src/components/ListviewItem.vue?7121","webpack:///src/components/ListviewItem.vue","webpack:///./src/components/ListviewItem.vue?6ea0","webpack:///./src/components/ListviewItem.vue","webpack:///./src/components/ProviderIcons.vue?233a","webpack:///src/components/ProviderIcons.vue","webpack:///./src/components/ProviderIcons.vue?97c3","webpack:///./src/components/ProviderIcons.vue","webpack:///./src/assets/tunein.png","webpack:///./src/assets/web.png","webpack:///./src/assets/mp3.png","webpack:///./src/assets/hires.png","webpack:///./src/assets/flac.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","keys","_vm","this","_h","$createElement","_c","_self","$route","path","attrs","showPlayerSelect","$store","loading","staticRenderFns","model","callback","$$v","$set","expression","_l","item","title","on","$event","$router","_v","_s","icon","showNavigationMenu","props","items","mounted","methods","component","VBtn","VIcon","VList","VListItem","VListItemAction","VListItemContent","VListItemTitle","VNavigationDrawer","color","topBarTransparent","_e","staticClass","staticStyle","windowtitle","go","$server","$emit","topBarContextItem","computed","VAppBar","VLayout","VSpacer","visible","playlists","header","subheader","label","itemCommand","action","$t","index","item_id","addToPlaylist","components","ListviewItem","watch","menuItems","curItem","curPlaylist","playerQueueItems","created","$on","showContextMenu","showPlayMenu","mediaItem","curBrowseContext","in_library","media_type","is_editable","cmd","endpoint","query","showPlaylistsMenu","removeFromPlaylist","toggleLibrary","playItem","putData","deleteData","track","VCard","VDialog","VDivider","VListItemAvatar","VSubheader","getImageUrl","curQueueItem","activePlayer","artist","artistindex","artistClick","stopPropagation","artists","playerCurTimeStr","playerTotalTimeStr","style","progressBarWidth","progress","playerCommand","state","isMobile","nativeOn","preventDefault","scopedSlots","_u","fn","ref","_g","Math","round","volume_level","players","player_id","is_group","child_id","powered","togglePlayerPower","disable_volume","setPlayerVolume","volumePlayerIds","allIds","playerId","newVolume","VListItemSubtitle","VSlider","VolumeControl","playerQueueDetails","cur_item","totalSecs","duration","curSecs","cur_item_time","curPercent","toString","formatDuration","innerWidth","queueUpdatedMsg","getQueueDetails","cmd_opt","activePlayerId","url","VFlex","VFooter","VMenu","VProgressLinear","switchPlayer","filteredPlayerIds","show","getAvailablePlayers","enabled","group_parents","VCardTitle","NavigationMenu","TopBar","ContextMenu","PlayerOSD","PlayerSelect","serverAddress","loc","origin","pathname","connect","VApp","VContent","VOverlay","VProgressCircular","register","process","ready","registered","cached","updatefound","updated","alert","location","reload","offline","domProps","VListItemIcon","mediatype","String","provider","selected","getItems","Vue","use","VueRouter","routes","Home","route","params","Browse","router","loadLocaleMessages","locales","require","messages","forEach","matched","match","locale","VueI18n","navigator","language","split","fallbackLocale","Vuetify","icons","iconfont","globalStore","isInStandaloneMode","handleWindowOptions","addEventListener","destroyed","removeEventListener","body","clientWidth","standalone","matchMedia","matches","install","options","axiosConfig","_axios","axios","server","_address","_ws","connected","syncStatus","endsWith","wsAddress","replace","WebSocket","onopen","_onWsConnect","onmessage","_onWsMessage","onclose","_onWsClose","_onWsError","imageType","size","metadata","album","getData","$log","debug","postData","JSON","stringify","post","put","dataObj","delete","getAllItems","list","urlParams","URLSearchParams","oboe","node","set","done","fullList","queueOpt","newPlayerId","localStorage","setItem","info","player","_selectActivePlayer","msg","parse","message_details","reason","close","lastPlayerId","getItem","isProduction","loggerOptions","isEnabled","logLevel","stringifyArguments","showLogLevel","showMethodName","separator","showConsoleColors","config","productionTip","VueLogger","VueVirtualScroller","store","secNum","parseInt","hours","floor","minutes","seconds","i18n","vuetify","render","h","App","$mount","directives","rawName","indexOf","_k","keyCode","button","itemClicked","menuClick","hideavatar","version","hidetracknum","track_number","disc_number","owner","hideproviders","provider_ids","hidelibrary","hideduration","hidemenu","pressTimer","ProviderIcons","Number","totalitems","Boolean","onclickHandler","touchMoving","cancelled","isHiRes","beforeDestroy","VTooltip","prov","height","providerIds","Array","uniqueProviders","output"],"mappings":"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","file":"js/app.ddc40933.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"9f3e890b\",\"config\":\"06165bdd\",\"itemdetails~playerqueue~search\":\"1e2b2bfd\",\"search\":\"6612f8cb\",\"itemdetails\":\"f383b9f8\",\"playerqueue\":\"231c77e4\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"config~search\":1,\"config\":1,\"itemdetails~playerqueue~search\":1,\"itemdetails\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"af60f7e1\",\"config\":\"18def958\",\"itemdetails~playerqueue~search\":\"93e2919b\",\"search\":\"31d6cfe0\",\"itemdetails\":\"742ba64e\",\"playerqueue\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","module.exports = __webpack_public_path__ + \"img/qobuz.c7eb9a76.png\";","module.exports = __webpack_public_path__ + \"img/spotify.1f3fb1af.png\";","module.exports = __webpack_public_path__ + \"img/http_streamer.4c4e4880.png\";","module.exports = __webpack_public_path__ + \"img/homeassistant.29fe3282.png\";","module.exports = __webpack_public_path__ + \"img/webplayer.8e1a0da9.png\";","var map = {\n\t\"./en.json\": \"edd4\",\n\t\"./nl.json\": \"a625\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"49f8\";","module.exports = __webpack_public_path__ + \"img/default_artist.7305b29c.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('TopBar'),_c('NavigationMenu'),_c('v-content',[_c('router-view',{key:_vm.$route.path,attrs:{\"app\":\"\"}})],1),_c('PlayerOSD',{attrs:{\"showPlayerSelect\":_vm.showPlayerSelect}}),_c('ContextMenu'),_c('PlayerSelect'),_c('v-overlay',{attrs:{\"value\":_vm.$store.loading}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"size\":\"64\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"dark\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\"},model:{value:(_vm.$store.showNavigationMenu),callback:function ($$v) {_vm.$set(_vm.$store, \"showNavigationMenu\", $$v)},expression:\"$store.showNavigationMenu\"}},[_c('v-list',[_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-navigation-drawer dark app clipped temporary v-model=\"$store.showNavigationMenu\">\n <v-list>\n <v-list-item v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-action>\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-action>\n <v-list-item-content>\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" />\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: {},\n data () {\n return {\n items: [\n { title: this.$t('home'), icon: 'home', path: '/' },\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('radios'), icon: 'radio', path: '/radios' },\n { title: this.$t('search'), icon: 'search', path: '/search' },\n { title: this.$t('settings'), icon: 'settings', path: '/config' }\n ]\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationMenu.vue?vue&type=template&id=5fe9f182&\"\nimport script from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app-bar',{attrs:{\"app\":\"\",\"flat\":\"\",\"dense\":\"\",\"dark\":\"\",\"color\":_vm.color}},[_c('v-layout',[(!_vm.$store.topBarTransparent)?_c('div',{staticClass:\"body-1\",staticStyle:{\"position\":\"fixed\",\"width\":\"100%\",\"text-align\":\"center\",\"vertical-align\":\"center\",\"margin-top\":\"11px\"}},[_vm._v(_vm._s(_vm.$store.windowtitle))]):_vm._e(),_c('v-btn',{staticStyle:{\"margin-left\":\"-13px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}},[_c('v-icon',[_vm._v(\"menu\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}},[_c('v-icon',[_vm._v(\"arrow_back\")])],1),_c('v-spacer'),(_vm.$store.topBarContextItem)?_c('v-btn',{staticStyle:{\"margin-right\":\"-23px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showContextMenu', _vm.$store.topBarContextItem)}}},[_c('v-icon',[_vm._v(\"more_vert\")])],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-app-bar app flat dense dark :color=\"color\">\n <v-layout>\n <div class=\"body-1\" v-if=\"!$store.topBarTransparent\" style=\"position:fixed;width:100%;text-align:center;vertical-align:center;margin-top:11px;\">{{ $store.windowtitle }}</div>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" style=\"margin-left:-13px\">\n <v-icon>menu</v-icon>\n </v-btn>\n <v-btn @click=\"$router.go(-1)\" icon>\n <v-icon>arrow_back</v-icon>\n </v-btn>\n <v-spacer></v-spacer>\n <v-btn v-if=\"$store.topBarContextItem\" icon @click=\"$server.$emit('showContextMenu', $store.topBarContextItem)\" style=\"margin-right:-23px\">\n <v-icon>more_vert</v-icon>\n </v-btn>\n </v-layout>\n </v-app-bar>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: { },\n data () {\n return {\n }\n },\n computed: {\n color () {\n if (this.$store.topBarTransparent) {\n return 'transparent'\n } else return 'black'\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=0b1c8523&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VAppBar,VBtn,VIcon,VLayout,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"max-width\":\"500px\"},on:{\"input\":function($event){return _vm.$emit('input', $event)}},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card',[(_vm.playlists.length === 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),(_vm.subheader)?_c('v-subheader',[_vm._v(_vm._s(_vm.subheader))]):_vm._e(),_vm._l((_vm.menuItems),function(item){return _c('div',{key:item.label},[_c('v-list-item',{on:{\"click\":function($event){return _vm.itemCommand(item.action)}}},[_c('v-list-item-avatar',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(item.label)))])],1)],1),_c('v-divider')],1)})],2):_vm._e(),(_vm.playlists.length > 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.item_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hideavatar\":false,\"hidetracknum\":true,\"hideproviders\":false,\"hidelibrary\":true,\"hidemenu\":true,\"onclickHandler\":_vm.addToPlaylist}})})],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-dialog v-model=\"visible\" @input=\"$emit('input', $event)\" max-width=\"500px\">\r\n <v-card>\r\n <!-- normal contextmenu items -->\r\n <v-list v-if=\"playlists.length === 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <v-subheader v-if=\"subheader\">{{ subheader }}</v-subheader>\r\n <div v-for=\"item of menuItems\" :key=\"item.label\">\r\n <v-list-item @click=\"itemCommand(item.action)\">\r\n <v-list-item-avatar>\r\n <v-icon>{{ item.icon }}</v-icon>\r\n </v-list-item-avatar>\r\n <v-list-item-content>\r\n <v-list-item-title>{{ $t(item.label) }}</v-list-item-title>\r\n </v-list-item-content>\r\n </v-list-item>\r\n <v-divider></v-divider>\r\n </div>\r\n </v-list>\r\n <!-- playlists selection -->\r\n <v-list v-if=\"playlists.length > 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <listviewItem\r\n v-for=\"(item, index) in playlists\"\r\n :key=\"item.item_id\"\r\n v-bind:item=\"item\"\r\n v-bind:totalitems=\"playlists.length\"\r\n v-bind:index=\"index\"\r\n :hideavatar=\"false\"\r\n :hidetracknum=\"true\"\r\n :hideproviders=\"false\"\r\n :hidelibrary=\"true\"\r\n :hidemenu=\"true\"\r\n :onclickHandler=\"addToPlaylist\"\r\n ></listviewItem>\r\n </v-list>\r\n </v-card>\r\n </v-dialog>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ListviewItem from '@/components/ListviewItem.vue'\r\n\r\nexport default Vue.extend({\r\n components:\r\n {\r\n ListviewItem\r\n },\r\n props:\r\n {},\r\n watch:\r\n {},\r\n data () {\r\n return {\r\n visible: false,\r\n menuItems: [],\r\n header: '',\r\n subheader: '',\r\n curItem: null,\r\n curPlaylist: null,\r\n playerQueueItems: [],\r\n playlists: []\r\n }\r\n },\r\n mounted () { },\r\n created () {\r\n this.$server.$on('showContextMenu', this.showContextMenu)\r\n this.$server.$on('showPlayMenu', this.showPlayMenu)\r\n },\r\n computed: {\r\n },\r\n methods: {\r\n showContextMenu (mediaItem) {\r\n // show contextmenu items for the given mediaItem\r\n this.playlists = []\r\n if (!mediaItem) return\r\n this.curItem = mediaItem\r\n let curBrowseContext = this.$store.topBarContextItem\r\n let menuItems = []\r\n // show info\r\n if (mediaItem !== curBrowseContext) {\r\n menuItems.push({\r\n label: 'show_info',\r\n action: 'info',\r\n icon: 'info'\r\n })\r\n }\r\n // add to library\r\n if (mediaItem.in_library.length === 0) {\r\n menuItems.push({\r\n label: 'add_library',\r\n action: 'toggle_library',\r\n icon: 'favorite_border'\r\n })\r\n }\r\n // remove from library\r\n if (mediaItem.in_library.length > 0) {\r\n menuItems.push({\r\n label: 'remove_library',\r\n action: 'toggle_library',\r\n icon: 'favorite'\r\n })\r\n }\r\n // remove from playlist (playlist tracks only)\r\n if (curBrowseContext && curBrowseContext.media_type === 4) {\r\n this.curPlaylist = curBrowseContext\r\n if (mediaItem.media_type === 3 && curBrowseContext.is_editable) {\r\n menuItems.push({\r\n label: 'remove_playlist',\r\n action: 'remove_playlist',\r\n icon: 'remove_circle_outline'\r\n })\r\n }\r\n }\r\n // add to playlist action (tracks only)\r\n if (mediaItem.media_type === 3) {\r\n menuItems.push({\r\n label: 'add_playlist',\r\n action: 'add_playlist',\r\n icon: 'add_circle_outline'\r\n })\r\n }\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n showPlayMenu (mediaItem) {\r\n // show playmenu items for the given mediaItem\r\n this.playlists = []\r\n this.curItem = mediaItem\r\n if (!mediaItem) return\r\n let menuItems = [\r\n {\r\n label: 'play_now',\r\n action: 'play',\r\n icon: 'play_circle_outline'\r\n },\r\n {\r\n label: 'play_next',\r\n action: 'next',\r\n icon: 'queue_play_next'\r\n },\r\n {\r\n label: 'add_queue',\r\n action: 'add',\r\n icon: 'playlist_add'\r\n }\r\n ]\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n async showPlaylistsMenu () {\r\n // get all editable playlists\r\n let trackProviders = []\r\n for (let item of this.curItem.provider_ids) {\r\n trackProviders.push(item.provider)\r\n }\r\n let playlists = await this.$server.getData('library/playlists')\r\n let items = []\r\n for (var playlist of playlists['items']) {\r\n if (\r\n playlist.is_editable &&\r\n (!this.curPlaylist || playlist.item_id !== this.curPlaylist.item_id)\r\n ) {\r\n for (let item of playlist.provider_ids) {\r\n if (trackProviders.includes(item.provider)) {\r\n items.push(playlist)\r\n break\r\n }\r\n }\r\n }\r\n }\r\n this.playlists = items\r\n },\r\n itemCommand (cmd) {\r\n if (cmd === 'info') {\r\n // show media info\r\n let endpoint = ''\r\n if (this.curItem.media_type === 1) endpoint = 'artists'\r\n if (this.curItem.media_type === 2) endpoint = 'albums'\r\n if (this.curItem.media_type === 3) endpoint = 'tracks'\r\n if (this.curItem.media_type === 4) endpoint = 'playlists'\r\n if (this.curItem.media_type === 5) endpoint = 'radios'\r\n this.$router.push({\r\n path: '/' + endpoint + '/' + this.curItem.item_id,\r\n query: { provider: this.curItem.provider }\r\n })\r\n this.visible = false\r\n } else if (cmd === 'playmenu') {\r\n // show play menu\r\n return this.showPlayMenu(this.curItem)\r\n } else if (cmd === 'add_playlist') {\r\n // add to playlist\r\n return this.showPlaylistsMenu()\r\n } else if (cmd === 'remove_playlist') {\r\n // remove track from playlist\r\n this.removeFromPlaylist(\r\n this.curItem,\r\n this.curPlaylist.item_id,\r\n 'playlist_remove'\r\n )\r\n this.visible = false\r\n } else if (cmd === 'toggle_library') {\r\n // add/remove to/from library\r\n this.$server.toggleLibrary(this.curItem)\r\n this.visible = false\r\n } else {\r\n // assume play command\r\n this.$server.playItem(this.curItem, cmd)\r\n this.visible = false\r\n }\r\n },\r\n addToPlaylist (playlistObj) {\r\n /// add track to playlist\r\n let endpoint = 'playlists/' + playlistObj.item_id + '/tracks'\r\n this.$server.putData(endpoint, this.curItem)\r\n .then(result => {\r\n this.visible = false\r\n })\r\n },\r\n removeFromPlaylist (track, playlistId) {\r\n /// remove track from playlist\r\n let endpoint = 'playlists/' + playlistId + '/tracks'\r\n this.$server.deleteData(endpoint, track)\r\n .then(result => {\r\n // reload listing\r\n this.$server.$emit('refresh_listing')\r\n })\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextMenu.vue?vue&type=template&id=54776170&\"\nimport script from \"./ContextMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VCard,VDialog,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-footer',{staticStyle:{\"background-color\":\"black\"},attrs:{\"app\":\"\",\"fixed\":\"\",\"padless\":\"\",\"light\":\"\",\"elevation\":\"10\"}},[_c('v-card',{staticStyle:{\"margin-top\":\"1px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"#E0E0E0\"}},[_c('v-list-item',{attrs:{\"two-line\":\"\"}},[(_vm.curQueueItem)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.54)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.curQueueItem),\"lazy-src\":require('../assets/file.png')}})]):_c('v-list-item-avatar',[_c('v-icon',[_vm._v(\"speaker\")])],1),_c('v-list-item-content',[(_vm.curQueueItem)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.curQueueItem.name))]):(_vm.$server.activePlayer)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$server.activePlayer.name))]):_vm._e(),(_vm.curQueueItem)?_c('v-list-item-subtitle',{staticStyle:{\"color\":\"primary\"}},_vm._l((_vm.curQueueItem.artists),function(artist,artistindex){return _c('span',{key:artistindex},[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.curQueueItem.artists.length)?_c('label',{key:artistindex},[_vm._v(\" / \")]):_vm._e()])}),0):_vm._e()],1)],1),_c('div',{staticClass:\"body-2\",staticStyle:{\"height\":\"30px\",\"width\":\"100%\",\"color\":\"rgba(0,0,0,.65)\",\"margin-top\":\"-12px\",\"background-color\":\"#E0E0E0\"},attrs:{\"align\":\"center\"}},[(_vm.curQueueItem)?_c('div',{staticStyle:{\"height\":\"12px\",\"margin-left\":\"22px\",\"margin-right\":\"20px\",\"margin-top\":\"2px\"}},[_c('span',{staticClass:\"left\"},[_vm._v(\" \"+_vm._s(_vm.playerCurTimeStr)+\" \")]),_c('span',{staticClass:\"right\"},[_vm._v(\" \"+_vm._s(_vm.playerTotalTimeStr)+\" \")])]):_vm._e()]),(_vm.curQueueItem)?_c('v-progress-linear',{style:('margin-top:-22px;margin-left:80px;width:' + _vm.progressBarWidth + 'px;'),attrs:{\"fixed\":\"\",\"light\":\"\",\"value\":_vm.progress}}):_vm._e()],1),_c('v-list-item',{staticStyle:{\"height\":\"44px\",\"margin-bottom\":\"5px\",\"margin-top\":\"-4px\",\"background-color\":\"black\"},attrs:{\"dark\":\"\",\"dense\":\"\"}},[(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('previous')}}},[_c('v-icon',[_vm._v(\"skip_previous\")])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-left\":\"-32px\",\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"x-large\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('play_pause')}}},[_c('v-icon',{attrs:{\"size\":\"50\"}},[_vm._v(_vm._s(_vm.$server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"))])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('next')}}},[_c('v-icon',[_vm._v(\"skip_next\")])],1)],1):_vm._e(),_c('v-list-item-content'),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"padding\":\"28px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/playerqueue/')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"queue_music\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$t(\"queue\")))])],1)],1)],1):_vm._e(),(_vm.$server.activePlayer && !_vm.$store.isMobile)?_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.activePlayer.volume_level)))])],1)],1)]}}],null,false,1951340450)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":_vm.$server.activePlayer.player_id}})],1)],1):_vm._e(),_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\",\"margin-right\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayersMenu')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"speaker\")]),(_vm.$server.activePlayer)?_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$server.activePlayer.name))]):_c('span',{staticClass:\"overline\"})],1)],1)],1)],1),(_vm.$store.isInStandaloneMode)?_c('v-card',{staticStyle:{\"height\":\"20px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"black\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-list',[_c('v-list-item',{staticStyle:{\"height\":\"50px\",\"padding-bottom\":\"5\"}},[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-10px\"},attrs:{\"tile\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(_vm._s(_vm.players[_vm.player_id].is_group ? \"speaker_group\" : \"speaker\"))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.players[_vm.player_id].name))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.$t(\"state.\" + _vm.players[_vm.player_id].state)))])],1)],1),_c('v-divider'),_vm._l((_vm.volumePlayerIds),function(child_id){return _c('div',{key:child_id},[_c('div',{staticClass:\"body-2\",style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);')},[_c('v-btn',{staticStyle:{\"margin-left\":\"8px\"},style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'),attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.togglePlayerPower(child_id)}}},[_c('v-icon',[_vm._v(\"power_settings_new\")])],1),_c('span',{staticStyle:{\"margin-left\":\"10px\"}},[_vm._v(_vm._s(_vm.players[child_id].name))]),_c('div',{staticStyle:{\"margin-top\":\"-8px\",\"margin-left\":\"15px\",\"margin-right\":\"15px\",\"height\":\"35px\"}},[(!_vm.players[child_id].disable_volume)?_c('v-slider',{attrs:{\"lazy\":\"\",\"disabled\":!_vm.players[child_id].powered,\"value\":Math.round(_vm.players[child_id].volume_level),\"prepend-icon\":\"volume_down\",\"append-icon\":\"volume_up\"},on:{\"end\":function($event){return _vm.setPlayerVolume(child_id, $event)},\"click:append\":function($event){return _vm.setPlayerVolume(child_id, 'up')},\"click:prepend\":function($event){return _vm.setPlayerVolume(child_id, 'down')}}}):_vm._e()],1)],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-card>\n <v-list>\n <v-list-item style=\"height:50px;padding-bottom:5;\">\n <v-list-item-avatar tile style=\"margin-left:-10px;\">\n <v-icon large>{{\n players[player_id].is_group ? \"speaker_group\" : \"speaker\"\n }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title>{{ players[player_id].name }}</v-list-item-title>\n <v-list-item-subtitle>{{\n $t(\"state.\" + players[player_id].state)\n }}</v-list-item-subtitle>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <div v-for=\"child_id in volumePlayerIds\" :key=\"child_id\">\n <div\n class=\"body-2\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-btn\n icon\n @click=\"togglePlayerPower(child_id)\"\n style=\"margin-left:8px\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-icon>power_settings_new</v-icon>\n </v-btn>\n <span style=\"margin-left:10px\">{{ players[child_id].name }}</span>\n <div\n style=\"margin-top:-8px;margin-left:15px;margin-right:15px;height:35px;\"\n >\n <v-slider\n lazy\n :disabled=\"!players[child_id].powered\"\n v-if=\"!players[child_id].disable_volume\"\n :value=\"Math.round(players[child_id].volume_level)\"\n prepend-icon=\"volume_down\"\n append-icon=\"volume_up\"\n @end=\"setPlayerVolume(child_id, $event)\"\n @click:append=\"setPlayerVolume(child_id, 'up')\"\n @click:prepend=\"setPlayerVolume(child_id, 'down')\"\n ></v-slider>\n </div>\n </div>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: ['value', 'players', 'player_id'],\n data () {\n return {}\n },\n computed: {\n volumePlayerIds () {\n var allIds = [this.player_id]\n allIds.push(...this.players[this.player_id].group_childs)\n return allIds\n }\n },\n mounted () { },\n methods: {\n setPlayerVolume: function (playerId, newVolume) {\n this.players[playerId].volume_level = newVolume\n if (newVolume === 'up') {\n this.$server.playerCommand('volume_up', null, playerId)\n } else if (newVolume === 'down') {\n this.$server.playerCommand('volume_down', null, playerId)\n } else {\n this.$server.playerCommand('volume_set', newVolume, playerId)\n }\n },\n togglePlayerPower: function (playerId) {\n this.$server.playerCommand('power_toggle', null, playerId)\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VolumeControl.vue?vue&type=template&id=65f7b2c2&\"\nimport script from \"./VolumeControl.vue?vue&type=script&lang=js&\"\nexport * from \"./VolumeControl.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\ninstallComponents(component, {VBtn,VCard,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSlider})\n","<template>\n <v-footer\n app\n fixed\n padless\n light\n elevation=\"10\"\n style=\"background-color: black;\"\n >\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"#E0E0E0\"\n style=\"margin-top:1px;\"\n >\n <!-- now playing media -->\n <v-list-item two-line>\n <v-list-item-avatar tile v-if=\"curQueueItem\">\n <img\n :src=\"$server.getImageUrl(curQueueItem)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.54);\"\n />\n </v-list-item-avatar>\n <v-list-item-avatar v-else>\n <v-icon>speaker</v-icon>\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title v-if=\"curQueueItem\">\n {{ curQueueItem.name }}</v-list-item-title\n >\n <v-list-item-title v-else-if=\"$server.activePlayer\">\n {{ $server.activePlayer.name }}</v-list-item-title\n >\n <v-list-item-subtitle v-if=\"curQueueItem\" style=\"color: primary\">\n <span\n v-for=\"(artist, artistindex) in curQueueItem.artists\"\n :key=\"artistindex\"\n >\n <a v-on:click=\"artistClick(artist)\" @click.stop=\"\">{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < curQueueItem.artists.length\"\n :key=\"artistindex\"\n >\n /\n </label>\n </span>\n </v-list-item-subtitle>\n </v-list-item-content>\n </v-list-item>\n\n <!-- progress bar -->\n <div\n class=\"body-2\"\n style=\"height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-12px;background-color:#E0E0E0;\"\n align=\"center\"\n >\n <div\n style=\"height:12px;margin-left:22px;margin-right:20px;margin-top:2px;\"\n v-if=\"curQueueItem\"\n >\n <span class=\"left\">\n {{ playerCurTimeStr }}\n </span>\n <span class=\"right\">\n {{ playerTotalTimeStr }}\n </span>\n </div>\n </div>\n <v-progress-linear\n fixed\n light\n :value=\"progress\"\n v-if=\"curQueueItem\"\n :style=\"\n 'margin-top:-22px;margin-left:80px;width:' + progressBarWidth + 'px;'\n \"\n />\n </v-card>\n\n <!-- Control buttons -->\n <v-list-item\n dark\n dense\n style=\"height:44px;margin-bottom:5px;margin-top:-4px;background-color:black;\"\n >\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn small icon @click=\"playerCommand('previous')\">\n <v-icon>skip_previous</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action\n v-if=\"$server.activePlayer\"\n style=\"margin-left:-32px;margin-top:15px\"\n >\n <v-btn icon x-large @click=\"playerCommand('play_pause')\">\n <v-icon size=\"50\">{{\n $server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"\n }}</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn icon small @click=\"playerCommand('next')\">\n <v-icon>skip_next</v-icon>\n </v-btn>\n </v-list-item-action>\n <!-- player controls -->\n <v-list-item-content> </v-list-item-content>\n\n <!-- active player queue button -->\n <v-list-item-action style=\"padding:28px;\" v-if=\"$server.activePlayer\">\n <v-btn\n small\n text\n icon\n @click=\"$router.push('/playerqueue/')\"\n >\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>queue_music</v-icon>\n <span class=\"overline\">{{ $t(\"queue\") }}</span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n\n <!-- active player volume -->\n <v-list-item-action style=\"padding:20px;\" v-if=\"$server.activePlayer && !$store.isMobile\">\n <v-menu\n :close-on-content-click=\"false\"\n :nudge-width=\"250\"\n offset-x\n top\n @click.native.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn small icon v-on=\"on\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>volume_up</v-icon>\n <span class=\"overline\">{{\n Math.round($server.activePlayer.volume_level)\n }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"$server.activePlayer.player_id\"\n />\n </v-menu>\n </v-list-item-action>\n\n <!-- active player btn -->\n <v-list-item-action style=\"padding:20px;margin-right:15px\">\n <v-btn small text icon @click=\"$server.$emit('showPlayersMenu')\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>speaker</v-icon>\n <span class=\"overline\" v-if=\"$server.activePlayer\">{{\n $server.activePlayer.name\n }}</span>\n <span class=\"overline\" v-else> </span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n </v-list-item>\n <!-- add some additional whitespace in standalone mode only -->\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"black\"\n style=\"height:20px\" v-if=\"$store.isInStandaloneMode\"/>\n </v-footer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.divider {\n height: 1px;\n width: 100%;\n background-color: #cccccc;\n}\n.right {\n float: right;\n}\n.left {\n float: left;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n props: [],\n data () {\n return {\n playerQueueDetails: {}\n }\n },\n watch: { },\n computed: {\n curQueueItem () {\n if (this.playerQueueDetails) {\n return this.playerQueueDetails.cur_item\n } else {\n return null\n }\n },\n progress () {\n if (!this.curQueueItem) return 0\n var totalSecs = this.curQueueItem.duration\n var curSecs = this.playerQueueDetails.cur_item_time\n var curPercent = curSecs / totalSecs * 100\n return curPercent\n },\n playerCurTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var curSecs = this.playerQueueDetails.cur_item_time\n return curSecs.toString().formatDuration()\n },\n playerTotalTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var totalSecs = this.curQueueItem.duration\n return totalSecs.toString().formatDuration()\n },\n progressBarWidth () {\n return window.innerWidth - 160\n }\n },\n created () {\n this.$server.$on('queue updated', this.queueUpdatedMsg)\n this.$server.$on('new player selected', this.getQueueDetails)\n },\n methods: {\n playerCommand (cmd, cmd_opt = null) {\n this.$server.playerCommand(cmd, cmd_opt, this.$server.activePlayerId)\n },\n artistClick (item) {\n // artist entry clicked within the listviewItem\n var url = '/artists/' + item.item_id\n this.$router.push({ path: url, query: { provider: item.provider } })\n },\n queueUpdatedMsg (data) {\n if (data.player_id === this.$server.activePlayerId) {\n for (const [key, value] of Object.entries(data)) {\n Vue.set(this.playerQueueDetails, key, value)\n }\n }\n },\n async getQueueDetails () {\n if (this.$server.activePlayer) {\n let endpoint = 'players/' + this.$server.activePlayerId + '/queue'\n this.playerQueueDetails = await this.$server.getData(endpoint)\n }\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerOSD.vue?vue&type=template&id=1cdf04ce&scoped=true&\"\nimport script from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerOSD.vue?vue&type=style&index=0&id=1cdf04ce&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1cdf04ce\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\ninstallComponents(component, {VBtn,VCard,VFlex,VFooter,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VProgressLinear})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"right\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\",\"width\":\"300\"},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card-title',{staticClass:\"headline\"},[_c('b',[_vm._v(_vm._s(_vm.$t('players')))])]),_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-divider'),_vm._l((_vm.filteredPlayerIds),function(playerId){return _c('div',{key:playerId,style:(_vm.$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : '')},[_c('v-list-item',{staticStyle:{\"margin-left\":\"-5px\",\"margin-right\":\"-15px\"},attrs:{\"ripple\":\"\",\"dense\":\"\"},on:{\"click\":function($event){return _vm.$server.switchPlayer(_vm.$server.players[playerId].player_id)}}},[_c('v-list-item-avatar',[_c('v-icon',{attrs:{\"size\":\"45\"}},[_vm._v(_vm._s(_vm.$server.players[playerId].is_group ? 'speaker_group' : 'speaker'))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',{staticClass:\"subtitle-1\"},[_vm._v(_vm._s(_vm.$server.players[playerId].name))]),_c('v-list-item-subtitle',{key:_vm.$server.players[playerId].state,staticClass:\"body-2\",staticStyle:{\"font-weight\":\"normal\"}},[_vm._v(\" \"+_vm._s(_vm.$t('state.' + _vm.$server.players[playerId].state))+\" \")])],1),(_vm.$server.activePlayerId)?_c('v-list-item-action',{staticStyle:{\"padding-right\":\"10px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"close-on-click\":true,\"nudge-width\":250,\"offset-x\":\"\",\"right\":\"\"},nativeOn:{\"click\":[function($event){$event.stopPropagation();},function($event){$event.stopPropagation();$event.preventDefault();}]},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({staticStyle:{\"color\":\"rgba(0,0,0,.54)\"},attrs:{\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.players[playerId].volume_level)))])],1)],1)]}}],null,true)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":playerId}})],1)],1):_vm._e()],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <!-- players side menu -->\n <v-navigation-drawer\n right\n app\n clipped\n temporary\n v-model=\"visible\"\n width=\"300\"\n >\n <v-card-title class=\"headline\">\n <b>{{ $t('players') }}</b>\n </v-card-title>\n <v-list dense>\n <v-divider></v-divider>\n <div\n v-for=\"playerId of filteredPlayerIds\"\n :key=\"playerId\"\n :style=\"$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : ''\"\n >\n <v-list-item\n ripple\n dense\n style=\"margin-left: -5px; margin-right: -15px\"\n @click=\"$server.switchPlayer($server.players[playerId].player_id)\"\n >\n <v-list-item-avatar>\n <v-icon size=\"45\">{{ $server.players[playerId].is_group ? 'speaker_group' : 'speaker' }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title class=\"subtitle-1\">{{ $server.players[playerId].name }}</v-list-item-title>\n\n <v-list-item-subtitle\n class=\"body-2\"\n style=\"font-weight:normal;\"\n :key=\"$server.players[playerId].state\"\n >\n {{ $t('state.' + $server.players[playerId].state) }}\n </v-list-item-subtitle>\n\n </v-list-item-content>\n\n <v-list-item-action\n style=\"padding-right:10px;\"\n v-if=\"$server.activePlayerId\"\n >\n <v-menu\n :close-on-content-click=\"false\"\n :close-on-click=\"true\"\n :nudge-width=\"250\"\n offset-x\n right\n @click.native.stop\n @click.native.stop.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n style=\"color:rgba(0,0,0,.54);\"\n v-on=\"on\"\n >\n <v-flex\n xs12\n class=\"vertical-btn\"\n >\n <v-icon>volume_up</v-icon>\n <span class=\"overline\">{{ Math.round($server.players[playerId].volume_level) }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"playerId\"\n />\n </v-menu>\n </v-list-item-action>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n watch: {\n },\n data () {\n return {\n filteredPlayerIds: [],\n visible: false\n }\n },\n computed: {\n },\n created () {\n this.$server.$on('showPlayersMenu', this.show)\n this.$server.$on('players changed', this.getAvailablePlayers)\n this.getAvailablePlayers()\n },\n methods: {\n show () {\n this.visible = true\n },\n getAvailablePlayers () {\n // generate a list of playerIds that we want to show in the list\n this.filteredPlayerIds = []\n for (var playerId in this.$server.players) {\n // we're only interested in enabled players that are not group childs\n if (this.$server.players[playerId].enabled && this.$server.players[playerId].group_parents.length === 0) {\n this.filteredPlayerIds.push(playerId)\n }\n }\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerSelect.vue?vue&type=template&id=502704d8&scoped=true&\"\nimport script from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerSelect.vue?vue&type=style&index=0&id=502704d8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"502704d8\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VCardTitle,VDivider,VFlex,VIcon,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VNavigationDrawer})\n","<template>\n <v-app>\n <TopBar />\n <NavigationMenu></NavigationMenu>\n <v-content>\n <router-view app :key=\"$route.path\"></router-view>\n </v-content>\n <PlayerOSD :showPlayerSelect=\"showPlayerSelect\" />\n <ContextMenu/>\n <PlayerSelect/>\n <v-overlay :value=\"$store.loading\">\n <v-progress-circular indeterminate size=\"64\"></v-progress-circular>\n </v-overlay>\n </v-app>\n</template>\n\n<style>\n .body {\n background-color: black;\n overscroll-behavior-x: none;\n }\n</style>\n\n<script>\nimport Vue from 'vue'\nimport NavigationMenu from './components/NavigationMenu.vue'\nimport TopBar from './components/TopBar.vue'\nimport ContextMenu from './components/ContextMenu.vue'\nimport PlayerOSD from './components/PlayerOSD.vue'\nimport PlayerSelect from './components/PlayerSelect.vue'\n\nexport default Vue.extend({\n name: 'App',\n components: {\n NavigationMenu,\n TopBar,\n ContextMenu,\n PlayerOSD,\n PlayerSelect\n },\n data: () => ({\n showPlayerSelect: false\n }),\n created () {\n // TODO: retrieve serveraddress through discovery and/or user settings\n let serverAddress = ''\n if (process.env.NODE_ENV === 'production') {\n let loc = window.location\n serverAddress = loc.origin + loc.pathname\n } else {\n serverAddress = 'http://192.168.1.79:8095/'\n }\n this.$server.connect(serverAddress)\n }\n})\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=85e13390&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VApp,VContent,VOverlay,VProgressCircular})\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered () {\n console.log('Service worker has been registered.')\n },\n cached () {\n console.log('Content has been cached for offline use.')\n },\n updatefound () {\n console.log('New content is downloading.')\n },\n updated () {\n alert('New content is available; please refresh.')\n window.location.reload(true)\n },\n offline () {\n alert('No internet connection found. App is running in offline mode.')\n },\n error (error) {\n console.error('Error during service worker registration:', error)\n }\n })\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-icon',{staticStyle:{\"margin-left\":\"15px\"}},[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.title)}})],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-list tile>\n <v-list-item tile\n v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-icon style=\"margin-left:15px\">\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title v-text=\"item.title\"></v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </section>\n</template>\n\n<script>\n\nexport default {\n name: 'home',\n data () {\n return {\n items: [\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('search'), icon: 'search', path: '/search' }\n ]\n }\n },\n created () {\n this.$store.windowtitle = this.$t('musicassistant')\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=38d5da10&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":item.media_type < 4 ? _vm.$store.isMobile : false,\"hidelibrary\":true,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hideduration\":item.media_type == 5}})]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"items\"\n :item-size=\"72\"\n key-field=\"item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"item.media_type < 4 ? $store.isMobile : false\"\n :hidelibrary=\"true\"\n :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n :hideduration=\"item.media_type == 5\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n name: 'browse',\n components: {\n ListviewItem\n },\n props: {\n mediatype: String,\n provider: String\n },\n data () {\n return {\n selected: [2],\n items: []\n }\n },\n created () {\n this.$store.windowtitle = this.$t(this.mediatype)\n this.getItems()\n this.$server.$on('refresh_listing', this.getItems)\n },\n methods: {\n async getItems () {\n // retrieve the full list of items\n let endpoint = 'library/' + this.mediatype\n return this.$server.getAllItems(endpoint, this.items)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=14629744&\"\nimport script from \"./Browse.vue?vue&type=script&lang=js&\"\nexport * from \"./Browse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VList } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VList})\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Browse from '../views/Browse.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/config',\n name: 'config',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/config/:configKey',\n name: 'configKey',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/search',\n name: 'search',\n component: () => import(/* webpackChunkName: \"search\" */ '../views/Search.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:media_type/:media_id',\n name: 'itemdetails',\n component: () => import(/* webpackChunkName: \"itemdetails\" */ '../views/ItemDetails.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/playerqueue',\n name: 'playerqueue',\n component: () => import(/* webpackChunkName: \"playerqueue\" */ '../views/PlayerQueue.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:mediatype',\n name: 'browse',\n component: Browse,\n props: route => ({ ...route.params, ...route.query })\n }\n]\n\nconst router = new VueRouter({\n mode: 'hash',\n routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\n\nVue.use(VueI18n)\n\nfunction loadLocaleMessages () {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.json$/i)\n const messages = {}\n locales.keys().forEach(key => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (matched && matched.length > 1) {\n const locale = matched[1]\n messages[locale] = locales(key)\n }\n })\n return messages\n}\n\nexport default new VueI18n({\n // locale: process.env.VUE_APP_I18N_LOCALE || 'en',\n locale: navigator.language.split('-')[0],\n fallbackLocale: 'en',\n messages: loadLocaleMessages()\n})\n","import Vue from 'vue'\n// import Vuetify from 'vuetify'\nimport Vuetify from 'vuetify/lib'\nimport 'vuetify/dist/vuetify.min.css'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n icons: {\n iconfont: 'md'\n }\n})\n","import Vue from 'vue'\n\nconst globalStore = new Vue({\n data () {\n return {\n windowtitle: 'Home',\n loading: false,\n showNavigationMenu: false,\n topBarTransparent: false,\n topBarContextItem: null,\n isMobile: false,\n isInStandaloneMode: false\n }\n },\n created () {\n this.handleWindowOptions()\n window.addEventListener('resize', this.handleWindowOptions)\n },\n destroyed () {\n window.removeEventListener('resize', this.handleWindowOptions)\n },\n methods: {\n handleWindowOptions () {\n this.isMobile = (document.body.clientWidth < 700)\n this.isInStandaloneMode = (window.navigator.standalone === true) || (window.matchMedia('(display-mode: standalone)').matches)\n }\n }\n})\n\nexport default {\n globalStore,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$store = globalStore\n }\n}\n","'use strict'\n\nimport Vue from 'vue'\nimport axios from 'axios'\nimport oboe from 'oboe'\n\nconst axiosConfig = {\n timeout: 60 * 1000\n // withCredentials: true, // Check cross-site Access-Control\n}\nconst _axios = axios.create(axiosConfig)\n\n// Holds the connection to the server\n\nconst server = new Vue({\n\n _address: '',\n _ws: null,\n\n data () {\n return {\n connected: false,\n players: {},\n activePlayerId: null,\n syncStatus: []\n }\n },\n methods: {\n\n async connect (serverAddress) {\n // Connect to the server\n if (!serverAddress.endsWith('/')) {\n serverAddress = serverAddress + '/'\n }\n this._address = serverAddress\n let wsAddress = serverAddress.replace('http', 'ws') + 'ws'\n this._ws = new WebSocket(wsAddress)\n this._ws.onopen = this._onWsConnect\n this._ws.onmessage = this._onWsMessage\n this._ws.onclose = this._onWsClose\n this._ws.onerror = this._onWsError\n },\n\n async toggleLibrary (item) {\n /// triggered when user clicks the library (heart) button\n if (item.in_library.length === 0) {\n // add to library\n await this.putData('library', item)\n item.in_library = [item.provider]\n } else {\n // remove from library\n await this.deleteData('library', item)\n item.in_library = []\n }\n },\n\n getImageUrl (mediaItem, imageType = 'image', size = 0) {\n // format the image url\n if (!mediaItem || !mediaItem.media_type) return ''\n if (mediaItem.media_type === 4 && imageType !== 'image') return ''\n if (mediaItem.media_type === 5 && imageType !== 'image') return ''\n if (mediaItem.provider === 'database' && imageType === 'image') {\n return `${this._address}api/${mediaItem.media_type}/${mediaItem.item_id}/thumb?provider=${mediaItem.provider}&size=${size}`\n } else if (mediaItem.metadata && mediaItem.metadata[imageType]) {\n return mediaItem.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.metadata && mediaItem.album.metadata[imageType]) {\n return mediaItem.album.metadata[imageType]\n } else if (mediaItem.artist && mediaItem.artist.metadata && mediaItem.artist.metadata[imageType]) {\n return mediaItem.artist.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.artist && mediaItem.album.artist.metadata && mediaItem.album.artist.metadata[imageType]) {\n return mediaItem.artist.metadata[imageType]\n } else return ''\n },\n\n async getData (endpoint, params = {}) {\n // get data from the server\n let url = this._address + 'api/' + endpoint\n let result = await _axios.get(url, { params: params })\n Vue.$log.debug('getData', endpoint, result)\n return result.data\n },\n\n async postData (endpoint, data) {\n // post data to the server\n let url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n let result = await _axios.post(url, data)\n Vue.$log.debug('postData', endpoint, result)\n return result.data\n },\n\n async putData (endpoint, data) {\n // put data to the server\n let url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n let result = await _axios.put(url, data)\n Vue.$log.debug('putData', endpoint, result)\n return result.data\n },\n\n async deleteData (endpoint, dataObj) {\n // delete data on the server\n let url = this._address + 'api/' + endpoint\n dataObj = JSON.stringify(dataObj)\n let result = await _axios.delete(url, { data: dataObj })\n Vue.$log.debug('deleteData', endpoint, result)\n return result.data\n },\n\n async getAllItems (endpoint, list, params = {}) {\n // retrieve all items and fill list\n let url = this._address + 'api/' + endpoint\n if (params) {\n var urlParams = new URLSearchParams(params)\n url += '?' + urlParams.toString()\n }\n let index = 0\n oboe(url)\n .node('items.*', function (item) {\n Vue.set(list, index, item)\n index += 1\n })\n .done(function (fullList) {\n // truncate list if needed\n if (list.length > fullList.items.length) {\n list.splice(fullList.items.length)\n }\n })\n },\n\n playerCommand (cmd, cmd_opt = '', playerId = this.activePlayerId) {\n let endpoint = 'players/' + playerId + '/cmd/' + cmd\n this.postData(endpoint, cmd_opt)\n },\n\n async playItem (item, queueOpt) {\n this.$store.loading = true\n let endpoint = 'players/' + this.activePlayerId + '/play_media/' + queueOpt\n await this.postData(endpoint, item)\n this.$store.loading = false\n },\n\n switchPlayer (newPlayerId) {\n if (newPlayerId !== this.activePlayerId) {\n this.activePlayerId = newPlayerId\n localStorage.setItem('activePlayerId', newPlayerId)\n this.$emit('new player selected', newPlayerId)\n }\n },\n\n async _onWsConnect () {\n // Websockets connection established\n Vue.$log.info('Connected to server ' + this._address)\n this.connected = true\n // retrieve all players once through api\n let players = await this.getData('players')\n for (let player of players) {\n Vue.set(this.players, player.player_id, player)\n }\n this._selectActivePlayer()\n this.$emit('players changed')\n },\n\n async _onWsMessage (e) {\n // Message retrieved on the websocket\n var msg = JSON.parse(e.data)\n if (msg.message === 'player changed') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n } else if (msg.message === 'player added') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'player removed') {\n Vue.delete(this.players, msg.message_details.player_id)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'music sync status') {\n this.syncStatus = msg.message_details\n } else {\n this.$emit(msg.message, msg.message_details)\n }\n },\n\n _onWsClose (e) {\n this.connected = false\n Vue.$log.error('Socket is closed. Reconnect will be attempted in 5 seconds.', e.reason)\n setTimeout(function () {\n this.connect(this._address)\n }.bind(this), 5000)\n },\n\n _onWsError () {\n this._ws.close()\n },\n\n _selectActivePlayer () {\n // auto select new active player if we have none\n if (!this.activePlayer || !this.activePlayer.enabled || this.activePlayer.group_parents.length > 0) {\n // prefer last selected player\n let lastPlayerId = localStorage.getItem('activePlayerId')\n if (lastPlayerId && this.players[lastPlayerId] && this.players[lastPlayerId].enabled) {\n this.switchPlayer(lastPlayerId)\n } else {\n // prefer the first playing player\n for (let playerId in this.players) {\n if (this.players[playerId].state === 'playing' && this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n // fallback to just the first player\n if (!this.activePlayer || !this.activePlayer.enabled) {\n for (let playerId in this.players) {\n if (this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n }\n }\n }\n }\n },\n computed: {\n activePlayer () {\n if (!this.activePlayerId) {\n return null\n } else {\n return this.players[this.activePlayerId]\n }\n }\n }\n})\n\n// install as plugin\nexport default {\n server,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$server = server\n }\n}\n","import Vue from 'vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\nimport i18n from './i18n'\nimport 'roboto-fontface/css/roboto/roboto-fontface.css'\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\nimport vuetify from './plugins/vuetify'\nimport store from './plugins/store'\nimport server from './plugins/server'\nimport '@babel/polyfill'\nimport VueLogger from 'vuejs-logger'\n\nconst isProduction = process.env.NODE_ENV === 'production'\nconst loggerOptions = {\n isEnabled: true,\n logLevel: isProduction ? 'error' : 'debug',\n stringifyArguments: false,\n showLogLevel: true,\n showMethodName: false,\n separator: '|',\n showConsoleColors: true\n}\n\nVue.config.productionTip = false\nVue.use(VueLogger, loggerOptions)\nVue.use(VueVirtualScroller)\nVue.use(store)\nVue.use(server)\n\n// eslint-disable-next-line no-extend-native\nString.prototype.formatDuration = function () {\n var secNum = parseInt(this, 10) // don't forget the second param\n var hours = Math.floor(secNum / 3600)\n var minutes = Math.floor((secNum - (hours * 3600)) / 60)\n var seconds = secNum - (hours * 3600) - (minutes * 60)\n if (hours < 10) { hours = '0' + hours }\n if (minutes < 10) { minutes = '0' + minutes }\n if (seconds < 10) { seconds = '0' + seconds }\n if (hours === '00') { return minutes + ':' + seconds } else { return hours + ':' + minutes + ':' + seconds }\n}\n\nnew Vue({\n router,\n i18n,\n vuetify,\n render: h => h(App)\n}).$mount('#app')\n","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/file.813f9dad.png\";","module.exports = __webpack_public_path__ + \"img/sonos.72e2fecb.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","var map = {\n\t\"./aac.png\": \"9a36\",\n\t\"./chromecast.png\": \"57d1\",\n\t\"./default_artist.png\": \"4bfb\",\n\t\"./file.png\": \"71db\",\n\t\"./flac.png\": \"fb30\",\n\t\"./hires.png\": \"f5e3\",\n\t\"./homeassistant.png\": \"3232\",\n\t\"./http_streamer.png\": \"2755\",\n\t\"./logo.png\": \"cf05\",\n\t\"./mp3.png\": \"f1d4\",\n\t\"./qobuz.png\": \"0863\",\n\t\"./sonos.png\": \"82f5\",\n\t\"./spotify.png\": \"0c3b\",\n\t\"./squeezebox.png\": \"bd18\",\n\t\"./tunein.png\": \"e428\",\n\t\"./vorbis.png\": \"94cc\",\n\t\"./web.png\": \"edbf\",\n\t\"./webplayer.png\": \"3d05\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"9e01\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=502704d8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=502704d8&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=1cdf04ce&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=1cdf04ce&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/squeezebox.60631223.png\";","module.exports = __webpack_public_path__ + \"img/logo.c079bd97.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-list-item',{directives:[{name:\"longpress\",rawName:\"v-longpress\",value:(_vm.menuClick),expression:\"menuClick\"}],attrs:{\"ripple\":\"\"},on:{\"click\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.itemClicked(_vm.item)},\"contextmenu\":[_vm.menuClick,function($event){$event.preventDefault();}]}},[(!_vm.hideavatar)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\",\"color\":\"grey\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.22)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', 80),\"lazy-src\":require('../assets/file.png')}})]):_vm._e(),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.item.name)+\" \"),(!!_vm.item.version)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.item.version)+\")\")]):_vm._e()]),(_vm.item.artists)?_c('v-list-item-subtitle',[_vm._l((_vm.item.artists),function(artist,artistindex){return _c('span',{key:artist.item_id},[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.item.artists.length)?_c('label',{key:artistindex},[_vm._v(\"/\")]):_vm._e()])}),(!!_vm.item.album && !!_vm.hidetracknum)?_c('a',{staticStyle:{\"color\":\"grey\"},on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.album)},function($event){$event.stopPropagation();}]}},[_vm._v(\" - \"+_vm._s(_vm.item.album.name))]):_vm._e(),(!_vm.hidetracknum && _vm.item.track_number)?_c('label',{staticStyle:{\"color\":\"grey\"}},[_vm._v(\"- disc \"+_vm._s(_vm.item.disc_number)+\" track \"+_vm._s(_vm.item.track_number))]):_vm._e()],2):_vm._e(),(_vm.item.artist)?_c('v-list-item-subtitle',[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(_vm.item.artist.name))])]):_vm._e(),(!!_vm.item.owner)?_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.item.owner))]):_vm._e()],1),(!_vm.hideproviders)?_c('v-list-item-action',[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.item.provider_ids,\"height\":20}})],1):_vm._e(),(_vm.isHiRes)?_c('v-list-item-action',[_c('img',{attrs:{\"src\":require('../assets/hires.png'),\"height\":\"20\"}})]):_vm._e(),(!_vm.hidelibrary)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"ripple\":\"\"},on:{\"click\":[function($event){return _vm.toggleLibrary(_vm.item)},function($event){$event.preventDefault();},function($event){$event.stopPropagation();}]}},on),[(_vm.item.in_library.length > 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite\")]):_vm._e(),(_vm.item.in_library.length == 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite_border\")]):_vm._e()],1)]}}],null,false,113966118)},[(_vm.item.in_library.length > 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"remove_library\")))]):_vm._e(),(_vm.item.in_library.length == 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"add_library\")))]):_vm._e()])],1):_vm._e(),(!_vm.hideduration && !!_vm.item.duration)?_c('v-list-item-action',[_vm._v(_vm._s(_vm.item.duration.toString().formatDuration()))]):_vm._e(),(!_vm.hidemenu)?_c('v-icon',{staticStyle:{\"margin-right\":\"-10px\",\"padding-left\":\"10px\"},attrs:{\"color\":\"grey lighten-1\"},on:{\"click\":[function($event){return _vm.menuClick(_vm.item)},function($event){$event.stopPropagation();}]}},[_vm._v(\"more_vert\")]):_vm._e()],1),_c('v-divider')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <v-list-item\n ripple\n @click.left=\"itemClicked(item)\"\n @contextmenu=\"menuClick\"\n @contextmenu.prevent\n v-longpress=\"menuClick\"\n >\n <v-list-item-avatar tile color=\"grey\" v-if=\"!hideavatar\">\n <img\n :src=\"$server.getImageUrl(item, 'image', 80)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.22);\"\n />\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title>\n {{ item.name }}\n <span v-if=\"!!item.version\">({{ item.version }})</span>\n </v-list-item-title>\n\n <v-list-item-subtitle v-if=\"item.artists\">\n <span\n v-for=\"(artist, artistindex) in item.artists\"\n :key=\"artist.item_id\"\n >\n <a v-on:click=\"itemClicked(artist)\" @click.stop>{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < item.artists.length\"\n :key=\"artistindex\"\n >/</label\n >\n </span>\n <a\n v-if=\"!!item.album && !!hidetracknum\"\n v-on:click=\"itemClicked(item.album)\"\n @click.stop\n style=\"color:grey\"\n >\n - {{ item.album.name }}</a\n >\n <label v-if=\"!hidetracknum && item.track_number\" style=\"color:grey\"\n >- disc {{ item.disc_number }} track {{ item.track_number }}</label\n >\n </v-list-item-subtitle>\n <v-list-item-subtitle v-if=\"item.artist\">\n <a v-on:click=\"itemClicked(item.artist)\" @click.stop>{{\n item.artist.name\n }}</a>\n </v-list-item-subtitle>\n\n <v-list-item-subtitle v-if=\"!!item.owner\">{{\n item.owner\n }}</v-list-item-subtitle>\n </v-list-item-content>\n\n <v-list-item-action v-if=\"!hideproviders\">\n <ProviderIcons v-bind:providerIds=\"item.provider_ids\" :height=\"20\" />\n </v-list-item-action>\n\n <v-list-item-action v-if=\"isHiRes\">\n <img :src=\"require('../assets/hires.png')\" height=\"20\" />\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hidelibrary\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n ripple\n v-on=\"on\"\n v-on:click=\"toggleLibrary(item)\"\n @click.prevent\n @click.stop\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length > 0\"\n >favorite</v-icon\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length == 0\"\n >favorite_border</v-icon\n >\n </v-btn>\n </template>\n <span v-if=\"item.in_library.length > 0\">{{\n $t(\"remove_library\")\n }}</span>\n <span v-if=\"item.in_library.length == 0\">{{\n $t(\"add_library\")\n }}</span>\n </v-tooltip>\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hideduration && !!item.duration\">{{\n item.duration.toString().formatDuration()\n }}</v-list-item-action>\n\n <!-- menu button/icon -->\n <v-icon\n v-if=\"!hidemenu\"\n @click=\"menuClick(item)\"\n @click.stop\n color=\"grey lighten-1\"\n style=\"margin-right:-10px;padding-left:10px\"\n >more_vert</v-icon\n >\n </v-list-item>\n <v-divider></v-divider>\n </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ProviderIcons from '@/components/ProviderIcons.vue'\n\nconst PRESS_TIMEOUT = 600\n\nVue.directive('longpress', {\n bind: function (el, { value }, vNode) {\n if (typeof value !== 'function') {\n Vue.$log.warn(`Expect a function, got ${value}`)\n return\n }\n let pressTimer = null\n const start = e => {\n if (e.type === 'click' && e.button !== 0) {\n return\n }\n if (pressTimer === null) {\n pressTimer = setTimeout(() => value(e), PRESS_TIMEOUT)\n }\n }\n const cancel = () => {\n if (pressTimer !== null) {\n clearTimeout(pressTimer)\n pressTimer = null\n }\n }\n ;['mousedown', 'touchstart'].forEach(e => el.addEventListener(e, start))\n ;['click', 'mouseout', 'touchend', 'touchcancel'].forEach(e => el.addEventListener(e, cancel))\n }\n})\n\nexport default Vue.extend({\n components: {\n ProviderIcons\n },\n props: {\n item: Object,\n index: Number,\n totalitems: Number,\n hideavatar: Boolean,\n hidetracknum: Boolean,\n hideproviders: Boolean,\n hidemenu: Boolean,\n hidelibrary: Boolean,\n hideduration: Boolean,\n onclickHandler: null\n },\n data () {\n return {\n touchMoving: false,\n cancelled: false\n }\n },\n computed: {\n isHiRes () {\n for (var prov of this.item.provider_ids) {\n if (prov.quality > 6) {\n return true\n }\n }\n return false\n }\n },\n created () { },\n beforeDestroy () {\n this.cancelled = true\n },\n mounted () { },\n methods: {\n itemClicked (mediaItem = null) {\n // mediaItem in the list is clicked\n if (this.onclickHandler) return this.onclickHandler(mediaItem)\n let url = ''\n if (mediaItem.media_type === 1) {\n url = '/artists/' + mediaItem.item_id\n } else if (mediaItem.media_type === 2) {\n url = '/albums/' + mediaItem.item_id\n } else if (mediaItem.media_type === 4) {\n url = '/playlists/' + mediaItem.item_id\n } else {\n // assume track (or radio) item\n this.$server.$emit('showPlayMenu', mediaItem)\n return\n }\n this.$router.push({ path: url, query: { provider: mediaItem.provider } })\n },\n menuClick () {\n // contextmenu button clicked\n if (this.cancelled) return\n this.$server.$emit('showContextMenu', this.item)\n },\n async toggleLibrary (mediaItem) {\n // library button clicked on item\n this.cancelled = true\n await this.$server.toggleLibrary(mediaItem)\n this.cancelled = false\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListviewItem.vue?vue&type=template&id=1954c614&\"\nimport script from \"./ListviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VDivider,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.uniqueProviders),function(prov){return _c('img',{key:prov.provider,staticStyle:{\"margin-right\":\"6px\",\"margin-top\":\"6px\"},attrs:{\"height\":_vm.height,\"src\":require('../assets/' + prov.provider + '.png')}})}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <img\r\n v-for=\"prov of uniqueProviders\" :key=\"prov.provider\"\r\n :height=\"height\"\r\n :src=\"require('../assets/' + prov.provider + '.png')\"\r\n style=\"margin-right:6px;margin-top:6px;\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n props: {\r\n providerIds: Array,\r\n height: Number\r\n },\r\n data () {\r\n return {\r\n isHiRes: false\r\n }\r\n },\r\n computed: {\r\n uniqueProviders: function () {\r\n var output = []\r\n var keys = []\r\n if (!this.providerIds) return []\r\n this.providerIds.forEach(function (prov) {\r\n var key = prov['provider']\r\n if (keys.indexOf(key) === -1) {\r\n keys.push(key)\r\n output.push(prov)\r\n }\r\n })\r\n return output\r\n }\r\n },\r\n mounted () { },\r\n methods: {\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProviderIcons.vue?vue&type=template&id=39dc952a&\"\nimport script from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/tunein.ca1c1bb0.png\";","module.exports = __webpack_public_path__ + \"img/web.798ba28f.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/hires.e97b001e.png\";","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}
\ No newline at end of file
--- /dev/null
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["itemdetails"],{"0d8f":function(t,e,i){},"32a2":function(t,e,i){"use strict";i.r(e);var r=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",[i("InfoHeader",{attrs:{itemDetails:t.itemDetails}}),i("v-tabs",{attrs:{grow:"","show-arrows":""},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[t._l(t.tabs,(function(e){return i("v-tab",{key:e.label},[t._v(" "+t._s(t.$t(e.label)+" ("+e.items.length+")"))])})),t._l(t.tabs,(function(e){return i("v-tab-item",{key:e.label},[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:t._u([{key:"default",fn:function(r){var a=r.item;return[i("ListviewItem",{attrs:{item:a,hideavatar:t.$store.isMobile||"album_tracks"===e.label,hidetracknum:"album_tracks"!==e.label,hideproviders:t.$store.isMobile,hidelibrary:t.$store.isMobile,hidemenu:3==a.media_type&&t.$store.isMobile}})]}}],null,!0)})],1)],1)],1)}))],2)],1)},a=[],s=(i("a4d3"),i("e01a"),i("d28b"),i("b0c0"),i("d3b7"),i("3ca3"),i("ddb0"),i("96cf"),i("89ba")),n=i("d3cc"),o=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("v-flex",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:t.visibilityChanged,expression:"visibilityChanged"}]},[r("v-card",{staticClass:"white--text",staticStyle:{"margin-top":"-60px"},attrs:{tile:"",color:"black",img:i("abd2")}},[r("v-img",{staticClass:"white--text",attrs:{width:"100%",height:"300",position:"center top",src:t.$server.getImageUrl(t.itemDetails,"fanart"),gradient:"to bottom, rgba(0,0,0,.90), rgba(0,0,0,.75)"}},[r("div",{staticClass:"text-xs-center",staticStyle:{height:"40px"},attrs:{id:"whitespace_top"}}),t.itemDetails?r("v-layout",{staticStyle:{"margin-left":"5pxmargin-right:5px"}},[t.$store.isMobile?t._e():r("v-flex",{attrs:{xs5:"","pa-5":""}},[r("v-img",{staticStyle:{border:"4px solid rgba(0,0,0,.33)","border-radius":"6px"},attrs:{src:t.$server.getImageUrl(t.itemDetails),"lazy-src":i("4bfb"),width:"220px",height:"220px"}})],1),r("v-flex",[r("v-card-title",{staticStyle:{"text-shadow":"1px 1px #000000"}},[t._v(" "+t._s(t.itemDetails.name)+" ")]),r("v-card-subtitle",[t.itemDetails.version?r("div",{staticClass:"caption",staticStyle:{color:"white"}},[t._v(" "+t._s(t.itemDetails.version)+" ")]):t._e(),t.itemDetails.artists?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),t._l(t.itemDetails.artists,(function(e,i){return r("span",{key:e.db_id},[r("a",{staticStyle:{color:"primary"},on:{click:function(i){return t.artistClick(e)}}},[t._v(t._s(e.name))]),i+1<t.itemDetails.artists.length?r("span",{key:i,staticStyle:{color:"#cccccc"}},[t._v(t._s(" / "))]):t._e()])}))],2):t._e(),t.itemDetails.artist?r("div",{staticClass:"title"},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"},on:{click:function(e){return t.artistClick(t.itemDetails.artist)}}},[t._v(t._s(t.itemDetails.artist.name))])],1):t._e(),t.itemDetails.owner?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"}},[t._v(t._s(t.itemDetails.owner))])],1):t._e(),t.itemDetails.album?r("div",{staticStyle:{color:"#ffffff","text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("album")]),r("a",{staticStyle:{color:"#ffffff"},on:{click:function(e){return t.albumClick(t.itemDetails.album)}}},[t._v(t._s(t.itemDetails.album.name))])],1):t._e()]),r("div",{staticStyle:{"margin-left":"14px"}},[r("v-btn",{attrs:{color:"primary",tile:""},on:{click:function(e){return t.$server.$emit("showPlayMenu",t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("play_circle_filled")]),t._v(" "+t._s(t.$t("play"))+" ")],1),!t.$store.isMobile&&t.itemDetails.in_library&&0==t.itemDetails.in_library.length?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite_border")]),t._v(" "+t._s(t.$t("add_library"))+" ")],1):t._e(),!t.$store.isMobile&&t.itemDetails.in_library&&t.itemDetails.in_library.length>0?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite")]),t._v(" "+t._s(t.$t("remove_library"))+" ")],1):t._e()],1),r("v-card-subtitle",{staticClass:"body-2"},[r("div",{staticClass:"justify-left",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("ReadMore",{attrs:{text:t.getDescription(),"max-chars":t.$store.isMobile?140:260}})],1)])],1),r("div",{staticStyle:{"margin-top":"15px"}},[r("ProviderIcons",{attrs:{providerIds:t.itemDetails.provider_ids,height:25}})],1)],1):t._e()],1)],1)],1)},l=[],c=(i("4160"),i("caad"),i("fb6a"),i("4e827"),i("159b"),i("2b0e")),u=i("e00a"),d=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("a",{staticStyle:{color:"white"},domProps:{innerHTML:t._s(t.formattedString)},on:{click:function(e){return t.triggerReadMore(e,!0)}}}),i("v-dialog",{attrs:{width:"80%"},model:{value:t.isReadMore,callback:function(e){t.isReadMore=e},expression:"isReadMore"}},[i("v-card",[i("v-card-text",{staticClass:"subheading",domProps:{innerHTML:t._s("<br>"+t.text)}})],1)],1)],1)},v=[],m=(i("a9e3"),i("9911"),c["a"].extend({props:{lessStr:{type:String,default:""},text:{type:String,required:!0},link:{type:String,default:"#"},maxChars:{type:Number,default:100}},data:function(){return{isReadMore:!1}},computed:{formattedString:function(){var t=this.text;return this.text.length>this.maxChars&&(t=t.substring(0,this.maxChars)+"..."),t}},mounted:function(){},methods:{triggerReadMore:function(t,e){"#"===this.link&&t.preventDefault(),null===this.lessStr&&""===this.lessStr||(this.isReadMore=e)}}})),f=m,h=i("2877"),p=i("6544"),b=i.n(p),y=i("b0af"),g=i("99d9"),_=i("169a"),x=Object(h["a"])(f,d,v,!1,null,null,null),k=x.exports;b()(x,{VCard:y["a"],VCardText:g["b"],VDialog:_["a"]});var w=i("85fe");c["a"].use(w["a"]);var D=c["a"].extend({components:{ProviderIcons:u["a"],ReadMore:k},props:["itemDetails"],data:function(){return{}},mounted:function(){},created:function(){this.$store.topBarTransparent=!0},beforeDestroy:function(){this.$store.topBarTransparent=!1,this.$store.topBarContextItem=null},watch:{itemDetails:function(t){t&&(this.$store.topBarContextItem=t)}},methods:{visibilityChanged:function(t,e){this.$store.topBarTransparent=!!t},artistClick:function(t){var e="/artists/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},albumClick:function(t){var e="/albums/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},toggleLibrary:function(t){this.$server.toggleLibrary(t)},getDescription:function(){var t="";return this.itemDetails?this.itemDetails.metadata&&this.itemDetails.metadata.description?this.itemDetails.metadata.description:this.itemDetails.metadata&&this.itemDetails.metadata.biography?this.itemDetails.metadata.biography:this.itemDetails.metadata&&this.itemDetails.metadata.copyright?this.itemDetails.metadata.copyright:(this.itemDetails.artists&&this.itemDetails.artists.forEach((function(e){e.metadata&&e.metadata.biography&&(t=e.metadata.biography)})),t):""},getQualityInfo:function(){},getUniqueProviders:function(){var t=[],e=[];if(!this.providerIds)return[];var i=this.providerIds.slice();i.sort((function(t,e){return t.quality<e.quality?1:e.quality<t.quality?-1:0}));var r=!0,a=!1,s=void 0;try{for(var n,o=i[Symbol.iterator]();!(r=(n=o.next()).done);r=!0){var l=n.value;t.includes(l.provider)||(e.push(l),t.push(l.provider))}}catch(c){a=!0,s=c}finally{try{r||null==o.return||o.return()}finally{if(a)throw s}}return e}}}),S=D,$=i("8336"),C=i("0e8f"),I=i("132d"),T=i("adda"),M=i("a722"),V=Object(h["a"])(S,o,l,!1,null,null,null),O=V.exports;b()(V,{VBtn:$["a"],VCard:y["a"],VCardSubtitle:g["a"],VCardTitle:g["c"],VFlex:C["a"],VIcon:I["a"],VImg:T["a"],VLayout:M["a"]});var R={components:{ListviewItem:n["a"],InfoHeader:O},props:{media_id:String,provider:String,media_type:String},data:function(){return{itemDetails:{},items:[],activeTab:0,tabs:[]}},created:function(){this.$server.$on("refresh_listing",this.retrieveInfos),"artists"===this.media_type?this.tabs=[{label:"artist_toptracks",endpoint:"artists/"+this.media_id+"/toptracks",items:[]},{label:"artist_albums",endpoint:"artists/"+this.media_id+"/albums",items:[]}]:"albums"===this.media_type?this.tabs=[{label:"album_tracks",endpoint:"albums/"+this.media_id+"/tracks",items:[]},{label:"album_versions",endpoint:"albums/"+this.media_id+"/versions",items:[]}]:"tracks"===this.media_type?this.tabs=[{label:"track_versions",endpoint:"tracks/"+this.media_id+"/versions",items:[]}]:"playlists"===this.media_type&&(this.tabs=[{label:"playlist_tracks",endpoint:"playlists/"+this.media_id+"/tracks",items:[]}]),this.retrieveInfos()},methods:{retrieveInfos:function(){this.getItemDetails();var t=!0,e=!1,i=void 0;try{for(var r,a=this.tabs[Symbol.iterator]();!(t=(r=a.next()).done);t=!0){var s=r.value;this.getTabItems(s)}}catch(n){e=!0,i=n}finally{try{t||null==a.return||a.return()}finally{if(e)throw i}}},getItemDetails:function(){var t=Object(s["a"])(regeneratorRuntime.mark((function t(){var e,i;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return this.$store.loading=!0,e=this.media_type+"/"+this.media_id,t.next=4,this.$server.getData(e,{provider:this.provider});case 4:i=t.sent,this.itemDetails=i,this.$store.windowtitle=i.name,this.$store.loading=!1;case 8:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),getTabItems:function(){var t=Object(s["a"])(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.abrupt("return",this.$server.getAllItems(e.endpoint,e.items,{provider:this.provider}));case 1:case"end":return t.stop()}}),t,this)})));function e(e){return t.apply(this,arguments)}return e}()}},j=R,L=(i("78fa"),i("8860")),q=i("71a3"),A=i("c671"),P=i("fe57"),B=Object(h["a"])(j,r,a,!1,null,"b744953c",null);e["default"]=B.exports;b()(B,{VCard:y["a"],VList:L["a"],VTab:q["a"],VTabItem:A["a"],VTabs:P["a"]})},"78fa":function(t,e,i){"use strict";var r=i("0d8f"),a=i.n(r);a.a},"85fe":function(t,e,i){"use strict";(function(t){function i(t){return i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,i){return e&&a(t.prototype,e),i&&a(t,i),t}function n(t){return o(t)||l(t)||c()}function o(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e<t.length;e++)i[e]=t[e];return i}}function l(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function c(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function u(t){var e;return e="function"===typeof t?{callback:t}:t,e}function d(t,e){var i,r,a,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=function(o){for(var l=arguments.length,c=new Array(l>1?l-1:0),u=1;u<l;u++)c[u-1]=arguments[u];if(a=c,!i||o!==r){var d=s.leading;"function"===typeof d&&(d=d(o,r)),i&&o===r||!d||t.apply(void 0,[o].concat(n(a))),r=o,clearTimeout(i),i=setTimeout((function(){t.apply(void 0,[o].concat(n(a))),i=0}),e)}};return o._clear=function(){clearTimeout(i),i=null},o}function v(t,e){if(t===e)return!0;if("object"===i(t)){for(var r in t)if(!v(t[r],e[r]))return!1;return!0}return!1}var m=function(){function t(e,i,a){r(this,t),this.el=e,this.observer=null,this.frozen=!1,this.createObserver(i,a)}return s(t,[{key:"createObserver",value:function(t,e){var i=this;if(this.observer&&this.destroyObserver(),!this.frozen){if(this.options=u(t),this.callback=function(t,e){i.options.callback(t,e),t&&i.options.once&&(i.frozen=!0,i.destroyObserver())},this.callback&&this.options.throttle){var r=this.options.throttleOptions||{},a=r.leading;this.callback=d(this.callback,this.options.throttle,{leading:function(t){return"both"===a||"visible"===a&&t||"hidden"===a&&!t}})}this.oldResult=void 0,this.observer=new IntersectionObserver((function(t){var e=t[0];if(t.length>1){var r=t.find((function(t){return t.isIntersecting}));r&&(e=r)}if(i.callback){var a=e.isIntersecting&&e.intersectionRatio>=i.threshold;if(a===i.oldResult)return;i.oldResult=a,i.callback(a,e)}}),this.options.intersection),e.context.$nextTick((function(){i.observer&&i.observer.observe(i.el)}))}}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&this.options.intersection.threshold||0}}]),t}();function f(t,e,i){var r=e.value;if(r)if("undefined"===typeof IntersectionObserver);else{var a=new m(t,r,i);t._vue_visibilityState=a}}function h(t,e,i){var r=e.value,a=e.oldValue;if(!v(r,a)){var s=t._vue_visibilityState;r?s?s.createObserver(r,i):f(t,{value:r},i):p(t)}}function p(t){var e=t._vue_visibilityState;e&&(e.destroyObserver(),delete t._vue_visibilityState)}var b={bind:f,update:h,unbind:p};function y(t){t.directive("observe-visibility",b)}var g={version:"0.4.6",install:y},_=null;"undefined"!==typeof window?_=window.Vue:"undefined"!==typeof t&&(_=t.Vue),_&&_.use(g),e["a"]=g}).call(this,i("c8ba"))},abd2:function(t,e,i){t.exports=i.p+"img/info_gradient.4db55f47.jpg"}}]);
+//# sourceMappingURL=itemdetails.46a862f8.js.map
\ No newline at end of file
--- /dev/null
+{"version":3,"sources":["webpack:///./src/views/ItemDetails.vue?48e6","webpack:///./src/components/InfoHeader.vue?bac8","webpack:///./src/components/ReadMore.vue?63dc","webpack:///src/components/ReadMore.vue","webpack:///./src/components/ReadMore.vue?6444","webpack:///./src/components/ReadMore.vue","webpack:///src/components/InfoHeader.vue","webpack:///./src/components/InfoHeader.vue?296b","webpack:///./src/components/InfoHeader.vue","webpack:///src/views/ItemDetails.vue","webpack:///./src/views/ItemDetails.vue?f452","webpack:///./src/views/ItemDetails.vue?6249","webpack:///./src/views/ItemDetails.vue?7068","webpack:///./node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack:///./src/assets/info_gradient.jpg"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","itemDetails","model","value","callback","$$v","activeTab","expression","_l","tab","key","label","_v","_s","$t","items","length","staticClass","scopedSlots","_u","fn","ref","item","$store","isMobile","media_type","staticRenderFns","directives","name","rawName","staticStyle","$server","getImageUrl","_e","version","artist","artistindex","db_id","on","$event","artistClick","artists","owner","albumClick","album","$emit","in_library","toggleLibrary","getDescription","provider_ids","domProps","formattedString","triggerReadMore","isReadMore","text","props","lessStr","type","String","default","required","link","maxChars","Number","data","computed","valContainer","substring","mounted","methods","e","preventDefault","b","component","VCard","VCardText","VDialog","components","ProviderIcons","ReadMore","created","topBarTransparent","beforeDestroy","topBarContextItem","watch","val","visibilityChanged","isVisible","url","item_id","$router","push","desc","metadata","description","biography","copyright","forEach","getQualityInfo","getUniqueProviders","keys","qualities","providerIds","sortedItemIds","sort","VBtn","VCardSubtitle","VCardTitle","VFlex","VIcon","VImg","VLayout","ListviewItem","InfoHeader","media_id","provider","tabs","$on","retrieveInfos","getItemDetails","VList","VTab","VTabItem","VTabs","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","i","descriptor","enumerable","configurable","writable","Object","defineProperty","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","Array","isArray","arr2","iter","toString","call","from","processOptions","options","throttle","delay","timeout","lastState","currentArgs","arguments","undefined","throttled","state","_len","args","_key","leading","apply","concat","clearTimeout","setTimeout","_clear","deepEqual","val1","val2","VisibilityState","el","vnode","observer","frozen","createObserver","_this","destroyObserver","result","entry","once","_ref","throttleOptions","_leading","oldResult","IntersectionObserver","entries","intersectingEntry","find","isIntersecting","intersectionRatio","threshold","intersection","context","$nextTick","observe","disconnect","get","bind","_ref2","_vue_visibilityState","update","_ref3","oldValue","unbind","ObserveVisibility","install","Vue","directive","plugin","GlobalVue","window","global","use","module","exports"],"mappings":"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","file":"js/itemdetails.46a862f8.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('InfoHeader',{attrs:{\"itemDetails\":_vm.itemDetails}}),_c('v-tabs',{attrs:{\"grow\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_vm._l((_vm.tabs),function(tab){return _c('v-tab',{key:tab.label},[_vm._v(\" \"+_vm._s(_vm.$t(tab.label) + \" (\" + tab.items.length + \")\"))])}),_vm._l((_vm.tabs),function(tab){return _c('v-tab-item',{key:tab.label},[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":tab.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":_vm.$store.isMobile || tab.label === 'album_tracks',\"hidetracknum\":tab.label !== 'album_tracks',\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false}})]}}],null,true)})],1)],1)],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-flex',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.visibilityChanged),expression:\"visibilityChanged\"}]},[_c('v-card',{staticClass:\"white--text\",staticStyle:{\"margin-top\":\"-60px\"},attrs:{\"tile\":\"\",\"color\":\"black\",\"img\":require('../assets/info_gradient.jpg')}},[_c('v-img',{staticClass:\"white--text\",attrs:{\"width\":\"100%\",\"height\":\"300\",\"position\":\"center top\",\"src\":_vm.$server.getImageUrl(_vm.itemDetails, 'fanart'),\"gradient\":\"to bottom, rgba(0,0,0,.90), rgba(0,0,0,.75)\"}},[_c('div',{staticClass:\"text-xs-center\",staticStyle:{\"height\":\"40px\"},attrs:{\"id\":\"whitespace_top\"}}),(_vm.itemDetails)?_c('v-layout',{staticStyle:{\"margin-left\":\"5pxmargin-right:5px\"}},[(!_vm.$store.isMobile)?_c('v-flex',{attrs:{\"xs5\":\"\",\"pa-5\":\"\"}},[_c('v-img',{staticStyle:{\"border\":\"4px solid rgba(0,0,0,.33)\",\"border-radius\":\"6px\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.itemDetails),\"lazy-src\":require('../assets/default_artist.png'),\"width\":\"220px\",\"height\":\"220px\"}})],1):_vm._e(),_c('v-flex',[_c('v-card-title',{staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_vm._v(\" \"+_vm._s(_vm.itemDetails.name)+\" \")]),_c('v-card-subtitle',[(_vm.itemDetails.version)?_c('div',{staticClass:\"caption\",staticStyle:{\"color\":\"white\"}},[_vm._v(\" \"+_vm._s(_vm.itemDetails.version)+\" \")]):_vm._e(),(_vm.itemDetails.artists)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_vm._l((_vm.itemDetails.artists),function(artist,artistindex){return _c('span',{key:artist.db_id},[_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(artist)}}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.itemDetails.artists.length)?_c('span',{key:artistindex,staticStyle:{\"color\":\"#cccccc\"}},[_vm._v(_vm._s(\" / \"))]):_vm._e()])})],2):_vm._e(),(_vm.itemDetails.artist)?_c('div',{staticClass:\"title\"},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(_vm.itemDetails.artist)}}},[_vm._v(_vm._s(_vm.itemDetails.artist.name))])],1):_vm._e(),(_vm.itemDetails.owner)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"}},[_vm._v(_vm._s(_vm.itemDetails.owner))])],1):_vm._e(),(_vm.itemDetails.album)?_c('div',{staticStyle:{\"color\":\"#ffffff\",\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"album\")]),_c('a',{staticStyle:{\"color\":\"#ffffff\"},on:{\"click\":function($event){return _vm.albumClick(_vm.itemDetails.album)}}},[_vm._v(_vm._s(_vm.itemDetails.album.name))])],1):_vm._e()]),_c('div',{staticStyle:{\"margin-left\":\"14px\"}},[_c('v-btn',{attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayMenu', _vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"play_circle_filled\")]),_vm._v(\" \"+_vm._s(_vm.$t(\"play\"))+\" \")],1),(\n !_vm.$store.isMobile &&\n !!_vm.itemDetails.in_library &&\n _vm.itemDetails.in_library.length == 0\n )?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite_border\")]),_vm._v(\" \"+_vm._s(_vm.$t(\"add_library\"))+\" \")],1):_vm._e(),(\n !_vm.$store.isMobile &&\n !!_vm.itemDetails.in_library &&\n _vm.itemDetails.in_library.length > 0\n )?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite\")]),_vm._v(\" \"+_vm._s(_vm.$t(\"remove_library\"))+\" \")],1):_vm._e()],1),_c('v-card-subtitle',{staticClass:\"body-2\"},[_c('div',{staticClass:\"justify-left\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('ReadMore',{attrs:{\"text\":_vm.getDescription(),\"max-chars\":_vm.$store.isMobile ? 140 : 260}})],1)])],1),_c('div',{staticStyle:{\"margin-top\":\"15px\"}},[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.itemDetails.provider_ids,\"height\":25}})],1)],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{staticStyle:{\"color\":\"white\"},domProps:{\"innerHTML\":_vm._s(_vm.formattedString)},on:{\"click\":function($event){return _vm.triggerReadMore($event, true)}}}),_c('v-dialog',{attrs:{\"width\":\"80%\"},model:{value:(_vm.isReadMore),callback:function ($$v) {_vm.isReadMore=$$v},expression:\"isReadMore\"}},[_c('v-card',[_c('v-card-text',{staticClass:\"subheading\",domProps:{\"innerHTML\":_vm._s('<br>' + _vm.text)}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <a style=\"color: white\" v-html=\"formattedString\" @click=\"triggerReadMore($event, true)\"/>\r\n <v-dialog v-model=\"isReadMore\" width=\"80%\">\r\n <v-card>\r\n <v-card-text class=\"subheading\" v-html=\"'<br>' + text\">\r\n </v-card-text>\r\n </v-card>\r\n </v-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n props: {\r\n lessStr: {\r\n type: String,\r\n default: ''\r\n },\r\n text: {\r\n type: String,\r\n required: true\r\n },\r\n link: {\r\n type: String,\r\n default: '#'\r\n },\r\n maxChars: {\r\n type: Number,\r\n default: 100\r\n }\r\n },\r\n data () {\r\n return {\r\n isReadMore: false\r\n }\r\n },\r\n computed: {\r\n formattedString () {\r\n var valContainer = this.text\r\n if (this.text.length > this.maxChars) {\r\n valContainer = valContainer.substring(0, this.maxChars) + '...'\r\n }\r\n return (valContainer)\r\n }\r\n },\r\n mounted () { },\r\n methods: {\r\n triggerReadMore (e, b) {\r\n if (this.link === '#') {\r\n e.preventDefault()\r\n }\r\n if (this.lessStr !== null || this.lessStr !== '') {\r\n this.isReadMore = b\r\n }\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReadMore.vue?vue&type=template&id=702b76f2&\"\nimport script from \"./ReadMore.vue?vue&type=script&lang=js&\"\nexport * from \"./ReadMore.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\ninstallComponents(component, {VCard,VCardText,VDialog})\n","<template>\r\n <v-flex v-observe-visibility=\"visibilityChanged\">\r\n <v-card\r\n tile\r\n color=\"black\"\r\n class=\"white--text\"\r\n :img=\"require('../assets/info_gradient.jpg')\"\r\n style=\"margin-top:-60px;\"\r\n >\r\n <v-img\r\n class=\"white--text\"\r\n width=\"100%\"\r\n height=\"300\"\r\n position=\"center top\"\r\n :src=\"$server.getImageUrl(itemDetails, 'fanart')\"\r\n gradient=\"to bottom, rgba(0,0,0,.90), rgba(0,0,0,.75)\"\r\n >\r\n <div class=\"text-xs-center\" style=\"height:40px;\" id=\"whitespace_top\" />\r\n\r\n <v-layout style=\"margin-left:5pxmargin-right:5px;\" v-if=\"itemDetails\">\r\n <!-- left side: cover image -->\r\n <v-flex xs5 pa-5 v-if=\"!$store.isMobile\">\r\n <v-img\r\n :src=\"$server.getImageUrl(itemDetails)\"\r\n :lazy-src=\"require('../assets/default_artist.png')\"\r\n width=\"220px\"\r\n height=\"220px\"\r\n style=\"border: 4px solid rgba(0,0,0,.33);border-radius: 6px;\"\r\n ></v-img>\r\n </v-flex>\r\n\r\n <v-flex>\r\n <!-- Main title -->\r\n <v-card-title\r\n style=\"text-shadow: 1px 1px #000000;\"\r\n >\r\n {{ itemDetails.name }}\r\n </v-card-title>\r\n\r\n <!-- other details -->\r\n <v-card-subtitle>\r\n <!-- version -->\r\n <div\r\n v-if=\"itemDetails.version\"\r\n class=\"caption\"\r\n style=\"color: white;\"\r\n >\r\n {{ itemDetails.version }}\r\n </div>\r\n\r\n <!-- item artists -->\r\n <div\r\n class=\"title\"\r\n style=\"text-shadow: 1px 1px #000000;\"\r\n v-if=\"itemDetails.artists\"\r\n >\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >person</v-icon\r\n >\r\n <span\r\n v-for=\"(artist, artistindex) in itemDetails.artists\"\r\n :key=\"artist.db_id\"\r\n >\r\n <a style=\"color: primary\" v-on:click=\"artistClick(artist)\">{{\r\n artist.name\r\n }}</a>\r\n <span\r\n style=\"color: #cccccc\"\r\n v-if=\"artistindex + 1 < itemDetails.artists.length\"\r\n :key=\"artistindex\"\r\n >{{ \" / \" }}</span\r\n >\r\n </span>\r\n </div>\r\n\r\n <!-- album artist -->\r\n <div class=\"title\" v-if=\"itemDetails.artist\">\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >person</v-icon\r\n >\r\n <a\r\n style=\"color: primary\"\r\n v-on:click=\"artistClick(itemDetails.artist)\"\r\n >{{ itemDetails.artist.name }}</a\r\n >\r\n </div>\r\n\r\n <!-- playlist owner -->\r\n <div\r\n class=\"title\"\r\n style=\"text-shadow: 1px 1px #000000;\"\r\n v-if=\"itemDetails.owner\"\r\n >\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >person</v-icon\r\n >\r\n <a style=\"color:primary\">{{ itemDetails.owner }}</a>\r\n </div>\r\n\r\n <div\r\n v-if=\"itemDetails.album\"\r\n style=\"color:#ffffff;text-shadow: 1px 1px #000000;\"\r\n >\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >album</v-icon\r\n >\r\n <a\r\n style=\"color:#ffffff\"\r\n v-on:click=\"albumClick(itemDetails.album)\"\r\n >{{ itemDetails.album.name }}</a\r\n >\r\n </div>\r\n </v-card-subtitle>\r\n\r\n <!-- play/info buttons -->\r\n <div style=\"margin-left:14px;\">\r\n <v-btn\r\n color=\"primary\"\r\n tile\r\n @click=\"$server.$emit('showPlayMenu', itemDetails)\"\r\n >\r\n <v-icon left dark>play_circle_filled</v-icon>\r\n {{ $t(\"play\") }}\r\n </v-btn>\r\n <v-btn\r\n style=\"margin-left:10px;\"\r\n v-if=\"\r\n !$store.isMobile &&\r\n !!itemDetails.in_library &&\r\n itemDetails.in_library.length == 0\r\n \"\r\n color=\"primary\"\r\n tile\r\n @click=\"toggleLibrary(itemDetails)\"\r\n >\r\n <v-icon left dark>favorite_border</v-icon>\r\n {{ $t(\"add_library\") }}\r\n </v-btn>\r\n <v-btn\r\n style=\"margin-left:10px;\"\r\n v-if=\"\r\n !$store.isMobile &&\r\n !!itemDetails.in_library &&\r\n itemDetails.in_library.length > 0\r\n \"\r\n color=\"primary\"\r\n tile\r\n @click=\"toggleLibrary(itemDetails)\"\r\n >\r\n <v-icon left dark>favorite</v-icon>\r\n {{ $t(\"remove_library\") }}\r\n </v-btn>\r\n </div>\r\n\r\n <!-- Description/metadata -->\r\n <v-card-subtitle class=\"body-2\">\r\n <div class=\"justify-left\" style=\"text-shadow: 1px 1px #000000;\">\r\n <ReadMore\r\n :text=\"getDescription()\"\r\n :max-chars=\"$store.isMobile ? 140 : 260\"\r\n />\r\n </div>\r\n </v-card-subtitle>\r\n </v-flex>\r\n <!-- tech specs and provider icons -->\r\n <div style=\"margin-top:15px\">\r\n <ProviderIcons\r\n v-bind:providerIds=\"itemDetails.provider_ids\"\r\n :height=\"25\"\r\n />\r\n </div>\r\n </v-layout>\r\n </v-img>\r\n <!-- <div class=\"text-xs-center\" v-if=\"itemDetails.tags\" style=\"height:30px;margin-top:-8px;margin-left:15px;margin-right:15px;\">\r\n <v-chip small color=\"white\" outlined v-for=\"tag of itemDetails.tags\" :key=\"tag\">{{ tag }}</v-chip>\r\n </div> -->\r\n </v-card>\r\n </v-flex>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ProviderIcons from '@/components/ProviderIcons.vue'\r\nimport ReadMore from '@/components/ReadMore.vue'\r\nimport VueObserveVisibility from 'vue-observe-visibility'\r\nVue.use(VueObserveVisibility)\r\n\r\nexport default Vue.extend({\r\n components: {\r\n ProviderIcons,\r\n ReadMore\r\n },\r\n props: ['itemDetails'],\r\n data () {\r\n return {}\r\n },\r\n mounted () { },\r\n created () {\r\n this.$store.topBarTransparent = true\r\n },\r\n beforeDestroy () {\r\n this.$store.topBarTransparent = false\r\n this.$store.topBarContextItem = null\r\n },\r\n watch: {\r\n itemDetails: function (val) {\r\n // set itemDetails as contextitem\r\n if (val) {\r\n this.$store.topBarContextItem = val\r\n }\r\n }\r\n },\r\n methods: {\r\n visibilityChanged (isVisible, entry) {\r\n if (isVisible) this.$store.topBarTransparent = true\r\n else this.$store.topBarTransparent = false\r\n },\r\n artistClick (item) {\r\n // artist entry clicked\r\n var url = '/artists/' + item.item_id\r\n this.$router.push({ path: url, query: { provider: item.provider } })\r\n },\r\n albumClick (item) {\r\n // album entry clicked\r\n var url = '/albums/' + item.item_id\r\n this.$router.push({ path: url, query: { provider: item.provider } })\r\n },\r\n toggleLibrary (item) {\r\n // library button clicked on item\r\n this.$server.toggleLibrary(item)\r\n },\r\n getDescription () {\r\n var desc = ''\r\n if (!this.itemDetails) return ''\r\n if (this.itemDetails.metadata && this.itemDetails.metadata.description) {\r\n return this.itemDetails.metadata.description\r\n } else if (this.itemDetails.metadata && this.itemDetails.metadata.biography) {\r\n return this.itemDetails.metadata.biography\r\n } else if (this.itemDetails.metadata && this.itemDetails.metadata.copyright) {\r\n return this.itemDetails.metadata.copyright\r\n } else if (this.itemDetails.artists) {\r\n this.itemDetails.artists.forEach(function (artist) {\r\n if (artist.metadata && artist.metadata.biography) {\r\n desc = artist.metadata.biography\r\n }\r\n })\r\n }\r\n return desc\r\n },\r\n getQualityInfo () {\r\n\r\n },\r\n getUniqueProviders () {\r\n var keys = []\r\n var qualities = []\r\n if (!this.providerIds) return []\r\n let sortedItemIds = this.providerIds.slice()\r\n sortedItemIds.sort((a, b) =>\r\n a.quality < b.quality ? 1 : b.quality < a.quality ? -1 : 0\r\n )\r\n for (var item of sortedItemIds) {\r\n if (!keys.includes(item.provider)) {\r\n qualities.push(item)\r\n keys.push(item.provider)\r\n }\r\n }\r\n return qualities\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfoHeader.vue?vue&type=template&id=60030aeb&\"\nimport script from \"./InfoHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./InfoHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardSubtitle,VCardTitle,VFlex,VIcon,VImg,VLayout})\n","<template>\n <section>\n <InfoHeader v-bind:itemDetails=\"itemDetails\" />\n <v-tabs grow show-arrows v-model=\"activeTab\">\n <v-tab v-for=\"tab in tabs\" :key=\"tab.label\">\n {{ $t(tab.label) + \" (\" + tab.items.length + \")\" }}</v-tab\n >\n <v-tab-item v-for=\"tab in tabs\" :key=\"tab.label\">\n <v-card flat>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"tab.items\"\n :item-size=\"72\"\n key-field=\"item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"$store.isMobile || tab.label === 'album_tracks'\"\n :hidetracknum=\"tab.label !== 'album_tracks'\"\n :hideproviders=\"$store.isMobile\"\n :hidelibrary=\"$store.isMobile\"\n :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </v-card>\n </v-tab-item>\n </v-tabs>\n </section>\n</template>\n\n<style scoped>\n.scroller {\n height: 100%;\n}\n</style>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\nimport InfoHeader from '@/components/InfoHeader.vue'\n\nexport default {\n components: {\n ListviewItem,\n InfoHeader\n },\n props: {\n media_id: String,\n provider: String,\n media_type: String\n },\n data () {\n return {\n itemDetails: {},\n items: [],\n activeTab: 0,\n tabs: []\n }\n },\n created () {\n this.$server.$on('refresh_listing', this.retrieveInfos)\n if (this.media_type === 'artists') {\n // artist details\n this.tabs = [\n {\n label: 'artist_toptracks',\n endpoint: 'artists/' + this.media_id + '/toptracks',\n items: []\n },\n {\n label: 'artist_albums',\n endpoint: 'artists/' + this.media_id + '/albums',\n items: []\n }\n ]\n } else if (this.media_type === 'albums') {\n // album details\n this.tabs = [\n {\n label: 'album_tracks',\n endpoint: 'albums/' + this.media_id + '/tracks',\n items: []\n },\n {\n label: 'album_versions',\n endpoint: 'albums/' + this.media_id + '/versions',\n items: []\n }\n ]\n } else if (this.media_type === 'tracks') {\n // track details\n this.tabs = [\n {\n label: 'track_versions',\n endpoint: 'tracks/' + this.media_id + '/versions',\n items: []\n }\n ]\n } else if (this.media_type === 'playlists') {\n // playlist details\n this.tabs = [\n {\n label: 'playlist_tracks',\n endpoint: 'playlists/' + this.media_id + '/tracks',\n items: []\n }\n ]\n }\n this.retrieveInfos()\n },\n methods: {\n retrieveInfos () {\n // retrieve the item details\n this.getItemDetails()\n // retrieve the tabs with additional details\n for (var tab of this.tabs) {\n this.getTabItems(tab)\n }\n },\n async getItemDetails () {\n // get the full details for the mediaitem\n this.$store.loading = true\n const endpoint = this.media_type + '/' + this.media_id\n let result = await this.$server.getData(endpoint, { provider: this.provider })\n this.itemDetails = result\n this.$store.windowtitle = result.name\n this.$store.loading = false\n },\n async getTabItems (tab) {\n // retrieve the lists of items for each tab\n return this.$server.getAllItems(tab.endpoint, tab.items, { provider: this.provider })\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ItemDetails.vue?vue&type=template&id=b744953c&scoped=true&\"\nimport script from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemDetails.vue?vue&type=style&index=0&id=b744953c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b744953c\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VCard,VList,VTab,VTabItem,VTabs})\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=b744953c&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=b744953c&scoped=true&lang=css&\"","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n var options;\n\n if (typeof value === 'function') {\n // Simple options (callback-only)\n options = {\n callback: value\n };\n } else {\n // Options object\n options = value;\n }\n\n return options;\n}\nfunction throttle(callback, delay) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout;\n var lastState;\n var currentArgs;\n\n var throttled = function throttled(state) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n currentArgs = args;\n if (timeout && state === lastState) return;\n var leading = options.leading;\n\n if (typeof leading === 'function') {\n leading = leading(state, lastState);\n }\n\n if ((!timeout || state !== lastState) && leading) {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n }\n\n lastState = state;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n timeout = 0;\n }, delay);\n };\n\n throttled._clear = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return throttled;\n}\nfunction deepEqual(val1, val2) {\n if (val1 === val2) return true;\n\n if (_typeof(val1) === 'object') {\n for (var key in val1) {\n if (!deepEqual(val1[key], val2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n function VisibilityState(el, options, vnode) {\n _classCallCheck(this, VisibilityState);\n\n this.el = el;\n this.observer = null;\n this.frozen = false;\n this.createObserver(options, vnode);\n }\n\n _createClass(VisibilityState, [{\n key: \"createObserver\",\n value: function createObserver(options, vnode) {\n var _this = this;\n\n if (this.observer) {\n this.destroyObserver();\n }\n\n if (this.frozen) return;\n this.options = processOptions(options);\n\n this.callback = function (result, entry) {\n _this.options.callback(result, entry);\n\n if (result && _this.options.once) {\n _this.frozen = true;\n\n _this.destroyObserver();\n }\n }; // Throttle\n\n\n if (this.callback && this.options.throttle) {\n var _ref = this.options.throttleOptions || {},\n _leading = _ref.leading;\n\n this.callback = throttle(this.callback, this.options.throttle, {\n leading: function leading(state) {\n return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n }\n });\n }\n\n this.oldResult = undefined;\n this.observer = new IntersectionObserver(function (entries) {\n var entry = entries[0];\n\n if (entries.length > 1) {\n var intersectingEntry = entries.find(function (e) {\n return e.isIntersecting;\n });\n\n if (intersectingEntry) {\n entry = intersectingEntry;\n }\n }\n\n if (_this.callback) {\n // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n if (result === _this.oldResult) return;\n _this.oldResult = result;\n\n _this.callback(result, entry);\n }\n }, this.options.intersection); // Wait for the element to be in document\n\n vnode.context.$nextTick(function () {\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n } // Cancel throttled call\n\n\n if (this.callback && this.callback._clear) {\n this.callback._clear();\n\n this.callback = null;\n }\n }\n }, {\n key: \"threshold\",\n get: function get() {\n return this.options.intersection && this.options.intersection.threshold || 0;\n }\n }]);\n\n return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n var value = _ref2.value;\n if (!value) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n } else {\n var state = new VisibilityState(el, value, vnode);\n el._vue_visibilityState = state;\n }\n}\n\nfunction update(el, _ref3, vnode) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue;\n if (deepEqual(value, oldValue)) return;\n var state = el._vue_visibilityState;\n\n if (!value) {\n unbind(el);\n return;\n }\n\n if (state) {\n state.createObserver(value, vnode);\n } else {\n bind(el, {\n value: value\n }, vnode);\n }\n}\n\nfunction unbind(el) {\n var state = el._vue_visibilityState;\n\n if (state) {\n state.destroyObserver();\n delete el._vue_visibilityState;\n }\n}\n\nvar ObserveVisibility = {\n bind: bind,\n update: update,\n unbind: unbind\n};\n\nfunction install(Vue) {\n Vue.directive('observe-visibility', ObserveVisibility);\n /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"0.4.6\",\n install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","module.exports = __webpack_public_path__ + \"img/info_gradient.4db55f47.jpg\";"],"sourceRoot":""}
\ No newline at end of file
+++ /dev/null
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["itemdetails"],{"027a":function(t,e,i){},"20ea":function(t,e,i){"use strict";var r=i("027a"),a=i.n(r);a.a},"32a2":function(t,e,i){"use strict";i.r(e);var r=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",[i("InfoHeader",{attrs:{itemDetails:t.itemDetails}}),i("v-tabs",{attrs:{grow:"","show-arrows":""},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[t._l(t.tabs,(function(e){return i("v-tab",{key:e.label},[t._v(" "+t._s(t.$t(e.label)+" ("+e.items.length+")"))])})),t._l(t.tabs,(function(e){return i("v-tab-item",{key:e.label},[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:t._u([{key:"default",fn:function(r){var a=r.item;return[i("ListviewItem",{attrs:{item:a,hideavatar:t.$store.isMobile||"album_tracks"===e.label,hidetracknum:"album_tracks"!==e.label,hideproviders:t.$store.isMobile,hidelibrary:t.$store.isMobile,hidemenu:3==a.media_type&&t.$store.isMobile}})]}}],null,!0)})],1)],1)],1)}))],2)],1)},a=[],s=(i("a4d3"),i("e01a"),i("d28b"),i("b0c0"),i("d3b7"),i("3ca3"),i("ddb0"),i("96cf"),i("89ba")),n=i("d3cc"),o=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("v-flex",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:t.visibilityChanged,expression:"visibilityChanged"}]},[r("v-card",{staticClass:"white--text",staticStyle:{"margin-top":"-60px"},attrs:{tile:"",color:"black",img:i("abd2")}},[r("v-img",{staticClass:"white--text",attrs:{width:"100%",height:"300",position:"center top",src:t.$server.getImageUrl(t.itemDetails,"fanart"),gradient:"to bottom, rgba(0,0,0,.90), rgba(0,0,0,.75)"}},[r("div",{staticClass:"text-xs-center",staticStyle:{height:"40px"},attrs:{id:"whitespace_top"}}),t.itemDetails?r("v-layout",{staticStyle:{"margin-left":"5pxmargin-right:5px"}},[t.$store.isMobile?t._e():r("v-flex",{attrs:{xs5:"","pa-5":""}},[r("v-img",{staticStyle:{border:"4px solid rgba(0,0,0,.33)","border-radius":"6px"},attrs:{src:t.$server.getImageUrl(t.itemDetails),"lazy-src":i("4bfb"),width:"220px",height:"220px"}})],1),r("v-flex",[r("v-card-title",{staticStyle:{"text-shadow":"1px 1px #000000"}},[t._v(" "+t._s(t.itemDetails.name)+" ")]),r("v-card-subtitle",[t.itemDetails.version?r("div",{staticClass:"caption",staticStyle:{color:"white"}},[t._v(" "+t._s(t.itemDetails.version)+" ")]):t._e(),t.itemDetails.artists?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),t._l(t.itemDetails.artists,(function(e,i){return r("span",{key:e.db_id},[r("a",{staticStyle:{color:"primary"},on:{click:function(i){return t.artistClick(e)}}},[t._v(t._s(e.name))]),i+1<t.itemDetails.artists.length?r("span",{key:i,staticStyle:{color:"#cccccc"}},[t._v(t._s(" / "))]):t._e()])}))],2):t._e(),t.itemDetails.artist?r("div",{staticClass:"title"},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"},on:{click:function(e){return t.artistClick(t.itemDetails.artist)}}},[t._v(t._s(t.itemDetails.artist.name))])],1):t._e(),t.itemDetails.owner?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"}},[t._v(t._s(t.itemDetails.owner))])],1):t._e(),t.itemDetails.album?r("div",{staticStyle:{color:"#ffffff","text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("album")]),r("a",{staticStyle:{color:"#ffffff"},on:{click:function(e){return t.albumClick(t.itemDetails.album)}}},[t._v(t._s(t.itemDetails.album.name))])],1):t._e()]),r("div",{staticStyle:{"margin-left":"14px"}},[r("v-btn",{attrs:{color:"primary",tile:""},on:{click:function(e){return t.$server.$emit("showPlayMenu",t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("play_circle_filled")]),t._v(" "+t._s(t.$t("play"))+" ")],1),!t.$store.isMobile&&t.itemDetails.in_library&&0==t.itemDetails.in_library.length?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite_border")]),t._v(" "+t._s(t.$t("add_library"))+" ")],1):t._e(),!t.$store.isMobile&&t.itemDetails.in_library&&t.itemDetails.in_library.length>0?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite")]),t._v(" "+t._s(t.$t("remove_library"))+" ")],1):t._e()],1),r("v-card-subtitle",{staticClass:"body-2"},[r("div",{staticClass:"justify-left",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("ReadMore",{attrs:{text:t.getDescription(),"max-chars":t.$store.isMobile?140:260}})],1)])],1),r("div",{staticStyle:{"margin-top":"15px"}},[r("ProviderIcons",{attrs:{providerIds:t.itemDetails.provider_ids,height:25}})],1)],1):t._e()],1)],1)],1)},l=[],c=(i("4160"),i("caad"),i("fb6a"),i("4e827"),i("159b"),i("2b0e")),u=i("e00a"),d=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("a",{staticStyle:{color:"white"},domProps:{innerHTML:t._s(t.formattedString)},on:{click:function(e){return t.triggerReadMore(e,!0)}}}),i("v-dialog",{attrs:{width:"80%"},model:{value:t.isReadMore,callback:function(e){t.isReadMore=e},expression:"isReadMore"}},[i("v-card",[i("v-card-text",{staticClass:"subheading",domProps:{innerHTML:t._s("<br>"+t.text)}})],1)],1)],1)},v=[],m=(i("a9e3"),i("9911"),c["a"].extend({props:{lessStr:{type:String,default:""},text:{type:String,required:!0},link:{type:String,default:"#"},maxChars:{type:Number,default:100}},data:function(){return{isReadMore:!1}},computed:{formattedString:function(){var t=this.text;return this.text.length>this.maxChars&&(t=t.substring(0,this.maxChars)+"..."),t}},mounted:function(){},methods:{triggerReadMore:function(t,e){"#"===this.link&&t.preventDefault(),null===this.lessStr&&""===this.lessStr||(this.isReadMore=e)}}})),f=m,p=i("2877"),h=i("6544"),b=i.n(h),y=i("b0af"),g=i("99d9"),_=i("169a"),x=Object(p["a"])(f,d,v,!1,null,null,null),k=x.exports;b()(x,{VCard:y["a"],VCardText:g["b"],VDialog:_["a"]});var w=i("85fe");c["a"].use(w["a"]);var D=c["a"].extend({components:{ProviderIcons:u["a"],ReadMore:k},props:["itemDetails"],data:function(){return{}},mounted:function(){},created:function(){this.$store.topBarTransparent=!0},beforeDestroy:function(){this.$store.topBarTransparent=!1,this.$store.topBarContextItem=null},watch:{itemDetails:function(t){t&&(this.$store.topBarContextItem=t)}},methods:{visibilityChanged:function(t,e){this.$store.topBarTransparent=!!t},artistClick:function(t){var e="/artists/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},albumClick:function(t){var e="/albums/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},toggleLibrary:function(t){this.$server.toggleLibrary(t)},getDescription:function(){var t="";return this.itemDetails?this.itemDetails.metadata&&this.itemDetails.metadata.description?this.itemDetails.metadata.description:this.itemDetails.metadata&&this.itemDetails.metadata.biography?this.itemDetails.metadata.biography:this.itemDetails.metadata&&this.itemDetails.metadata.copyright?this.itemDetails.metadata.copyright:(this.itemDetails.artists&&this.itemDetails.artists.forEach((function(e){e.metadata&&e.metadata.biography&&(t=e.metadata.biography)})),t):""},getUniqueProviders:function(){var t=[],e=[];if(!this.providerIds)return[];var i=this.providerIds.slice();i.sort((function(t,e){return t.quality<e.quality?1:e.quality<t.quality?-1:0}));var r=!0,a=!1,s=void 0;try{for(var n,o=i[Symbol.iterator]();!(r=(n=o.next()).done);r=!0){var l=n.value;t.includes(l.provider)||(e.push(l),t.push(l.provider))}}catch(c){a=!0,s=c}finally{try{r||null==o.return||o.return()}finally{if(a)throw s}}return e},getFileFormatLogo:function(t){return 0===t.quality?"mp3.png":1===t.quality?"vorbis.png":2===t.quality?"aac.png":t.quality>2?"flac.png":void 0},getFileFormatDesc:function(t){var e="";return t.details&&(e+=" "+t.details),e}}}),S=D,$=i("8336"),C=i("0e8f"),I=i("132d"),T=i("adda"),M=i("a722"),V=Object(p["a"])(S,o,l,!1,null,null,null),O=V.exports;b()(V,{VBtn:$["a"],VCard:y["a"],VCardSubtitle:g["a"],VCardTitle:g["c"],VFlex:C["a"],VIcon:I["a"],VImg:T["a"],VLayout:M["a"]});var R={components:{ListviewItem:n["a"],InfoHeader:O},props:{media_id:String,provider:String,media_type:String},data:function(){return{itemDetails:{},items:[],activeTab:0,tabs:[]}},created:function(){this.$server.$on("refresh_listing",this.retrieveInfos),"artists"===this.media_type?this.tabs=[{label:"artist_toptracks",endpoint:"artists/"+this.media_id+"/toptracks",items:[]},{label:"artist_albums",endpoint:"artists/"+this.media_id+"/albums",items:[]}]:"albums"===this.media_type?this.tabs=[{label:"album_tracks",endpoint:"albums/"+this.media_id+"/tracks",items:[]},{label:"album_versions",endpoint:"albums/"+this.media_id+"/versions",items:[]}]:"tracks"===this.media_type?this.tabs=[{label:"track_versions",endpoint:"tracks/"+this.media_id+"/versions",items:[]}]:"playlists"===this.media_type&&(this.tabs=[{label:"playlist_tracks",endpoint:"playlists/"+this.media_id+"/tracks",items:[]}]),this.retrieveInfos()},beforeDestroy:function(){this.$server.$off("refresh_listing")},methods:{retrieveInfos:function(){this.getItemDetails();var t=!0,e=!1,i=void 0;try{for(var r,a=this.tabs[Symbol.iterator]();!(t=(r=a.next()).done);t=!0){var s=r.value;this.getTabItems(s)}}catch(n){e=!0,i=n}finally{try{t||null==a.return||a.return()}finally{if(e)throw i}}},getItemDetails:function(){var t=Object(s["a"])(regeneratorRuntime.mark((function t(){var e,i;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return this.$store.loading=!0,e=this.media_type+"/"+this.media_id,t.next=4,this.$server.getData(e,{provider:this.provider});case 4:i=t.sent,this.itemDetails=i,this.$store.windowtitle=i.name,this.$store.loading=!1;case 8:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),getTabItems:function(){var t=Object(s["a"])(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.abrupt("return",this.$server.getAllItems(e.endpoint,e.items,{provider:this.provider}));case 1:case"end":return t.stop()}}),t,this)})));function e(e){return t.apply(this,arguments)}return e}()}},j=R,q=(i("20ea"),i("8860")),L=i("71a3"),A=i("c671"),P=i("fe57"),B=Object(p["a"])(j,r,a,!1,null,"d414543e",null);e["default"]=B.exports;b()(B,{VCard:y["a"],VList:q["a"],VTab:L["a"],VTabItem:A["a"],VTabs:P["a"]})},"85fe":function(t,e,i){"use strict";(function(t){function i(t){return i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,i){return e&&a(t.prototype,e),i&&a(t,i),t}function n(t){return o(t)||l(t)||c()}function o(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e<t.length;e++)i[e]=t[e];return i}}function l(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function c(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function u(t){var e;return e="function"===typeof t?{callback:t}:t,e}function d(t,e){var i,r,a,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=function(o){for(var l=arguments.length,c=new Array(l>1?l-1:0),u=1;u<l;u++)c[u-1]=arguments[u];if(a=c,!i||o!==r){var d=s.leading;"function"===typeof d&&(d=d(o,r)),i&&o===r||!d||t.apply(void 0,[o].concat(n(a))),r=o,clearTimeout(i),i=setTimeout((function(){t.apply(void 0,[o].concat(n(a))),i=0}),e)}};return o._clear=function(){clearTimeout(i),i=null},o}function v(t,e){if(t===e)return!0;if("object"===i(t)){for(var r in t)if(!v(t[r],e[r]))return!1;return!0}return!1}var m=function(){function t(e,i,a){r(this,t),this.el=e,this.observer=null,this.frozen=!1,this.createObserver(i,a)}return s(t,[{key:"createObserver",value:function(t,e){var i=this;if(this.observer&&this.destroyObserver(),!this.frozen){if(this.options=u(t),this.callback=function(t,e){i.options.callback(t,e),t&&i.options.once&&(i.frozen=!0,i.destroyObserver())},this.callback&&this.options.throttle){var r=this.options.throttleOptions||{},a=r.leading;this.callback=d(this.callback,this.options.throttle,{leading:function(t){return"both"===a||"visible"===a&&t||"hidden"===a&&!t}})}this.oldResult=void 0,this.observer=new IntersectionObserver((function(t){var e=t[0];if(t.length>1){var r=t.find((function(t){return t.isIntersecting}));r&&(e=r)}if(i.callback){var a=e.isIntersecting&&e.intersectionRatio>=i.threshold;if(a===i.oldResult)return;i.oldResult=a,i.callback(a,e)}}),this.options.intersection),e.context.$nextTick((function(){i.observer&&i.observer.observe(i.el)}))}}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&this.options.intersection.threshold||0}}]),t}();function f(t,e,i){var r=e.value;if(r)if("undefined"===typeof IntersectionObserver);else{var a=new m(t,r,i);t._vue_visibilityState=a}}function p(t,e,i){var r=e.value,a=e.oldValue;if(!v(r,a)){var s=t._vue_visibilityState;r?s?s.createObserver(r,i):f(t,{value:r},i):h(t)}}function h(t){var e=t._vue_visibilityState;e&&(e.destroyObserver(),delete t._vue_visibilityState)}var b={bind:f,update:p,unbind:h};function y(t){t.directive("observe-visibility",b)}var g={version:"0.4.6",install:y},_=null;"undefined"!==typeof window?_=window.Vue:"undefined"!==typeof t&&(_=t.Vue),_&&_.use(g),e["a"]=g}).call(this,i("c8ba"))},abd2:function(t,e,i){t.exports=i.p+"img/info_gradient.4db55f47.jpg"}}]);
-//# sourceMappingURL=itemdetails.f383b9f8.js.map
\ No newline at end of file
+++ /dev/null
-{"version":3,"sources":["webpack:///./src/views/ItemDetails.vue?1dfd","webpack:///./src/views/ItemDetails.vue?94ea","webpack:///./src/components/InfoHeader.vue?e188","webpack:///./src/components/ReadMore.vue?63dc","webpack:///src/components/ReadMore.vue","webpack:///./src/components/ReadMore.vue?6444","webpack:///./src/components/ReadMore.vue","webpack:///src/components/InfoHeader.vue","webpack:///./src/components/InfoHeader.vue?296b","webpack:///./src/components/InfoHeader.vue","webpack:///src/views/ItemDetails.vue","webpack:///./src/views/ItemDetails.vue?f452","webpack:///./src/views/ItemDetails.vue?6249","webpack:///./node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack:///./src/assets/info_gradient.jpg"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","itemDetails","model","value","callback","$$v","activeTab","expression","_l","tab","key","label","_v","_s","$t","items","length","staticClass","scopedSlots","_u","fn","ref","item","$store","isMobile","media_type","staticRenderFns","directives","name","rawName","staticStyle","$server","getImageUrl","_e","version","artist","artistindex","db_id","on","$event","artistClick","artists","owner","albumClick","album","$emit","in_library","toggleLibrary","getDescription","provider_ids","domProps","formattedString","triggerReadMore","isReadMore","text","props","lessStr","type","String","default","required","link","maxChars","Number","data","computed","valContainer","substring","mounted","methods","e","preventDefault","b","component","VCard","VCardText","VDialog","components","ProviderIcons","ReadMore","created","topBarTransparent","beforeDestroy","topBarContextItem","watch","val","visibilityChanged","isVisible","url","item_id","$router","push","desc","metadata","description","biography","copyright","forEach","getUniqueProviders","keys","qualities","providerIds","sortedItemIds","sort","getFileFormatLogo","provider","quality","getFileFormatDesc","details","VBtn","VCardSubtitle","VCardTitle","VFlex","VIcon","VImg","VLayout","ListviewItem","InfoHeader","media_id","tabs","$on","retrieveInfos","$off","getItemDetails","VList","VTab","VTabItem","VTabs","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","i","descriptor","enumerable","configurable","writable","Object","defineProperty","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","Array","isArray","arr2","iter","toString","call","from","processOptions","options","throttle","delay","timeout","lastState","currentArgs","arguments","undefined","throttled","state","_len","args","_key","leading","apply","concat","clearTimeout","setTimeout","_clear","deepEqual","val1","val2","VisibilityState","el","vnode","observer","frozen","createObserver","_this","destroyObserver","result","entry","once","_ref","throttleOptions","_leading","oldResult","IntersectionObserver","entries","intersectingEntry","find","isIntersecting","intersectionRatio","threshold","intersection","context","$nextTick","observe","disconnect","get","bind","_ref2","_vue_visibilityState","update","_ref3","oldValue","unbind","ObserveVisibility","install","Vue","directive","plugin","GlobalVue","window","global","use","module","exports"],"mappings":"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","file":"js/itemdetails.f383b9f8.js","sourcesContent":["import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=d414543e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=d414543e&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('InfoHeader',{attrs:{\"itemDetails\":_vm.itemDetails}}),_c('v-tabs',{attrs:{\"grow\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_vm._l((_vm.tabs),function(tab){return _c('v-tab',{key:tab.label},[_vm._v(\" \"+_vm._s(_vm.$t(tab.label) + \" (\" + tab.items.length + \")\"))])}),_vm._l((_vm.tabs),function(tab){return _c('v-tab-item',{key:tab.label},[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":tab.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":_vm.$store.isMobile || tab.label === 'album_tracks',\"hidetracknum\":tab.label !== 'album_tracks',\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false}})]}}],null,true)})],1)],1)],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-flex',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.visibilityChanged),expression:\"visibilityChanged\"}]},[_c('v-card',{staticClass:\"white--text\",staticStyle:{\"margin-top\":\"-60px\"},attrs:{\"tile\":\"\",\"color\":\"black\",\"img\":require('../assets/info_gradient.jpg')}},[_c('v-img',{staticClass:\"white--text\",attrs:{\"width\":\"100%\",\"height\":\"300\",\"position\":\"center top\",\"src\":_vm.$server.getImageUrl(_vm.itemDetails, 'fanart'),\"gradient\":\"to bottom, rgba(0,0,0,.90), rgba(0,0,0,.75)\"}},[_c('div',{staticClass:\"text-xs-center\",staticStyle:{\"height\":\"40px\"},attrs:{\"id\":\"whitespace_top\"}}),(_vm.itemDetails)?_c('v-layout',{staticStyle:{\"margin-left\":\"5pxmargin-right:5px\"}},[(!_vm.$store.isMobile)?_c('v-flex',{attrs:{\"xs5\":\"\",\"pa-5\":\"\"}},[_c('v-img',{staticStyle:{\"border\":\"4px solid rgba(0,0,0,.33)\",\"border-radius\":\"6px\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.itemDetails),\"lazy-src\":require('../assets/default_artist.png'),\"width\":\"220px\",\"height\":\"220px\"}})],1):_vm._e(),_c('v-flex',[_c('v-card-title',{staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_vm._v(\" \"+_vm._s(_vm.itemDetails.name)+\" \")]),_c('v-card-subtitle',[(_vm.itemDetails.version)?_c('div',{staticClass:\"caption\",staticStyle:{\"color\":\"white\"}},[_vm._v(\" \"+_vm._s(_vm.itemDetails.version)+\" \")]):_vm._e(),(_vm.itemDetails.artists)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_vm._l((_vm.itemDetails.artists),function(artist,artistindex){return _c('span',{key:artist.db_id},[_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(artist)}}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.itemDetails.artists.length)?_c('span',{key:artistindex,staticStyle:{\"color\":\"#cccccc\"}},[_vm._v(_vm._s(\" / \"))]):_vm._e()])})],2):_vm._e(),(_vm.itemDetails.artist)?_c('div',{staticClass:\"title\"},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(_vm.itemDetails.artist)}}},[_vm._v(_vm._s(_vm.itemDetails.artist.name))])],1):_vm._e(),(_vm.itemDetails.owner)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"}},[_vm._v(_vm._s(_vm.itemDetails.owner))])],1):_vm._e(),(_vm.itemDetails.album)?_c('div',{staticStyle:{\"color\":\"#ffffff\",\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"album\")]),_c('a',{staticStyle:{\"color\":\"#ffffff\"},on:{\"click\":function($event){return _vm.albumClick(_vm.itemDetails.album)}}},[_vm._v(_vm._s(_vm.itemDetails.album.name))])],1):_vm._e()]),_c('div',{staticStyle:{\"margin-left\":\"14px\"}},[_c('v-btn',{attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayMenu', _vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"play_circle_filled\")]),_vm._v(\" \"+_vm._s(_vm.$t(\"play\"))+\" \")],1),(\n !_vm.$store.isMobile &&\n !!_vm.itemDetails.in_library &&\n _vm.itemDetails.in_library.length == 0\n )?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite_border\")]),_vm._v(\" \"+_vm._s(_vm.$t(\"add_library\"))+\" \")],1):_vm._e(),(\n !_vm.$store.isMobile &&\n !!_vm.itemDetails.in_library &&\n _vm.itemDetails.in_library.length > 0\n )?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite\")]),_vm._v(\" \"+_vm._s(_vm.$t(\"remove_library\"))+\" \")],1):_vm._e()],1),_c('v-card-subtitle',{staticClass:\"body-2\"},[_c('div',{staticClass:\"justify-left\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('ReadMore',{attrs:{\"text\":_vm.getDescription(),\"max-chars\":_vm.$store.isMobile ? 140 : 260}})],1)])],1),_c('div',{staticStyle:{\"margin-top\":\"15px\"}},[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.itemDetails.provider_ids,\"height\":25}})],1)],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{staticStyle:{\"color\":\"white\"},domProps:{\"innerHTML\":_vm._s(_vm.formattedString)},on:{\"click\":function($event){return _vm.triggerReadMore($event, true)}}}),_c('v-dialog',{attrs:{\"width\":\"80%\"},model:{value:(_vm.isReadMore),callback:function ($$v) {_vm.isReadMore=$$v},expression:\"isReadMore\"}},[_c('v-card',[_c('v-card-text',{staticClass:\"subheading\",domProps:{\"innerHTML\":_vm._s('<br>' + _vm.text)}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <a style=\"color: white\" v-html=\"formattedString\" @click=\"triggerReadMore($event, true)\"/>\r\n <v-dialog v-model=\"isReadMore\" width=\"80%\">\r\n <v-card>\r\n <v-card-text class=\"subheading\" v-html=\"'<br>' + text\">\r\n </v-card-text>\r\n </v-card>\r\n </v-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n props: {\r\n lessStr: {\r\n type: String,\r\n default: ''\r\n },\r\n text: {\r\n type: String,\r\n required: true\r\n },\r\n link: {\r\n type: String,\r\n default: '#'\r\n },\r\n maxChars: {\r\n type: Number,\r\n default: 100\r\n }\r\n },\r\n data () {\r\n return {\r\n isReadMore: false\r\n }\r\n },\r\n computed: {\r\n formattedString () {\r\n var valContainer = this.text\r\n if (this.text.length > this.maxChars) {\r\n valContainer = valContainer.substring(0, this.maxChars) + '...'\r\n }\r\n return (valContainer)\r\n }\r\n },\r\n mounted () { },\r\n methods: {\r\n triggerReadMore (e, b) {\r\n if (this.link === '#') {\r\n e.preventDefault()\r\n }\r\n if (this.lessStr !== null || this.lessStr !== '') {\r\n this.isReadMore = b\r\n }\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReadMore.vue?vue&type=template&id=702b76f2&\"\nimport script from \"./ReadMore.vue?vue&type=script&lang=js&\"\nexport * from \"./ReadMore.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\ninstallComponents(component, {VCard,VCardText,VDialog})\n","<template>\r\n <v-flex v-observe-visibility=\"visibilityChanged\">\r\n <v-card\r\n tile\r\n color=\"black\"\r\n class=\"white--text\"\r\n :img=\"require('../assets/info_gradient.jpg')\"\r\n style=\"margin-top:-60px;\"\r\n >\r\n <v-img\r\n class=\"white--text\"\r\n width=\"100%\"\r\n height=\"300\"\r\n position=\"center top\"\r\n :src=\"$server.getImageUrl(itemDetails, 'fanart')\"\r\n gradient=\"to bottom, rgba(0,0,0,.90), rgba(0,0,0,.75)\"\r\n >\r\n <div class=\"text-xs-center\" style=\"height:40px;\" id=\"whitespace_top\" />\r\n\r\n <v-layout style=\"margin-left:5pxmargin-right:5px;\" v-if=\"itemDetails\">\r\n <!-- left side: cover image -->\r\n <v-flex xs5 pa-5 v-if=\"!$store.isMobile\">\r\n <v-img\r\n :src=\"$server.getImageUrl(itemDetails)\"\r\n :lazy-src=\"require('../assets/default_artist.png')\"\r\n width=\"220px\"\r\n height=\"220px\"\r\n style=\"border: 4px solid rgba(0,0,0,.33);border-radius: 6px;\"\r\n ></v-img>\r\n </v-flex>\r\n\r\n <v-flex>\r\n <!-- Main title -->\r\n <v-card-title\r\n style=\"text-shadow: 1px 1px #000000;\"\r\n >\r\n {{ itemDetails.name }}\r\n </v-card-title>\r\n\r\n <!-- other details -->\r\n <v-card-subtitle>\r\n <!-- version -->\r\n <div\r\n v-if=\"itemDetails.version\"\r\n class=\"caption\"\r\n style=\"color: white;\"\r\n >\r\n {{ itemDetails.version }}\r\n </div>\r\n\r\n <!-- item artists -->\r\n <div\r\n class=\"title\"\r\n style=\"text-shadow: 1px 1px #000000;\"\r\n v-if=\"itemDetails.artists\"\r\n >\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >person</v-icon\r\n >\r\n <span\r\n v-for=\"(artist, artistindex) in itemDetails.artists\"\r\n :key=\"artist.db_id\"\r\n >\r\n <a style=\"color: primary\" v-on:click=\"artistClick(artist)\">{{\r\n artist.name\r\n }}</a>\r\n <span\r\n style=\"color: #cccccc\"\r\n v-if=\"artistindex + 1 < itemDetails.artists.length\"\r\n :key=\"artistindex\"\r\n >{{ \" / \" }}</span\r\n >\r\n </span>\r\n </div>\r\n\r\n <!-- album artist -->\r\n <div class=\"title\" v-if=\"itemDetails.artist\">\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >person</v-icon\r\n >\r\n <a\r\n style=\"color: primary\"\r\n v-on:click=\"artistClick(itemDetails.artist)\"\r\n >{{ itemDetails.artist.name }}</a\r\n >\r\n </div>\r\n\r\n <!-- playlist owner -->\r\n <div\r\n class=\"title\"\r\n style=\"text-shadow: 1px 1px #000000;\"\r\n v-if=\"itemDetails.owner\"\r\n >\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >person</v-icon\r\n >\r\n <a style=\"color:primary\">{{ itemDetails.owner }}</a>\r\n </div>\r\n\r\n <div\r\n v-if=\"itemDetails.album\"\r\n style=\"color:#ffffff;text-shadow: 1px 1px #000000;\"\r\n >\r\n <v-icon\r\n color=\"#cccccc\"\r\n style=\"margin-left: -3px;margin-right:3px\"\r\n small\r\n >album</v-icon\r\n >\r\n <a\r\n style=\"color:#ffffff\"\r\n v-on:click=\"albumClick(itemDetails.album)\"\r\n >{{ itemDetails.album.name }}</a\r\n >\r\n </div>\r\n </v-card-subtitle>\r\n\r\n <!-- play/info buttons -->\r\n <div style=\"margin-left:14px;\">\r\n <v-btn\r\n color=\"primary\"\r\n tile\r\n @click=\"$server.$emit('showPlayMenu', itemDetails)\"\r\n >\r\n <v-icon left dark>play_circle_filled</v-icon>\r\n {{ $t(\"play\") }}\r\n </v-btn>\r\n <v-btn\r\n style=\"margin-left:10px;\"\r\n v-if=\"\r\n !$store.isMobile &&\r\n !!itemDetails.in_library &&\r\n itemDetails.in_library.length == 0\r\n \"\r\n color=\"primary\"\r\n tile\r\n @click=\"toggleLibrary(itemDetails)\"\r\n >\r\n <v-icon left dark>favorite_border</v-icon>\r\n {{ $t(\"add_library\") }}\r\n </v-btn>\r\n <v-btn\r\n style=\"margin-left:10px;\"\r\n v-if=\"\r\n !$store.isMobile &&\r\n !!itemDetails.in_library &&\r\n itemDetails.in_library.length > 0\r\n \"\r\n color=\"primary\"\r\n tile\r\n @click=\"toggleLibrary(itemDetails)\"\r\n >\r\n <v-icon left dark>favorite</v-icon>\r\n {{ $t(\"remove_library\") }}\r\n </v-btn>\r\n </div>\r\n\r\n <!-- Description/metadata -->\r\n <v-card-subtitle class=\"body-2\">\r\n <div class=\"justify-left\" style=\"text-shadow: 1px 1px #000000;\">\r\n <ReadMore\r\n :text=\"getDescription()\"\r\n :max-chars=\"$store.isMobile ? 140 : 260\"\r\n />\r\n </div>\r\n </v-card-subtitle>\r\n </v-flex>\r\n <!-- tech specs and provider icons -->\r\n <div style=\"margin-top:15px\">\r\n <ProviderIcons\r\n v-bind:providerIds=\"itemDetails.provider_ids\"\r\n :height=\"25\"\r\n />\r\n </div>\r\n </v-layout>\r\n </v-img>\r\n <!-- <div class=\"text-xs-center\" v-if=\"itemDetails.tags\" style=\"height:30px;margin-top:-8px;margin-left:15px;margin-right:15px;\">\r\n <v-chip small color=\"white\" outlined v-for=\"tag of itemDetails.tags\" :key=\"tag\">{{ tag }}</v-chip>\r\n </div> -->\r\n </v-card>\r\n </v-flex>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ProviderIcons from '@/components/ProviderIcons.vue'\r\nimport ReadMore from '@/components/ReadMore.vue'\r\nimport VueObserveVisibility from 'vue-observe-visibility'\r\nVue.use(VueObserveVisibility)\r\n\r\nexport default Vue.extend({\r\n components: {\r\n ProviderIcons,\r\n ReadMore\r\n },\r\n props: ['itemDetails'],\r\n data () {\r\n return {}\r\n },\r\n mounted () { },\r\n created () {\r\n this.$store.topBarTransparent = true\r\n },\r\n beforeDestroy () {\r\n this.$store.topBarTransparent = false\r\n this.$store.topBarContextItem = null\r\n },\r\n watch: {\r\n itemDetails: function (val) {\r\n // set itemDetails as contextitem\r\n if (val) {\r\n this.$store.topBarContextItem = val\r\n }\r\n }\r\n },\r\n methods: {\r\n visibilityChanged (isVisible, entry) {\r\n if (isVisible) this.$store.topBarTransparent = true\r\n else this.$store.topBarTransparent = false\r\n },\r\n artistClick (item) {\r\n // artist entry clicked\r\n var url = '/artists/' + item.item_id\r\n this.$router.push({ path: url, query: { provider: item.provider } })\r\n },\r\n albumClick (item) {\r\n // album entry clicked\r\n var url = '/albums/' + item.item_id\r\n this.$router.push({ path: url, query: { provider: item.provider } })\r\n },\r\n toggleLibrary (item) {\r\n // library button clicked on item\r\n this.$server.toggleLibrary(item)\r\n },\r\n getDescription () {\r\n var desc = ''\r\n if (!this.itemDetails) return ''\r\n if (this.itemDetails.metadata && this.itemDetails.metadata.description) {\r\n return this.itemDetails.metadata.description\r\n } else if (this.itemDetails.metadata && this.itemDetails.metadata.biography) {\r\n return this.itemDetails.metadata.biography\r\n } else if (this.itemDetails.metadata && this.itemDetails.metadata.copyright) {\r\n return this.itemDetails.metadata.copyright\r\n } else if (this.itemDetails.artists) {\r\n this.itemDetails.artists.forEach(function (artist) {\r\n if (artist.metadata && artist.metadata.biography) {\r\n desc = artist.metadata.biography\r\n }\r\n })\r\n }\r\n return desc\r\n },\r\n getUniqueProviders () {\r\n var keys = []\r\n var qualities = []\r\n if (!this.providerIds) return []\r\n let sortedItemIds = this.providerIds.slice()\r\n sortedItemIds.sort((a, b) =>\r\n a.quality < b.quality ? 1 : b.quality < a.quality ? -1 : 0\r\n )\r\n for (var item of sortedItemIds) {\r\n if (!keys.includes(item.provider)) {\r\n qualities.push(item)\r\n keys.push(item.provider)\r\n }\r\n }\r\n return qualities\r\n },\r\n getFileFormatLogo (provider) {\r\n if (provider.quality === 0) return 'mp3.png'\r\n else if (provider.quality === 1) return 'vorbis.png'\r\n else if (provider.quality === 2) return 'aac.png'\r\n else if (provider.quality > 2) return 'flac.png'\r\n },\r\n getFileFormatDesc (provider) {\r\n var desc = ''\r\n if (provider.details) desc += ' ' + provider.details\r\n return desc\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfoHeader.vue?vue&type=template&id=f411b8b0&\"\nimport script from \"./InfoHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./InfoHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardSubtitle,VCardTitle,VFlex,VIcon,VImg,VLayout})\n","<template>\n <section>\n <InfoHeader v-bind:itemDetails=\"itemDetails\" />\n <v-tabs grow show-arrows v-model=\"activeTab\">\n <v-tab v-for=\"tab in tabs\" :key=\"tab.label\">\n {{ $t(tab.label) + \" (\" + tab.items.length + \")\" }}</v-tab\n >\n <v-tab-item v-for=\"tab in tabs\" :key=\"tab.label\">\n <v-card flat>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"tab.items\"\n :item-size=\"72\"\n key-field=\"item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"$store.isMobile || tab.label === 'album_tracks'\"\n :hidetracknum=\"tab.label !== 'album_tracks'\"\n :hideproviders=\"$store.isMobile\"\n :hidelibrary=\"$store.isMobile\"\n :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </v-card>\n </v-tab-item>\n </v-tabs>\n </section>\n</template>\n\n<style scoped>\n.scroller {\n height: 100%;\n}\n</style>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\nimport InfoHeader from '@/components/InfoHeader.vue'\n\nexport default {\n components: {\n ListviewItem,\n InfoHeader\n },\n props: {\n media_id: String,\n provider: String,\n media_type: String\n },\n data () {\n return {\n itemDetails: {},\n items: [],\n activeTab: 0,\n tabs: []\n }\n },\n created () {\n this.$server.$on('refresh_listing', this.retrieveInfos)\n if (this.media_type === 'artists') {\n // artist details\n this.tabs = [\n {\n label: 'artist_toptracks',\n endpoint: 'artists/' + this.media_id + '/toptracks',\n items: []\n },\n {\n label: 'artist_albums',\n endpoint: 'artists/' + this.media_id + '/albums',\n items: []\n }\n ]\n } else if (this.media_type === 'albums') {\n // album details\n this.tabs = [\n {\n label: 'album_tracks',\n endpoint: 'albums/' + this.media_id + '/tracks',\n items: []\n },\n {\n label: 'album_versions',\n endpoint: 'albums/' + this.media_id + '/versions',\n items: []\n }\n ]\n } else if (this.media_type === 'tracks') {\n // track details\n this.tabs = [\n {\n label: 'track_versions',\n endpoint: 'tracks/' + this.media_id + '/versions',\n items: []\n }\n ]\n } else if (this.media_type === 'playlists') {\n // playlist details\n this.tabs = [\n {\n label: 'playlist_tracks',\n endpoint: 'playlists/' + this.media_id + '/tracks',\n items: []\n }\n ]\n }\n this.retrieveInfos()\n },\n beforeDestroy () {\n this.$server.$off('refresh_listing')\n },\n methods: {\n retrieveInfos () {\n // retrieve the item details\n this.getItemDetails()\n // retrieve the tabs with additional details\n for (var tab of this.tabs) {\n this.getTabItems(tab)\n }\n },\n async getItemDetails () {\n // get the full details for the mediaitem\n this.$store.loading = true\n const endpoint = this.media_type + '/' + this.media_id\n let result = await this.$server.getData(endpoint, { provider: this.provider })\n this.itemDetails = result\n this.$store.windowtitle = result.name\n this.$store.loading = false\n },\n async getTabItems (tab) {\n // retrieve the lists of items for each tab\n return this.$server.getAllItems(tab.endpoint, tab.items, { provider: this.provider })\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ItemDetails.vue?vue&type=template&id=d414543e&scoped=true&\"\nimport script from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemDetails.vue?vue&type=style&index=0&id=d414543e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d414543e\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VCard,VList,VTab,VTabItem,VTabs})\n","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n var options;\n\n if (typeof value === 'function') {\n // Simple options (callback-only)\n options = {\n callback: value\n };\n } else {\n // Options object\n options = value;\n }\n\n return options;\n}\nfunction throttle(callback, delay) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout;\n var lastState;\n var currentArgs;\n\n var throttled = function throttled(state) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n currentArgs = args;\n if (timeout && state === lastState) return;\n var leading = options.leading;\n\n if (typeof leading === 'function') {\n leading = leading(state, lastState);\n }\n\n if ((!timeout || state !== lastState) && leading) {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n }\n\n lastState = state;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n timeout = 0;\n }, delay);\n };\n\n throttled._clear = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return throttled;\n}\nfunction deepEqual(val1, val2) {\n if (val1 === val2) return true;\n\n if (_typeof(val1) === 'object') {\n for (var key in val1) {\n if (!deepEqual(val1[key], val2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n function VisibilityState(el, options, vnode) {\n _classCallCheck(this, VisibilityState);\n\n this.el = el;\n this.observer = null;\n this.frozen = false;\n this.createObserver(options, vnode);\n }\n\n _createClass(VisibilityState, [{\n key: \"createObserver\",\n value: function createObserver(options, vnode) {\n var _this = this;\n\n if (this.observer) {\n this.destroyObserver();\n }\n\n if (this.frozen) return;\n this.options = processOptions(options);\n\n this.callback = function (result, entry) {\n _this.options.callback(result, entry);\n\n if (result && _this.options.once) {\n _this.frozen = true;\n\n _this.destroyObserver();\n }\n }; // Throttle\n\n\n if (this.callback && this.options.throttle) {\n var _ref = this.options.throttleOptions || {},\n _leading = _ref.leading;\n\n this.callback = throttle(this.callback, this.options.throttle, {\n leading: function leading(state) {\n return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n }\n });\n }\n\n this.oldResult = undefined;\n this.observer = new IntersectionObserver(function (entries) {\n var entry = entries[0];\n\n if (entries.length > 1) {\n var intersectingEntry = entries.find(function (e) {\n return e.isIntersecting;\n });\n\n if (intersectingEntry) {\n entry = intersectingEntry;\n }\n }\n\n if (_this.callback) {\n // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n if (result === _this.oldResult) return;\n _this.oldResult = result;\n\n _this.callback(result, entry);\n }\n }, this.options.intersection); // Wait for the element to be in document\n\n vnode.context.$nextTick(function () {\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n } // Cancel throttled call\n\n\n if (this.callback && this.callback._clear) {\n this.callback._clear();\n\n this.callback = null;\n }\n }\n }, {\n key: \"threshold\",\n get: function get() {\n return this.options.intersection && this.options.intersection.threshold || 0;\n }\n }]);\n\n return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n var value = _ref2.value;\n if (!value) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n } else {\n var state = new VisibilityState(el, value, vnode);\n el._vue_visibilityState = state;\n }\n}\n\nfunction update(el, _ref3, vnode) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue;\n if (deepEqual(value, oldValue)) return;\n var state = el._vue_visibilityState;\n\n if (!value) {\n unbind(el);\n return;\n }\n\n if (state) {\n state.createObserver(value, vnode);\n } else {\n bind(el, {\n value: value\n }, vnode);\n }\n}\n\nfunction unbind(el) {\n var state = el._vue_visibilityState;\n\n if (state) {\n state.destroyObserver();\n delete el._vue_visibilityState;\n }\n}\n\nvar ObserveVisibility = {\n bind: bind,\n update: update,\n unbind: unbind\n};\n\nfunction install(Vue) {\n Vue.directive('observe-visibility', ObserveVisibility);\n /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"0.4.6\",\n install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","module.exports = __webpack_public_path__ + \"img/info_gradient.4db55f47.jpg\";"],"sourceRoot":""}
\ No newline at end of file
+++ /dev/null
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["playerqueue"],{b097:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("section",[i("v-tabs",{attrs:{grow:""},model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[i("v-tab",[e._v(" "+e._s(e.$t("queue_next_tracks")+" ("+e.next_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.next_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.item;return[i("ListviewItem",{attrs:{item:n,hideavatar:3==n.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile,onclickHandler:e.itemClicked}})]}}])})],1)],1),i("v-tab",[e._v(" "+e._s(e.$t("queue_previous_tracks")+" ("+e.previous_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.previous_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.item;return[i("ListviewItem",{attrs:{item:n,hideavatar:3==n.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile,onclickHandler:e.itemClicked}})]}}])})],1)],1),i("v-menu",{attrs:{"offset-y":""},scopedSlots:e._u([{key:"activator",fn:function(t){var n=t.on;return[i("v-btn",e._g({staticClass:"align-self-center mr-4",attrs:{text:""}},n),[e._v(" "+e._s(e.$t("queue_options"))+" "),i("v-icon",{attrs:{right:""}},[e._v("arrow_drop_down")])],1)]}}])},[i("v-list",[i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("repeat_enabled",!e.playerQueueDetails.repeat_enabled)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("repeat")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.playerQueueDetails.repeat_enabled?e.$t("disable_repeat"):e.$t("enable_repeat"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("shuffle_enabled",!e.playerQueueDetails.shuffle_enabled)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("shuffle")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.playerQueueDetails.shuffle_enabled?e.$t("disable_shuffle"):e.$t("enable_shuffle"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("clear")}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("clear")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("queue_clear"))}})],1)],1)],1)],1)],1),i("v-dialog",{attrs:{"max-width":"500px"},on:{input:function(t){return e.$emit("input",t)}},model:{value:e.showPlayMenu,callback:function(t){e.showPlayMenu=t},expression:"showPlayMenu"}},[i("v-card",[i("v-subheader",{staticClass:"title"},[e._v(e._s(e.selectedItem.name))]),i("v-list",[i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("index",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("play_circle_outline")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("play_now"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("next",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("queue_play_next")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("play_next"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("move_up",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("arrow_upward")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("queue_move_up"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("move_down",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("arrow_downward")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("queue_move_down"))}})],1)],1)],1)],1)],1)],1)},s=[],r=(i("fb6a"),i("4fad"),i("e587")),a=(i("96cf"),i("89ba")),o=i("2b0e"),u=i("d3cc"),l={components:{ListviewItem:u["a"]},props:{},data:function(){return{items:[],activeTab:0,playerQueueDetails:{},showPlayMenu:!1,selectedItem:{}}},computed:{next_items:function(){return this.playerQueueDetails?this.items.slice(this.playerQueueDetails.cur_index):[]},previous_items:function(){return this.playerQueueDetails&&this.$server.activePlayer?this.items.slice(0,this.playerQueueDetails.cur_index):[]}},created:function(){this.$store.windowtitle=this.$t("queue"),this.$server.$on("queue updated",this.onQueueDetailsEvent),this.$server.$on("queue items updated",this.onQueueItemsEvent),this.$server.$on("new player selected",this.activePlayerChanged),this.$server.activePlayerId&&this.activePlayerChanged()},methods:{itemClicked:function(e){this.selectedItem=e,this.showPlayMenu=!this.showPlayMenu},activePlayerChanged:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(){var t,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t="players/"+this.$server.activePlayerId+"/queue",e.next=3,this.$server.getData(t);case 3:return i=e.sent,e.next=6,this.onQueueDetailsEvent(i);case 6:return e.next=8,this.onQueueItemsEvent(i);case 8:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),onQueueDetailsEvent:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t){var i,n,s,a,u;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t.player_id===this.$server.activePlayerId)for(i=0,n=Object.entries(t);i<n.length;i++)s=Object(r["a"])(n[i],2),a=s[0],u=s[1],o["a"].set(this.playerQueueDetails,a,u);case 1:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),onQueueItemsEvent:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t){var i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t.player_id!==this.$server.activePlayerId){e.next=4;break}return i="players/"+t.player_id+"/queue/items",e.next=4,this.$server.getAllItems(i,this.items);case 4:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),sendQueueCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i="players/"+this.$server.activePlayerId+"/queue/"+e;this.$server.putData(i,t)}}},c=l,m=i("2877"),d=i("6544"),v=i.n(d),p=i("8336"),_=i("b0af"),h=i("169a"),f=i("132d"),y=i("8860"),b=i("da13"),w=i("5d23"),$=i("34c3"),x=i("e449"),C=i("e0c7"),k=i("71a3"),P=i("c671"),I=i("fe57"),Q=Object(m["a"])(c,n,s,!1,null,null,null);t["default"]=Q.exports;v()(Q,{VBtn:p["a"],VCard:_["a"],VDialog:h["a"],VIcon:f["a"],VList:y["a"],VListItem:b["a"],VListItemContent:w["a"],VListItemIcon:$["a"],VListItemTitle:w["c"],VMenu:x["a"],VSubheader:C["a"],VTab:k["a"],VTabItem:P["a"],VTabs:I["a"]})}}]);
-//# sourceMappingURL=playerqueue.231c77e4.js.map
\ No newline at end of file
+++ /dev/null
-{"version":3,"sources":["webpack:///./src/views/PlayerQueue.vue?7431","webpack:///src/views/PlayerQueue.vue","webpack:///./src/views/PlayerQueue.vue?86d4","webpack:///./src/views/PlayerQueue.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","model","value","callback","$$v","activeTab","expression","_v","_s","$t","next_items","length","staticClass","scopedSlots","_u","key","fn","ref","item","media_type","$store","isMobile","itemClicked","previous_items","on","_g","$event","sendQueueCommand","playerQueueDetails","repeat_enabled","domProps","shuffle_enabled","$emit","showPlayMenu","selectedItem","name","queue_item_id","staticRenderFns","components","ListviewItem","props","data","items","computed","slice","cur_index","$server","activePlayer","created","windowtitle","$on","onQueueDetailsEvent","onQueueItemsEvent","activePlayerChanged","activePlayerId","methods","putData","endpoint","cmd_args","component","VBtn","VCard","VDialog","VIcon","VList","VListItem","VListItemContent","VListItemIcon","VListItemTitle","VMenu","VSubheader","VTab","VTabItem","VTabs"],"mappings":"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","file":"js/playerqueue.231c77e4.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-tabs',{attrs:{\"grow\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t(\"queue_next_tracks\") + \" (\" + _vm.next_items.length + \")\"))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.next_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile,\"onclickHandler\":_vm.itemClicked}})]}}])})],1)],1),_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t(\"queue_previous_tracks\") + \" (\" + _vm.previous_items.length + \")\"))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.previous_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile,\"onclickHandler\":_vm.itemClicked}})]}}])})],1)],1),_c('v-menu',{attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({staticClass:\"align-self-center mr-4\",attrs:{\"text\":\"\"}},on),[_vm._v(\" \"+_vm._s(_vm.$t(\"queue_options\"))+\" \"),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\"arrow_drop_down\")])],1)]}}])},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand(\n 'repeat_enabled',\n !_vm.playerQueueDetails.repeat_enabled\n )}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('repeat')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(\n _vm.playerQueueDetails.repeat_enabled\n ? _vm.$t('disable_repeat')\n : _vm.$t('enable_repeat')\n )}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand(\n 'shuffle_enabled',\n !_vm.playerQueueDetails.shuffle_enabled\n )}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('shuffle')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(\n _vm.playerQueueDetails.shuffle_enabled\n ? _vm.$t('disable_shuffle')\n : _vm.$t('enable_shuffle')\n )}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('clear')}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('clear')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('queue_clear'))}})],1)],1)],1)],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"500px\"},on:{\"input\":function($event){return _vm.$emit('input', $event)}},model:{value:(_vm.showPlayMenu),callback:function ($$v) {_vm.showPlayMenu=$$v},expression:\"showPlayMenu\"}},[_c('v-card',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.selectedItem.name))]),_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('index',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('play_circle_outline')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('play_now'))}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('next',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('queue_play_next')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('play_next'))}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('move_up',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('arrow_upward')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('queue_move_up'))}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('move_down',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('arrow_downward')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('queue_move_down'))}})],1)],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-tabs v-model=\"activeTab\" grow>\n <v-tab>\n {{ $t(\"queue_next_tracks\") + \" (\" + next_items.length + \")\" }}</v-tab\n >\n <v-tab-item>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"next_items\"\n :item-size=\"72\"\n key-field=\"queue_item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"$store.isMobile\"\n :hidelibrary=\"$store.isMobile\"\n :hidemenu=\"$store.isMobile\"\n :onclickHandler=\"itemClicked\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </v-tab-item>\n <v-tab>\n {{\n $t(\"queue_previous_tracks\") + \" (\" + previous_items.length + \")\"\n }}</v-tab\n >\n <v-tab-item>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"previous_items\"\n :item-size=\"72\"\n key-field=\"queue_item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"$store.isMobile\"\n :hidelibrary=\"$store.isMobile\"\n :hidemenu=\"$store.isMobile\"\n :onclickHandler=\"itemClicked\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </v-tab-item>\n <v-menu offset-y>\n <template v-slot:activator=\"{ on }\">\n <v-btn text v-on=\"on\" class=\"align-self-center mr-4\">\n {{ $t(\"queue_options\") }}\n <v-icon right>arrow_drop_down</v-icon>\n </v-btn>\n </template>\n\n <v-list>\n <v-list-item\n @click=\"\n sendQueueCommand(\n 'repeat_enabled',\n !playerQueueDetails.repeat_enabled\n )\n \"\n >\n <v-list-item-icon>\n <v-icon v-text=\"'repeat'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"\n playerQueueDetails.repeat_enabled\n ? $t('disable_repeat')\n : $t('enable_repeat')\n \"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item\n @click=\"\n sendQueueCommand(\n 'shuffle_enabled',\n !playerQueueDetails.shuffle_enabled\n )\n \"\n >\n <v-list-item-icon>\n <v-icon v-text=\"'shuffle'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"\n playerQueueDetails.shuffle_enabled\n ? $t('disable_shuffle')\n : $t('enable_shuffle')\n \"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('clear')\">\n <v-list-item-icon>\n <v-icon v-text=\"'clear'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title v-text=\"$t('queue_clear')\" />\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </v-menu>\n </v-tabs>\n <v-dialog\n v-model=\"showPlayMenu\"\n @input=\"$emit('input', $event)\"\n max-width=\"500px\"\n >\n <v-card>\n <v-subheader class=\"title\">{{ selectedItem.name }}</v-subheader>\n <v-list>\n <v-list-item @click=\"sendQueueCommand('index',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'play_circle_outline'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('play_now')\"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('next',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'queue_play_next'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('play_next')\"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('move_up',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'arrow_upward'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('queue_move_up')\"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('move_down',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'arrow_downward'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('queue_move_down')\"\n />\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </v-card>\n </v-dialog>\n </section>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n components: {\n ListviewItem\n },\n props: {},\n data () {\n return {\n items: [],\n activeTab: 0,\n playerQueueDetails: {},\n showPlayMenu: false,\n selectedItem: {}\n }\n },\n computed: {\n next_items () {\n if (this.playerQueueDetails) {\n return this.items.slice(this.playerQueueDetails.cur_index)\n } else return []\n },\n previous_items () {\n if (this.playerQueueDetails && this.$server.activePlayer) {\n return this.items.slice(0, this.playerQueueDetails.cur_index)\n } else return []\n }\n },\n created () {\n this.$store.windowtitle = this.$t('queue')\n this.$server.$on('queue updated', this.onQueueDetailsEvent)\n this.$server.$on('queue items updated', this.onQueueItemsEvent)\n this.$server.$on('new player selected', this.activePlayerChanged)\n if (this.$server.activePlayerId) this.activePlayerChanged()\n },\n methods: {\n itemClicked (item) {\n this.selectedItem = item\n this.showPlayMenu = !this.showPlayMenu\n },\n async activePlayerChanged () {\n /// get queue details once when we have a new active player\n let endpoint = 'players/' + this.$server.activePlayerId + '/queue'\n let queueDetails = await this.$server.getData(endpoint)\n await this.onQueueDetailsEvent(queueDetails)\n await this.onQueueItemsEvent(queueDetails)\n },\n async onQueueDetailsEvent (data) {\n if (data.player_id === this.$server.activePlayerId) {\n for (const [key, value] of Object.entries(data)) {\n Vue.set(this.playerQueueDetails, key, value)\n }\n }\n },\n async onQueueItemsEvent (data) {\n if (data.player_id === this.$server.activePlayerId) {\n let endpoint = 'players/' + data.player_id + '/queue/items'\n await this.$server.getAllItems(endpoint, this.items)\n }\n },\n sendQueueCommand (cmd, cmd_args = null) {\n let endpoint = 'players/' + this.$server.activePlayerId + '/queue/' + cmd\n this.$server.putData(endpoint, cmd_args)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerQueue.vue?vue&type=template&id=5bfb8ac6&\"\nimport script from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VBtn,VCard,VDialog,VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle,VMenu,VSubheader,VTab,VTabItem,VTabs})\n"],"sourceRoot":""}
\ No newline at end of file
--- /dev/null
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["playerqueue"],{b097:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("section",[i("v-tabs",{attrs:{grow:"","show-arrows":""},model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[i("v-tab",[e._v(" "+e._s(e.$t("queue_next_tracks")+" ("+e.next_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.next_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.item;return[i("ListviewItem",{attrs:{item:n,hideavatar:3==n.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile,onclickHandler:e.itemClicked}})]}}])})],1)],1),i("v-tab",[e._v(" "+e._s(e.$t("queue_previous_tracks")+" ("+e.previous_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.previous_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.item;return[i("ListviewItem",{attrs:{item:n,hideavatar:3==n.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile,onclickHandler:e.itemClicked}})]}}])})],1)],1),i("v-menu",{attrs:{"offset-y":""},scopedSlots:e._u([{key:"activator",fn:function(t){var n=t.on;return[e.$store.isMobile?e._e():i("v-btn",e._g({staticClass:"align-self-center mr-4",attrs:{text:""}},n),[e._v(" "+e._s(e.$t("queue_options"))+" "),i("v-icon",{attrs:{right:""}},[e._v("arrow_drop_down")])],1),e.$store.isMobile?i("v-btn",e._g({staticClass:"align-self-center mr-4",attrs:{icon:""}},n),[i("v-icon",[e._v("settings")])],1):e._e()]}}])},[i("v-list",[i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("repeat_enabled",!e.playerQueueDetails.repeat_enabled)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("repeat")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.playerQueueDetails.repeat_enabled?e.$t("disable_repeat"):e.$t("enable_repeat"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("shuffle_enabled",!e.playerQueueDetails.shuffle_enabled)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("shuffle")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.playerQueueDetails.shuffle_enabled?e.$t("disable_shuffle"):e.$t("enable_shuffle"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("clear")}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("clear")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("queue_clear"))}})],1)],1)],1)],1)],1),i("v-dialog",{attrs:{"max-width":"500px"},model:{value:e.showPlayMenu,callback:function(t){e.showPlayMenu=t},expression:"showPlayMenu"}},[i("v-card",[i("v-subheader",{staticClass:"title"},[e._v(e._s(e.selectedItem.name))]),i("v-list",[i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("index",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("play_circle_outline")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("play_now"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("next",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("queue_play_next")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("play_next"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("move_up",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("arrow_upward")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("queue_move_up"))}})],1)],1),i("v-list-item",{on:{click:function(t){return e.sendQueueCommand("move_down",e.selectedItem.queue_item_id)}}},[i("v-list-item-icon",[i("v-icon",{domProps:{textContent:e._s("arrow_downward")}})],1),i("v-list-item-content",[i("v-list-item-title",{domProps:{textContent:e._s(e.$t("queue_move_down"))}})],1)],1)],1)],1)],1)],1)},s=[],r=(i("fb6a"),i("4fad"),i("e587")),a=(i("96cf"),i("89ba")),o=i("2b0e"),l=i("d3cc"),u={components:{ListviewItem:l["a"]},props:{},data:function(){return{items:[],activeTab:0,playerQueueDetails:{},showPlayMenu:!1,selectedItem:{}}},computed:{next_items:function(){return this.playerQueueDetails?this.items.slice(this.playerQueueDetails.cur_index):[]},previous_items:function(){return this.playerQueueDetails&&this.$server.activePlayer?this.items.slice(0,this.playerQueueDetails.cur_index):[]}},created:function(){this.$store.windowtitle=this.$t("queue"),this.$server.$on("queue updated",this.onQueueDetailsEvent),this.$server.$on("queue items updated",this.onQueueItemsEvent),this.$server.$on("new player selected",this.activePlayerChanged),this.$server.activePlayerId&&this.activePlayerChanged()},methods:{itemClicked:function(e){this.selectedItem=e,this.showPlayMenu=!this.showPlayMenu},activePlayerChanged:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(){var t,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t="players/"+this.$server.activePlayerId+"/queue",e.next=3,this.$server.getData(t);case 3:return i=e.sent,e.next=6,this.onQueueDetailsEvent(i);case 6:return e.next=8,this.onQueueItemsEvent(i);case 8:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),onQueueDetailsEvent:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t){var i,n,s,a,l;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t.player_id===this.$server.activePlayerId)for(i=0,n=Object.entries(t);i<n.length;i++)s=Object(r["a"])(n[i],2),a=s[0],l=s[1],o["a"].set(this.playerQueueDetails,a,l);case 1:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),onQueueItemsEvent:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t){var i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t.player_id!==this.$server.activePlayerId){e.next=4;break}return i="players/"+t.player_id+"/queue/items",e.next=4,this.$server.getAllItems(i,this.items);case 4:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),sendQueueCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i="players/"+this.$server.activePlayerId+"/queue/"+e;this.$server.putData(i,t)}}},c=u,m=i("2877"),d=i("6544"),v=i.n(d),p=i("8336"),_=i("b0af"),h=i("169a"),f=i("132d"),b=i("8860"),y=i("da13"),w=i("5d23"),$=i("34c3"),x=i("e449"),C=i("e0c7"),k=i("71a3"),P=i("c671"),g=i("fe57"),I=Object(m["a"])(c,n,s,!1,null,null,null);t["default"]=I.exports;v()(I,{VBtn:p["a"],VCard:_["a"],VDialog:h["a"],VIcon:f["a"],VList:b["a"],VListItem:y["a"],VListItemContent:w["a"],VListItemIcon:$["a"],VListItemTitle:w["c"],VMenu:x["a"],VSubheader:C["a"],VTab:k["a"],VTabItem:P["a"],VTabs:g["a"]})}}]);
+//# sourceMappingURL=playerqueue.5bd65be6.js.map
\ No newline at end of file
--- /dev/null
+{"version":3,"sources":["webpack:///./src/views/PlayerQueue.vue?2730","webpack:///src/views/PlayerQueue.vue","webpack:///./src/views/PlayerQueue.vue?86d4","webpack:///./src/views/PlayerQueue.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","model","value","callback","$$v","activeTab","expression","_v","_s","$t","next_items","length","staticClass","scopedSlots","_u","key","fn","ref","item","media_type","$store","isMobile","itemClicked","previous_items","on","_e","_g","$event","sendQueueCommand","playerQueueDetails","repeat_enabled","domProps","shuffle_enabled","showPlayMenu","selectedItem","name","queue_item_id","staticRenderFns","components","ListviewItem","props","data","items","computed","slice","cur_index","$server","activePlayer","created","windowtitle","$on","onQueueDetailsEvent","onQueueItemsEvent","activePlayerChanged","activePlayerId","methods","putData","endpoint","cmd_args","component","VBtn","VCard","VDialog","VIcon","VList","VListItem","VListItemContent","VListItemIcon","VListItemTitle","VMenu","VSubheader","VTab","VTabItem","VTabs"],"mappings":"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","file":"js/playerqueue.5bd65be6.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-tabs',{attrs:{\"grow\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t(\"queue_next_tracks\") + \" (\" + _vm.next_items.length + \")\"))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.next_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile,\"onclickHandler\":_vm.itemClicked}})]}}])})],1)],1),_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t(\"queue_previous_tracks\") + \" (\" + _vm.previous_items.length + \")\"))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.previous_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile,\"onclickHandler\":_vm.itemClicked}})]}}])})],1)],1),_c('v-menu',{attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [(!_vm.$store.isMobile)?_c('v-btn',_vm._g({staticClass:\"align-self-center mr-4\",attrs:{\"text\":\"\"}},on),[_vm._v(\" \"+_vm._s(_vm.$t(\"queue_options\"))+\" \"),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\"arrow_drop_down\")])],1):_vm._e(),(_vm.$store.isMobile)?_c('v-btn',_vm._g({staticClass:\"align-self-center mr-4\",attrs:{\"icon\":\"\"}},on),[_c('v-icon',[_vm._v(\"settings\")])],1):_vm._e()]}}])},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand(\n 'repeat_enabled',\n !_vm.playerQueueDetails.repeat_enabled\n )}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('repeat')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(\n _vm.playerQueueDetails.repeat_enabled\n ? _vm.$t('disable_repeat')\n : _vm.$t('enable_repeat')\n )}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand(\n 'shuffle_enabled',\n !_vm.playerQueueDetails.shuffle_enabled\n )}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('shuffle')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(\n _vm.playerQueueDetails.shuffle_enabled\n ? _vm.$t('disable_shuffle')\n : _vm.$t('enable_shuffle')\n )}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('clear')}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('clear')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('queue_clear'))}})],1)],1)],1)],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"500px\"},model:{value:(_vm.showPlayMenu),callback:function ($$v) {_vm.showPlayMenu=$$v},expression:\"showPlayMenu\"}},[_c('v-card',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.selectedItem.name))]),_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('index',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('play_circle_outline')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('play_now'))}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('next',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('queue_play_next')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('play_next'))}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('move_up',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('arrow_upward')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('queue_move_up'))}})],1)],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.sendQueueCommand('move_down',_vm.selectedItem.queue_item_id)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s('arrow_downward')}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.$t('queue_move_down'))}})],1)],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-tabs v-model=\"activeTab\" grow show-arrows>\n <v-tab>\n {{ $t(\"queue_next_tracks\") + \" (\" + next_items.length + \")\" }}</v-tab\n >\n <v-tab-item>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"next_items\"\n :item-size=\"72\"\n key-field=\"queue_item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"$store.isMobile\"\n :hidelibrary=\"$store.isMobile\"\n :hidemenu=\"$store.isMobile\"\n :onclickHandler=\"itemClicked\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </v-tab-item>\n <v-tab>\n {{\n $t(\"queue_previous_tracks\") + \" (\" + previous_items.length + \")\"\n }}</v-tab\n >\n <v-tab-item>\n <v-list two-line>\n <RecycleScroller\n class=\"scroller\"\n :items=\"previous_items\"\n :item-size=\"72\"\n key-field=\"queue_item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"$store.isMobile\"\n :hidelibrary=\"$store.isMobile\"\n :hidemenu=\"$store.isMobile\"\n :onclickHandler=\"itemClicked\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </v-tab-item>\n <v-menu offset-y>\n <template v-slot:activator=\"{ on }\">\n <v-btn text v-on=\"on\" class=\"align-self-center mr-4\" v-if=\"!$store.isMobile\">\n {{ $t(\"queue_options\") }}\n <v-icon right>arrow_drop_down</v-icon>\n </v-btn>\n <v-btn icon v-on=\"on\" class=\"align-self-center mr-4\" v-if=\"$store.isMobile\">\n <v-icon>settings</v-icon>\n </v-btn>\n </template>\n\n <v-list>\n <v-list-item\n @click=\"\n sendQueueCommand(\n 'repeat_enabled',\n !playerQueueDetails.repeat_enabled\n )\n \"\n >\n <v-list-item-icon>\n <v-icon v-text=\"'repeat'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"\n playerQueueDetails.repeat_enabled\n ? $t('disable_repeat')\n : $t('enable_repeat')\n \"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item\n @click=\"\n sendQueueCommand(\n 'shuffle_enabled',\n !playerQueueDetails.shuffle_enabled\n )\n \"\n >\n <v-list-item-icon>\n <v-icon v-text=\"'shuffle'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"\n playerQueueDetails.shuffle_enabled\n ? $t('disable_shuffle')\n : $t('enable_shuffle')\n \"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('clear')\">\n <v-list-item-icon>\n <v-icon v-text=\"'clear'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title v-text=\"$t('queue_clear')\" />\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </v-menu>\n </v-tabs>\n <v-dialog\n v-model=\"showPlayMenu\"\n max-width=\"500px\"\n >\n <v-card>\n <v-subheader class=\"title\">{{ selectedItem.name }}</v-subheader>\n <v-list>\n <v-list-item @click=\"sendQueueCommand('index',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'play_circle_outline'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('play_now')\"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('next',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'queue_play_next'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('play_next')\"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('move_up',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'arrow_upward'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('queue_move_up')\"\n />\n </v-list-item-content>\n </v-list-item>\n <v-list-item @click=\"sendQueueCommand('move_down',selectedItem.queue_item_id)\">\n <v-list-item-icon>\n <v-icon v-text=\"'arrow_downward'\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title\n v-text=\"$t('queue_move_down')\"\n />\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </v-card>\n </v-dialog>\n </section>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n components: {\n ListviewItem\n },\n props: {},\n data () {\n return {\n items: [],\n activeTab: 0,\n playerQueueDetails: {},\n showPlayMenu: false,\n selectedItem: {}\n }\n },\n computed: {\n next_items () {\n if (this.playerQueueDetails) {\n return this.items.slice(this.playerQueueDetails.cur_index)\n } else return []\n },\n previous_items () {\n if (this.playerQueueDetails && this.$server.activePlayer) {\n return this.items.slice(0, this.playerQueueDetails.cur_index)\n } else return []\n }\n },\n created () {\n this.$store.windowtitle = this.$t('queue')\n this.$server.$on('queue updated', this.onQueueDetailsEvent)\n this.$server.$on('queue items updated', this.onQueueItemsEvent)\n this.$server.$on('new player selected', this.activePlayerChanged)\n if (this.$server.activePlayerId) this.activePlayerChanged()\n },\n methods: {\n itemClicked (item) {\n this.selectedItem = item\n this.showPlayMenu = !this.showPlayMenu\n },\n async activePlayerChanged () {\n /// get queue details once when we have a new active player\n let endpoint = 'players/' + this.$server.activePlayerId + '/queue'\n let queueDetails = await this.$server.getData(endpoint)\n await this.onQueueDetailsEvent(queueDetails)\n await this.onQueueItemsEvent(queueDetails)\n },\n async onQueueDetailsEvent (data) {\n if (data.player_id === this.$server.activePlayerId) {\n for (const [key, value] of Object.entries(data)) {\n Vue.set(this.playerQueueDetails, key, value)\n }\n }\n },\n async onQueueItemsEvent (data) {\n if (data.player_id === this.$server.activePlayerId) {\n let endpoint = 'players/' + data.player_id + '/queue/items'\n await this.$server.getAllItems(endpoint, this.items)\n }\n },\n sendQueueCommand (cmd, cmd_args = null) {\n let endpoint = 'players/' + this.$server.activePlayerId + '/queue/' + cmd\n this.$server.putData(endpoint, cmd_args)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerQueue.vue?vue&type=template&id=aa90cc28&\"\nimport script from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VBtn,VCard,VDialog,VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle,VMenu,VSubheader,VTab,VTabItem,VTabs})\n"],"sourceRoot":""}
\ No newline at end of file
+++ /dev/null
-self.__precacheManifest = (self.__precacheManifest || []).concat([
- {
- "revision": "47f7ec2e021f6ee60d2e",
- "url": "css/app.53896a2f.css"
- },
- {
- "revision": "3bf0e816e61b5995b70d",
- "url": "css/chunk-vendors.7d5374e7.css"
- },
- {
- "revision": "a6e5dcf7bcb21fbdb800",
- "url": "css/config.18def958.css"
- },
- {
- "revision": "276e9bcee543fb0e0ca6",
- "url": "css/config~search.af60f7e1.css"
- },
- {
- "revision": "7288c024fa43c6b41ad1",
- "url": "css/itemdetails.742ba64e.css"
- },
- {
- "revision": "f99e5094257d36798190",
- "url": "css/itemdetails~playerqueue~search.93e2919b.css"
- },
- {
- "revision": "0509ab09c1b0d2200a4135803c91d6ce",
- "url": "fonts/MaterialIcons-Regular.0509ab09.woff2"
- },
- {
- "revision": "29b882f018fa6fe75fd338aaae6235b8",
- "url": "fonts/MaterialIcons-Regular.29b882f0.woff"
- },
- {
- "revision": "96c476804d7a788cc1c05351b287ee41",
- "url": "fonts/MaterialIcons-Regular.96c47680.eot"
- },
- {
- "revision": "da4ea5cdfca6b3baab285741f5ccb59f",
- "url": "fonts/MaterialIcons-Regular.da4ea5cd.ttf"
- },
- {
- "revision": "313a65630d341645c13e4f2a0364381d",
- "url": "fonts/Roboto-Black.313a6563.woff"
- },
- {
- "revision": "59eb3601394dd87f30f82433fb39dd94",
- "url": "fonts/Roboto-Black.59eb3601.woff2"
- },
- {
- "revision": "cc2fadc3928f2f223418887111947b40",
- "url": "fonts/Roboto-BlackItalic.cc2fadc3.woff"
- },
- {
- "revision": "f75569f8a5fab0893fa712d8c0d9c3fe",
- "url": "fonts/Roboto-BlackItalic.f75569f8.woff2"
- },
- {
- "revision": "50d75e48e0a3ddab1dd15d6bfb9d3700",
- "url": "fonts/Roboto-Bold.50d75e48.woff"
- },
- {
- "revision": "b52fac2bb93c5858f3f2675e4b52e1de",
- "url": "fonts/Roboto-Bold.b52fac2b.woff2"
- },
- {
- "revision": "4fe0f73cc919ba2b7a3c36e4540d725c",
- "url": "fonts/Roboto-BoldItalic.4fe0f73c.woff"
- },
- {
- "revision": "94008e69aaf05da75c0bbf8f8bb0db41",
- "url": "fonts/Roboto-BoldItalic.94008e69.woff2"
- },
- {
- "revision": "c73eb1ceba3321a80a0aff13ad373cb4",
- "url": "fonts/Roboto-Light.c73eb1ce.woff"
- },
- {
- "revision": "d26871e8149b5759f814fd3c7a4f784b",
- "url": "fonts/Roboto-Light.d26871e8.woff2"
- },
- {
- "revision": "13efe6cbc10b97144a28310ebdeda594",
- "url": "fonts/Roboto-LightItalic.13efe6cb.woff"
- },
- {
- "revision": "e8eaae902c3a4dacb9a5062667e10576",
- "url": "fonts/Roboto-LightItalic.e8eaae90.woff2"
- },
- {
- "revision": "1d6594826615607f6dc860bb49258acb",
- "url": "fonts/Roboto-Medium.1d659482.woff"
- },
- {
- "revision": "90d1676003d9c28c04994c18bfd8b558",
- "url": "fonts/Roboto-Medium.90d16760.woff2"
- },
- {
- "revision": "13ec0eb5bdb821ff4930237d7c9f943f",
- "url": "fonts/Roboto-MediumItalic.13ec0eb5.woff2"
- },
- {
- "revision": "83e114c316fcc3f23f524ec3e1c65984",
- "url": "fonts/Roboto-MediumItalic.83e114c3.woff"
- },
- {
- "revision": "35b07eb2f8711ae08d1f58c043880930",
- "url": "fonts/Roboto-Regular.35b07eb2.woff"
- },
- {
- "revision": "73f0a88bbca1bec19fb1303c689d04c6",
- "url": "fonts/Roboto-Regular.73f0a88b.woff2"
- },
- {
- "revision": "4357beb823a5f8d65c260f045d9e019a",
- "url": "fonts/Roboto-RegularItalic.4357beb8.woff2"
- },
- {
- "revision": "f5902d5ef961717ed263902fc429e6ae",
- "url": "fonts/Roboto-RegularItalic.f5902d5e.woff"
- },
- {
- "revision": "ad538a69b0e8615ed0419c4529344ffc",
- "url": "fonts/Roboto-Thin.ad538a69.woff2"
- },
- {
- "revision": "d3b47375afd904983d9be8d6e239a949",
- "url": "fonts/Roboto-Thin.d3b47375.woff"
- },
- {
- "revision": "5b4a33e176ff736a74f0ca2dd9e6b396",
- "url": "fonts/Roboto-ThinItalic.5b4a33e1.woff2"
- },
- {
- "revision": "8a96edbbcd9a6991d79371aed0b0288e",
- "url": "fonts/Roboto-ThinItalic.8a96edbb.woff"
- },
- {
- "revision": "7305b29c7526c212938516a0717e5ccd",
- "url": "img/default_artist.7305b29c.png"
- },
- {
- "revision": "813f9dad5c3f55bddb15abc0b68f847b",
- "url": "img/file.813f9dad.png"
- },
- {
- "revision": "e97b001ef85d818668c7c8c031283795",
- "url": "img/hires.e97b001e.png"
- },
- {
- "revision": "29fe3282407f51338f27ae7bc33d8513",
- "url": "img/homeassistant.29fe3282.png"
- },
- {
- "revision": "4c4e488018bcf5af49d08a8a1434dd9b",
- "url": "img/http_streamer.4c4e4880.png"
- },
- {
- "revision": "4db55f47d3079cd17637da3220b953e2",
- "url": "img/info_gradient.4db55f47.jpg"
- },
- {
- "revision": "c079bd979828319b9104eae3c39cc373",
- "url": "img/logo.c079bd97.png"
- },
- {
- "revision": "c7eb9a768cf919b7eae7f80ce7100f8f",
- "url": "img/qobuz.c7eb9a76.png"
- },
- {
- "revision": "72e2fecbb918cb44d850686550c9a335",
- "url": "img/sonos.72e2fecb.png"
- },
- {
- "revision": "1f3fb1afff253402ff14288344ef1adc",
- "url": "img/spotify.1f3fb1af.png"
- },
- {
- "revision": "6063122339ae24244df236a92769470d",
- "url": "img/squeezebox.60631223.png"
- },
- {
- "revision": "ca1c1bb082ed1b32e4a7563a85279149",
- "url": "img/tunein.ca1c1bb0.png"
- },
- {
- "revision": "798ba28fac7cd93ad48b7bf28cce3f52",
- "url": "img/web.798ba28f.png"
- },
- {
- "revision": "8e1a0da98ad9d90c423b2b03ccb13033",
- "url": "img/webplayer.8e1a0da9.png"
- },
- {
- "revision": "ad7566c2fd3584e47d0dd7c7bbf78d38",
- "url": "index.html"
- },
- {
- "revision": "47f7ec2e021f6ee60d2e",
- "url": "js/app.ddc40933.js"
- },
- {
- "revision": "3bf0e816e61b5995b70d",
- "url": "js/chunk-vendors.ee1264d7.js"
- },
- {
- "revision": "a6e5dcf7bcb21fbdb800",
- "url": "js/config.06165bdd.js"
- },
- {
- "revision": "276e9bcee543fb0e0ca6",
- "url": "js/config~search.9f3e890b.js"
- },
- {
- "revision": "7288c024fa43c6b41ad1",
- "url": "js/itemdetails.f383b9f8.js"
- },
- {
- "revision": "f99e5094257d36798190",
- "url": "js/itemdetails~playerqueue~search.1e2b2bfd.js"
- },
- {
- "revision": "0a890e6ef0f92634e08e",
- "url": "js/playerqueue.231c77e4.js"
- },
- {
- "revision": "53b54038208d082bb030",
- "url": "js/search.6612f8cb.js"
- },
- {
- "revision": "a69fc7789e4488064e5e6c87b668ce90",
- "url": "manifest.json"
- },
- {
- "revision": "b6216d61c03e6ce0c9aea6ca7808f7ca",
- "url": "robots.txt"
- }
-]);
\ No newline at end of file
--- /dev/null
+self.__precacheManifest = (self.__precacheManifest || []).concat([
+ {
+ "revision": "c54dc4fcdf6210d16493",
+ "url": "css/app.70c10f28.css"
+ },
+ {
+ "revision": "3bf0e816e61b5995b70d",
+ "url": "css/chunk-vendors.7d5374e7.css"
+ },
+ {
+ "revision": "a6e5dcf7bcb21fbdb800",
+ "url": "css/config.18def958.css"
+ },
+ {
+ "revision": "276e9bcee543fb0e0ca6",
+ "url": "css/config~search.af60f7e1.css"
+ },
+ {
+ "revision": "a781ab0645797f680c86",
+ "url": "css/itemdetails.0e5e583e.css"
+ },
+ {
+ "revision": "f99e5094257d36798190",
+ "url": "css/itemdetails~playerqueue~search.93e2919b.css"
+ },
+ {
+ "revision": "0509ab09c1b0d2200a4135803c91d6ce",
+ "url": "fonts/MaterialIcons-Regular.0509ab09.woff2"
+ },
+ {
+ "revision": "29b882f018fa6fe75fd338aaae6235b8",
+ "url": "fonts/MaterialIcons-Regular.29b882f0.woff"
+ },
+ {
+ "revision": "96c476804d7a788cc1c05351b287ee41",
+ "url": "fonts/MaterialIcons-Regular.96c47680.eot"
+ },
+ {
+ "revision": "da4ea5cdfca6b3baab285741f5ccb59f",
+ "url": "fonts/MaterialIcons-Regular.da4ea5cd.ttf"
+ },
+ {
+ "revision": "313a65630d341645c13e4f2a0364381d",
+ "url": "fonts/Roboto-Black.313a6563.woff"
+ },
+ {
+ "revision": "59eb3601394dd87f30f82433fb39dd94",
+ "url": "fonts/Roboto-Black.59eb3601.woff2"
+ },
+ {
+ "revision": "cc2fadc3928f2f223418887111947b40",
+ "url": "fonts/Roboto-BlackItalic.cc2fadc3.woff"
+ },
+ {
+ "revision": "f75569f8a5fab0893fa712d8c0d9c3fe",
+ "url": "fonts/Roboto-BlackItalic.f75569f8.woff2"
+ },
+ {
+ "revision": "50d75e48e0a3ddab1dd15d6bfb9d3700",
+ "url": "fonts/Roboto-Bold.50d75e48.woff"
+ },
+ {
+ "revision": "b52fac2bb93c5858f3f2675e4b52e1de",
+ "url": "fonts/Roboto-Bold.b52fac2b.woff2"
+ },
+ {
+ "revision": "4fe0f73cc919ba2b7a3c36e4540d725c",
+ "url": "fonts/Roboto-BoldItalic.4fe0f73c.woff"
+ },
+ {
+ "revision": "94008e69aaf05da75c0bbf8f8bb0db41",
+ "url": "fonts/Roboto-BoldItalic.94008e69.woff2"
+ },
+ {
+ "revision": "c73eb1ceba3321a80a0aff13ad373cb4",
+ "url": "fonts/Roboto-Light.c73eb1ce.woff"
+ },
+ {
+ "revision": "d26871e8149b5759f814fd3c7a4f784b",
+ "url": "fonts/Roboto-Light.d26871e8.woff2"
+ },
+ {
+ "revision": "13efe6cbc10b97144a28310ebdeda594",
+ "url": "fonts/Roboto-LightItalic.13efe6cb.woff"
+ },
+ {
+ "revision": "e8eaae902c3a4dacb9a5062667e10576",
+ "url": "fonts/Roboto-LightItalic.e8eaae90.woff2"
+ },
+ {
+ "revision": "1d6594826615607f6dc860bb49258acb",
+ "url": "fonts/Roboto-Medium.1d659482.woff"
+ },
+ {
+ "revision": "90d1676003d9c28c04994c18bfd8b558",
+ "url": "fonts/Roboto-Medium.90d16760.woff2"
+ },
+ {
+ "revision": "13ec0eb5bdb821ff4930237d7c9f943f",
+ "url": "fonts/Roboto-MediumItalic.13ec0eb5.woff2"
+ },
+ {
+ "revision": "83e114c316fcc3f23f524ec3e1c65984",
+ "url": "fonts/Roboto-MediumItalic.83e114c3.woff"
+ },
+ {
+ "revision": "35b07eb2f8711ae08d1f58c043880930",
+ "url": "fonts/Roboto-Regular.35b07eb2.woff"
+ },
+ {
+ "revision": "73f0a88bbca1bec19fb1303c689d04c6",
+ "url": "fonts/Roboto-Regular.73f0a88b.woff2"
+ },
+ {
+ "revision": "4357beb823a5f8d65c260f045d9e019a",
+ "url": "fonts/Roboto-RegularItalic.4357beb8.woff2"
+ },
+ {
+ "revision": "f5902d5ef961717ed263902fc429e6ae",
+ "url": "fonts/Roboto-RegularItalic.f5902d5e.woff"
+ },
+ {
+ "revision": "ad538a69b0e8615ed0419c4529344ffc",
+ "url": "fonts/Roboto-Thin.ad538a69.woff2"
+ },
+ {
+ "revision": "d3b47375afd904983d9be8d6e239a949",
+ "url": "fonts/Roboto-Thin.d3b47375.woff"
+ },
+ {
+ "revision": "5b4a33e176ff736a74f0ca2dd9e6b396",
+ "url": "fonts/Roboto-ThinItalic.5b4a33e1.woff2"
+ },
+ {
+ "revision": "8a96edbbcd9a6991d79371aed0b0288e",
+ "url": "fonts/Roboto-ThinItalic.8a96edbb.woff"
+ },
+ {
+ "revision": "7305b29c7526c212938516a0717e5ccd",
+ "url": "img/default_artist.7305b29c.png"
+ },
+ {
+ "revision": "813f9dad5c3f55bddb15abc0b68f847b",
+ "url": "img/file.813f9dad.png"
+ },
+ {
+ "revision": "e97b001ef85d818668c7c8c031283795",
+ "url": "img/hires.e97b001e.png"
+ },
+ {
+ "revision": "29fe3282407f51338f27ae7bc33d8513",
+ "url": "img/homeassistant.29fe3282.png"
+ },
+ {
+ "revision": "4c4e488018bcf5af49d08a8a1434dd9b",
+ "url": "img/http_streamer.4c4e4880.png"
+ },
+ {
+ "revision": "4db55f47d3079cd17637da3220b953e2",
+ "url": "img/info_gradient.4db55f47.jpg"
+ },
+ {
+ "revision": "c079bd979828319b9104eae3c39cc373",
+ "url": "img/logo.c079bd97.png"
+ },
+ {
+ "revision": "c7eb9a768cf919b7eae7f80ce7100f8f",
+ "url": "img/qobuz.c7eb9a76.png"
+ },
+ {
+ "revision": "72e2fecbb918cb44d850686550c9a335",
+ "url": "img/sonos.72e2fecb.png"
+ },
+ {
+ "revision": "1f3fb1afff253402ff14288344ef1adc",
+ "url": "img/spotify.1f3fb1af.png"
+ },
+ {
+ "revision": "6063122339ae24244df236a92769470d",
+ "url": "img/squeezebox.60631223.png"
+ },
+ {
+ "revision": "ca1c1bb082ed1b32e4a7563a85279149",
+ "url": "img/tunein.ca1c1bb0.png"
+ },
+ {
+ "revision": "798ba28fac7cd93ad48b7bf28cce3f52",
+ "url": "img/web.798ba28f.png"
+ },
+ {
+ "revision": "8e1a0da98ad9d90c423b2b03ccb13033",
+ "url": "img/webplayer.8e1a0da9.png"
+ },
+ {
+ "revision": "512d658dad586a7266dd665a6731903b",
+ "url": "index.html"
+ },
+ {
+ "revision": "c54dc4fcdf6210d16493",
+ "url": "js/app.3be71134.js"
+ },
+ {
+ "revision": "3bf0e816e61b5995b70d",
+ "url": "js/chunk-vendors.ee1264d7.js"
+ },
+ {
+ "revision": "a6e5dcf7bcb21fbdb800",
+ "url": "js/config.06165bdd.js"
+ },
+ {
+ "revision": "276e9bcee543fb0e0ca6",
+ "url": "js/config~search.9f3e890b.js"
+ },
+ {
+ "revision": "a781ab0645797f680c86",
+ "url": "js/itemdetails.46a862f8.js"
+ },
+ {
+ "revision": "f99e5094257d36798190",
+ "url": "js/itemdetails~playerqueue~search.1e2b2bfd.js"
+ },
+ {
+ "revision": "2067da991c7172496be6",
+ "url": "js/playerqueue.5bd65be6.js"
+ },
+ {
+ "revision": "53b54038208d082bb030",
+ "url": "js/search.6612f8cb.js"
+ },
+ {
+ "revision": "a69fc7789e4488064e5e6c87b668ce90",
+ "url": "manifest.json"
+ },
+ {
+ "revision": "b6216d61c03e6ce0c9aea6ca7808f7ca",
+ "url": "robots.txt"
+ }
+]);
\ No newline at end of file
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
- "precache-manifest.990472d7279e3a7045e6be162fae645b.js"
+ "precache-manifest.add5e207ea18caf7f821662387e34afc.js"
);
workbox.core.setCacheNameDetails({prefix: "musicassistant-frontend"});