From 6924c76f4ce658ed3fabbd527045ffd271f2d635 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 2 Mar 2022 15:05:41 -0800 Subject: [PATCH] adds playlist track mapping --- src/i18n/en_US.json | 2 ++ src/i18n/source/en_US.json | 2 ++ src/main/base/store.ts | 3 +- src/renderer/index.js | 49 +++++++++++++++++++++------ src/renderer/views/pages/settings.ejs | 11 ++++++ 5 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index 88683bf5..9acdad54 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -352,6 +352,8 @@ "settings.option.experimental.compactUI": "Compact UI", "settings.option.experimental.close_button_hide": "Close Button Should Hide the Application", "settings.option.experimental.inline_playlists": "Inline Playlists and Albums", + "settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping", + "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists.", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 88683bf5..9acdad54 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -352,6 +352,8 @@ "settings.option.experimental.compactUI": "Compact UI", "settings.option.experimental.close_button_hide": "Close Button Should Hide the Application", "settings.option.experimental.inline_playlists": "Inline Playlists and Albums", + "settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping", + "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists.", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", diff --git a/src/main/base/store.ts b/src/main/base/store.ts index 17c1c4c2..f7bb8e36 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -118,7 +118,8 @@ export class Store { }, "advanced": { "AudioContext": false, - "experiments": [] + "experiments": [], + "playlistTrackMapping": true } } private migrations: any = {} diff --git a/src/renderer/index.js b/src/renderer/index.js index 75ce8e21..538a4c6b 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -15,6 +15,7 @@ const CiderCache = { return cache }, async putCache(file, data) { + console.log(`Caching ${file}`) ipcRenderer.invoke("put-cache", { file: file, data: JSON.stringify(data) @@ -201,7 +202,8 @@ const app = new Vue({ listing: [], details: {}, loadingState: 0, // 0 loading, 1 loaded, 2 error - id: "" + id: "", + trackMapping: {} }, webremoteurl: "", webremoteqr: "", @@ -388,7 +390,7 @@ const app = new Vue({ if (cursorPos[1] > window.innerHeight - cursorSize) { cursorPos[1] = window.innerHeight - cursorSize } - + // RIGHT STICK. if (scrollGroupY) { @@ -398,10 +400,10 @@ const app = new Vue({ } else if (gp.axes[3] < -stickDeadZone) { $(scrollGroupY).scrollTop($(scrollGroupY).scrollTop() + (gp.axes[3] * scrollSpeed)) elementFocusEnabled = false - }else { + } else { elementFocusEnabled = true } - } + } @@ -1400,10 +1402,12 @@ const app = new Vue({ } }) }, - async refreshPlaylists(localOnly = false) { + async refreshPlaylists(localOnly = false, trackMap = true) { let self = this let newListing = [] + let trackMapping = {} const cachedPlaylist = await CiderCache.getCache("library-playlists") + const cachedTrackMapping = await CiderCache.getCache("library-playlists-tracks") if (cachedPlaylist) { console.log("using cached playlists") @@ -1412,7 +1416,12 @@ const app = new Vue({ } else { console.log("playlist has no cache") } - if(localOnly) { + + if(cachedTrackMapping) { + console.log("using cached track mapping") + this.playlists.trackMapping = cachedTrackMapping + } + if (localOnly) { return } @@ -1427,12 +1436,26 @@ const app = new Vue({ playlist.children = [] playlist.tracks = [] try { - let tracks = await app.mk.api.v3.music(playlist.href + "/tracks").catch(e => { - // no tracks - }) - playlist.tracks = tracks.data - } catch (e) { } + if (trackMap) { + let tracks = await app.mk.api.v3.music(playlist.href + "/tracks").catch(e => { + // no tracks + e = null + }) + tracks.data.data.forEach(track => { + if (!trackMapping[track.id]) { + trackMapping[track.id] = [] + } + trackMapping[track.id].push(playlist.id) + if (typeof track.attributes.playParams.catalogId == "string") { + if (!trackMapping[track.attributes.playParams.catalogId]) { + trackMapping[track.attributes.playParams.catalogId] = [] + } + trackMapping[track.attributes.playParams.catalogId].push(playlist.id) + } + }) + } + } catch (e) { } if (playlist.type == "library-playlist-folders") { try { await deepScan(playlist.id).catch(e => { }) @@ -1449,6 +1472,10 @@ const app = new Vue({ this.library.backgroundNotification.show = false this.playlists.listing = newListing self.sortPlaylists() + if (trackMap) { + CiderCache.putCache("library-playlists-tracks", trackMapping) + this.playlists.trackMapping = trackMapping + } CiderCache.putCache("library-playlists", newListing) }, sortPlaylists() { diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index 1333a090..01d8b52b 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -673,6 +673,17 @@ +
+
+ {{$root.getLz('settings.option.advanced.playlistTrackMapping')}} +
+ {{$root.getLz('settings.option.advanced.playlistTrackMapping.description')}} +
+
+ +
+
+