From 39bcb1155afe1453f1b54172c44b4c5f98d58f38 Mon Sep 17 00:00:00 2001 From: marcelveldt Date: Tue, 12 Nov 2019 00:33:33 +0100 Subject: [PATCH] show stream details in OSD --- frontend/src/assets/crossfade.png | Bin 0 -> 2473 bytes frontend/src/assets/ogg.png | Bin 0 -> 3209 bytes frontend/src/components/InfoHeader.vue | 14 +--- frontend/src/components/ListviewItem.vue | 24 ++++-- frontend/src/components/PlayerOSD.vue | 73 ++++++++++++++++++ frontend/src/locales/en.json | 6 +- frontend/src/locales/nl.json | 4 +- frontend/src/plugins/server.js | 4 +- frontend/src/views/ItemDetails.vue | 3 - frontend/src/views/PlayerQueue.vue | 8 +- music_assistant/http_streamer.py | 2 + music_assistant/models/player_queue.py | 4 +- music_assistant/music_manager.py | 42 +++++----- music_assistant/musicproviders/qobuz.py | 2 + music_assistant/musicproviders/spotify.py | 2 + .../{app.53896a2f.css => app.70c10f28.css} | 2 +- .../web/css/itemdetails.0e5e583e.css | 1 + .../web/css/itemdetails.742ba64e.css | 1 - music_assistant/web/index.html | 2 +- music_assistant/web/js/app.3be71134.js | 2 + music_assistant/web/js/app.3be71134.js.map | 1 + music_assistant/web/js/app.ddc40933.js | 2 - music_assistant/web/js/app.ddc40933.js.map | 1 - .../web/js/itemdetails.46a862f8.js | 2 + .../web/js/itemdetails.46a862f8.js.map | 1 + .../web/js/itemdetails.f383b9f8.js | 2 - .../web/js/itemdetails.f383b9f8.js.map | 1 - .../web/js/playerqueue.231c77e4.js | 2 - .../web/js/playerqueue.231c77e4.js.map | 1 - .../web/js/playerqueue.5bd65be6.js | 2 + .../web/js/playerqueue.5bd65be6.js.map | 1 + ...ifest.add5e207ea18caf7f821662387e34afc.js} | 22 +++--- music_assistant/web/service-worker.js | 2 +- 33 files changed, 167 insertions(+), 69 deletions(-) create mode 100644 frontend/src/assets/crossfade.png create mode 100644 frontend/src/assets/ogg.png rename music_assistant/web/css/{app.53896a2f.css => app.70c10f28.css} (72%) create mode 100644 music_assistant/web/css/itemdetails.0e5e583e.css delete mode 100644 music_assistant/web/css/itemdetails.742ba64e.css create mode 100644 music_assistant/web/js/app.3be71134.js create mode 100644 music_assistant/web/js/app.3be71134.js.map delete mode 100644 music_assistant/web/js/app.ddc40933.js delete mode 100644 music_assistant/web/js/app.ddc40933.js.map create mode 100644 music_assistant/web/js/itemdetails.46a862f8.js create mode 100644 music_assistant/web/js/itemdetails.46a862f8.js.map delete mode 100644 music_assistant/web/js/itemdetails.f383b9f8.js delete mode 100644 music_assistant/web/js/itemdetails.f383b9f8.js.map delete mode 100644 music_assistant/web/js/playerqueue.231c77e4.js delete mode 100644 music_assistant/web/js/playerqueue.231c77e4.js.map create mode 100644 music_assistant/web/js/playerqueue.5bd65be6.js create mode 100644 music_assistant/web/js/playerqueue.5bd65be6.js.map rename music_assistant/web/{precache-manifest.990472d7279e3a7045e6be162fae645b.js => precache-manifest.add5e207ea18caf7f821662387e34afc.js} (92%) diff --git a/frontend/src/assets/crossfade.png b/frontend/src/assets/crossfade.png new file mode 100644 index 0000000000000000000000000000000000000000..26c5df0dd6fc6af2790e079e469def99bc564c61 GIT binary patch literal 2473 zcma)8dpOhkAKz@v6!UC4Y%|1GZmDgNFC}T(MNvd9#g=fwFU+Mg6&Y!0jg8!LI1VM{ zmWrJ&Y-G_9HOfiKGO3ef<$lXqzvub=bN>2$p3nR9em<}F>;3**p6ByhI+0QL-&sZf!68$FfgdN1g*yQ zF7n$ZbwwF2m-LM-9`2^;p;Xj>+Vb6f>)_jeEiWjNFE)%7_MM(BN^&|=`>>VS zC}QN6PBCvzh4x&%txFdX82{>Cw9Pl>=Z0ZJ&>GDxkbKC#8wj5Yykvl@JgF=9wC0*< z6x?y@%yD300r+R|DadN!D99H)r_l@fS^#{7Fh!PR-%Jw+^qv_^uClb*9KF3 zCdFU`9W)27w>*QcUz2Pi-SjCaJD3m}ZzGT{>TC@13xE!pNL5r6uTDntYqdDNVfYg3 zggR|NiLQx$@06o+en9lvn1hPkK_z=IM}U2t^znN;d5zYo$IOko8h2{;ZA;2J-q2(d zZ()+jqT|DvChE*1GNb(l%)3wSpJEZ7O#(d{txp{b?^Z5s`9s)WHOVg7xN|jV8<5jM z;Z1p3JqVX0ucSCX>!lyo(1lD!p2^7%+)72& zBOZ0Lo~83E<`@4|ff3G+H0GbrPrXbGP8Pp!zY#0j9%K6MMNN~n$4MuTqr&;ziXlhP z=D?3Jt?Q+~S=RZPkp$nyZzt;h(c236gic(0qpq}kx}npB=_W1>e@&?ppMn?|ID9Tf z(-!V#qYM-+*i~NiE4#mc@EoBv*2$w%JIQzWcHu~IFj;+`g_*62+K%kyqml5fp-m5q z*8BGT7u~_~`HD9=iB$chNQZCFAB?aU08phXS467fL)(pAaF2gwNXgxjdrRcr0iof6K2pKxW z9dB! z6WNh?iK1tpNe@fWJzUZU^cQc!7hPMdipB5(nu}vd4UVlO0kSUBC!KA9O`yi+shBG_ ziHN;b0(uZE>N>zGja^~?+ws1O!4fO>r#SRUxr^*dw$OjnCHOUH=p^K(9AUI8r zRtyG6f!p-%^RY|&maO{0fq6q>n zlU*sL2e5GAB$4`dY!ggH7eDRFyN96-@+)0r&vmGBkn*EGzFNqRKlDks(+#Sw)r?`R zkv-R?dZn_bFACSQa4UJI39k!x6J*b$spJc6I6s7-d`84$f^pc5Gj!wf3v@n3Iqis2 z9yET)AKlYdwR*?t0lU&v9n;8P|4Oxj)INy|XE=$LzC}%!!Y|kfY_A%3RT&H_tQ1$_ zFgro~Ra}>gzWDd$IWx2zkQc-fhPwv)QHl;Y%vKOZw-Z4mBc6tfe$aLdt+^80Ws|0( zT@ZW3$eiqQNTScWH{p^OUaX3?eKEUX%}LA*&+_5qy90tdm9x1audln~1T3QRV_lwE zVpKmY43F*x?%7}kqp;e(wKAFF<_7V%^BQk=HK zGI?_N(@>K8SV36djsh_*@2=wrVP*y#L>OFe~O2rmV1g$VX@h{|UT+szX7 z#e~U}E8JW?Y&T&0gn%zHeN4GI^#)uL!D%o;^BQYGr{rgG&G|+u%K7FuSJ0meB=W|z zYWpC~<*cw4OlEgo8jt92eXncXq`l3JDs^Z!V zMP3+RlyTw%w}r{}hmt^d9S&IK(02LbSS;d>iP%7Vqq@9*#{kF~RBApvr(h^t6dvR) zojIYN>81q`dx&95f@ECFms(_clzC$7JD-emhsC<#rsLczDUn*yo}2N@yB?oQNs=5o oAGyEmMC9&&YZtYY$!a?X&Tl$!?-mORRckE}W3Pv6-5yrzKm8_QyZ`_I literal 0 HcmV?d00001 diff --git a/frontend/src/assets/ogg.png b/frontend/src/assets/ogg.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d69145aea8b15fa862d5f3b28103cc892cceef GIT binary patch literal 3209 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 CM 2) return 'flac.png' - }, - getFileFormatDesc (provider) { - var desc = '' - if (provider.details) desc += ' ' + provider.details - return desc } } }) diff --git a/frontend/src/components/ListviewItem.vue b/frontend/src/components/ListviewItem.vue index 45fe640f..f9438914 100644 --- a/frontend/src/components/ListviewItem.vue +++ b/frontend/src/components/ListviewItem.vue @@ -2,7 +2,7 @@
- + + + {{ isHiRes }} + @@ -170,10 +175,20 @@ export default Vue.extend({ 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 () { }, @@ -184,7 +199,6 @@ export default Vue.extend({ 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 diff --git a/frontend/src/components/PlayerOSD.vue b/frontend/src/components/PlayerOSD.vue index b11d61dc..9f744a02 100644 --- a/frontend/src/components/PlayerOSD.vue +++ b/frontend/src/components/PlayerOSD.vue @@ -54,6 +54,66 @@ + + + + + + {{ $t('stream_details') }} + + + + + + {{ streamDetails.provider }} + + + + + + + + + {{ streamDetails.sample_rate/1000 }} kHz / {{ streamDetails.bit_depth }} bits + + + +
+ + + + + + {{ $t('crossfade_enabled') }} + + + +
+
+ + + volume_up + + + {{ streamVolumeLevelAdjustment }} + + + +
+
+
+
@@ -242,6 +302,19 @@ export default Vue.extend({ }, 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 () { diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 23eefca9..45b27d81 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -87,8 +87,8 @@ "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", @@ -97,6 +97,8 @@ "enable_shuffle" : "Enable shuffle", "disable_shuffle" : "Disable shuffle", "read_more": "read more", + "stream_details": "Streamdetails", + "crossfade_enabled": "Crossfade enabled", "state" : { "playing" : "playing", "stopped" : "stopped", diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index 8dae4e59..db2e1110 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -88,7 +88,7 @@ "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", @@ -97,6 +97,8 @@ "enable_shuffle" : "Shuffle inschakelen", "disable_shuffle" : "Shuffle uitschakelen", "read_more": "meer lezen", + "stream_details": "Streamdetails", + "crossfade_enabled": "Crossfade ingeschakeld", "state" : { "playing" : "afspelen", "stopped" : "gestopt", diff --git a/frontend/src/plugins/server.js b/frontend/src/plugins/server.js index 62a50c18..33745a46 100644 --- a/frontend/src/plugins/server.js +++ b/frontend/src/plugins/server.js @@ -68,7 +68,9 @@ const server = new Vue({ } 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 '' }, diff --git a/frontend/src/views/ItemDetails.vue b/frontend/src/views/ItemDetails.vue index 47753391..9b09ca38 100644 --- a/frontend/src/views/ItemDetails.vue +++ b/frontend/src/views/ItemDetails.vue @@ -112,9 +112,6 @@ export default { } this.retrieveInfos() }, - beforeDestroy () { - this.$server.$off('refresh_listing') - }, methods: { retrieveInfos () { // retrieve the item details diff --git a/frontend/src/views/PlayerQueue.vue b/frontend/src/views/PlayerQueue.vue index 531ffdb3..34b4da29 100644 --- a/frontend/src/views/PlayerQueue.vue +++ b/frontend/src/views/PlayerQueue.vue @@ -1,6 +1,6 @@