From 132ddda4240fc16516d08e054efe09f0786eb434 Mon Sep 17 00:00:00 2001 From: marcelveldt Date: Tue, 19 Nov 2019 22:39:32 +0100 Subject: [PATCH] add sorting options + various small fixes and pep compliancy --- frontend/src/components/InfoHeader.vue | 3 +- frontend/src/components/ItemsListing.vue | 202 +++++++ frontend/src/locales/en.json | 6 + frontend/src/locales/nl.json | 6 + frontend/src/plugins/server.js | 8 +- frontend/src/views/Browse.vue | 166 +----- frontend/src/views/ItemDetails.vue | 64 +- frontend/src/views/PlaylistDetails.vue | 44 ++ frontend/src/views/Search.vue | 8 +- music_assistant/database.py | 562 ++++++++++++------ music_assistant/http_streamer.py | 41 +- music_assistant/metadata.py | 156 +++-- music_assistant/models/musicprovider.py | 20 +- music_assistant/music_manager.py | 11 +- music_assistant/musicproviders/qobuz.py | 29 +- music_assistant/musicproviders/spotify.py | 23 +- music_assistant/playerproviders/squeezebox.py | 2 +- .../{app.521c5ba6.css => app.46b4bddf.css} | 2 +- .../web/css/itemdetails.0e5e583e.css | 1 - .../web/css/itemdetails.d16bd55e.css | 1 + music_assistant/web/index.html | 2 +- music_assistant/web/js/app.ae6509d8.js | 2 + music_assistant/web/js/app.ae6509d8.js.map | 1 + music_assistant/web/js/app.bc691fda.js | 2 - music_assistant/web/js/app.bc691fda.js.map | 1 - ....a9559baf.js => chunk-vendors.0d5ed3c8.js} | 6 +- .../web/js/chunk-vendors.0d5ed3c8.js.map | 1 + .../web/js/chunk-vendors.a9559baf.js.map | 1 - .../web/js/itemdetails.46a862f8.js | 2 - .../web/js/itemdetails.46a862f8.js.map | 1 - .../web/js/itemdetails.aa9c6242.js | 2 + .../web/js/itemdetails.aa9c6242.js.map | 1 + music_assistant/web/js/search.1953c63a.js | 2 + music_assistant/web/js/search.1953c63a.js.map | 1 + music_assistant/web/js/search.6612f8cb.js | 2 - music_assistant/web/js/search.6612f8cb.js.map | 1 - ...ifest.6fd68e14f638c9487493c5cedb5cb097.js} | 28 +- music_assistant/web/service-worker.js | 2 +- 38 files changed, 861 insertions(+), 552 deletions(-) create mode 100644 frontend/src/components/ItemsListing.vue create mode 100644 frontend/src/views/PlaylistDetails.vue rename music_assistant/web/css/{app.521c5ba6.css => app.46b4bddf.css} (94%) delete mode 100644 music_assistant/web/css/itemdetails.0e5e583e.css create mode 100644 music_assistant/web/css/itemdetails.d16bd55e.css create mode 100644 music_assistant/web/js/app.ae6509d8.js create mode 100644 music_assistant/web/js/app.ae6509d8.js.map delete mode 100644 music_assistant/web/js/app.bc691fda.js delete mode 100644 music_assistant/web/js/app.bc691fda.js.map rename music_assistant/web/js/{chunk-vendors.a9559baf.js => chunk-vendors.0d5ed3c8.js} (92%) create mode 100644 music_assistant/web/js/chunk-vendors.0d5ed3c8.js.map delete mode 100644 music_assistant/web/js/chunk-vendors.a9559baf.js.map delete mode 100644 music_assistant/web/js/itemdetails.46a862f8.js delete mode 100644 music_assistant/web/js/itemdetails.46a862f8.js.map create mode 100644 music_assistant/web/js/itemdetails.aa9c6242.js create mode 100644 music_assistant/web/js/itemdetails.aa9c6242.js.map create mode 100644 music_assistant/web/js/search.1953c63a.js create mode 100644 music_assistant/web/js/search.1953c63a.js.map delete mode 100644 music_assistant/web/js/search.6612f8cb.js delete mode 100644 music_assistant/web/js/search.6612f8cb.js.map rename music_assistant/web/{precache-manifest.7f0954cd4623c3d2f5436871e61dd4fa.js => precache-manifest.6fd68e14f638c9487493c5cedb5cb097.js} (90%) diff --git a/frontend/src/components/InfoHeader.vue b/frontend/src/components/InfoHeader.vue index deed2708..d5b01052 100644 --- a/frontend/src/components/InfoHeader.vue +++ b/frontend/src/components/InfoHeader.vue @@ -6,11 +6,12 @@ class="white--text" :img="require('../assets/info_gradient.jpg')" style="margin-top:-60px;" + height="290" > +
+ + {{ items.length + " " + $t("items") }} + + + + + + + + + + arrow_upward + arrow_downward + + + + + + + + + view_list + grid_on + + + + + +
+ + + + + diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 45b27d81..08d330f5 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -22,6 +22,12 @@ "remove_playlist" : "Remove from playlist", "no_player" : "No player selected", "reboot_required" : "A reboot is required to activate the new settings!", + "sort_name" : "Sort by name", + "sort_artist" : "Sort by artist name", + "sort_album" : "Sort by album name", + "sort_date" : "Sort by date", + "sort_default" : "Default sorting", + "items" : "item(s)", "conf" : { "enabled" : "Enabled", "base" : "Generic settings", diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index db2e1110..688eaed3 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -22,6 +22,12 @@ "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!", + "sort_name" : "Sorteer op naam", + "sort_artist" : "Sorteer op artiest", + "sort_album" : "Sorteer op album", + "sort_date" : "Sorteer op datum", + "sort_default" : "Standaard sortering", + "items" : "item(s)", "conf" : { "enabled" : "Ingeschakeld", "base" : "Algemene instellingen", diff --git a/frontend/src/plugins/server.js b/frontend/src/plugins/server.js index 33745a46..169d5f43 100644 --- a/frontend/src/plugins/server.js +++ b/frontend/src/plugins/server.js @@ -57,8 +57,6 @@ const server = new Vue({ getImageUrl (mediaItem, imageType = 'image', size = 0) { // format the image url if (!mediaItem || !mediaItem.media_type) return '' - if (mediaItem.media_type === 4 && imageType !== 'image') return '' - if (mediaItem.media_type === 5 && imageType !== 'image') return '' if (mediaItem.provider === 'database' && imageType === 'image') { return `${this._address}api/${mediaItem.media_type}/${mediaItem.item_id}/thumb?provider=${mediaItem.provider}&size=${size}` } else if (mediaItem.metadata && mediaItem.metadata[imageType]) { @@ -71,6 +69,9 @@ const server = new Vue({ 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 if (imageType === 'fanart') { + // fallback to normal image instead of fanart + return this.getImageUrl(mediaItem, 'image', size) } else return '' }, @@ -109,7 +110,7 @@ const server = new Vue({ return result.data }, - async getAllItems (endpoint, list, params = {}) { + async getAllItems (endpoint, list, params = null) { // retrieve all items and fill list let url = this._address + 'api/' + endpoint if (params) { @@ -117,6 +118,7 @@ const server = new Vue({ url += '?' + urlParams.toString() } let index = 0 + Vue.$log.debug('getAllItems', url) oboe(url) .node('items.*', function (item) { Vue.set(list, index, item) diff --git a/frontend/src/views/Browse.vue b/frontend/src/views/Browse.vue index 1038038e..d7efed7b 100644 --- a/frontend/src/views/Browse.vue +++ b/frontend/src/views/Browse.vue @@ -1,183 +1,29 @@ diff --git a/frontend/src/views/ItemDetails.vue b/frontend/src/views/ItemDetails.vue index 9b09ca38..c7b4260b 100644 --- a/frontend/src/views/ItemDetails.vue +++ b/frontend/src/views/ItemDetails.vue @@ -1,32 +1,12 @@