From 061f0d32dce3a2c5a01d673c06c11dc87c4c9ee6 Mon Sep 17 00:00:00 2001 From: Core Date: Tue, 30 Aug 2022 12:47:25 +0100 Subject: [PATCH 001/210] 1.5.7 bump for main beta releases --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 445cecfe..93f76a1b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "cider", "applicationId": "Cider", "productName": "Cider", - "version": "1.5.6", + "version": "1.5.7", "description": "A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind.", "license": "AGPL-3.0", "main": "./build/index.js", From 17256e0c199f889dc8136ea2dfed5746d476aadc Mon Sep 17 00:00:00 2001 From: Core Date: Tue, 30 Aug 2022 13:00:57 +0100 Subject: [PATCH 002/210] marking betas as prerelease --- .circleci/config.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4da1dde0..1aa3c3e2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -142,12 +142,11 @@ jobs: echo "Attempting to create release for Cider v${APP_VERSION} on the ${CIRCLE_BRANCH} branch."; if [[ "${APP_VERSION}" = *"beta"* ]]; then echo $'**Beta Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese builds are considered bleeding edge, expect bugs and please do not use this as a representation of the fu ll app.\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-nightly-beta-releases).' > release-notes.md + gh release create "v${APP_VERSION}" --prerelease --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap else echo $'**Stable Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese are the most stable builds we can provide. If you experience any issues, please report them [here](https://github.com/ciderapp/cider/issues/new).\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-releases).' > release-notes.md + gh release create "v${APP_VERSION}" --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap fi; - gh release create "v${APP_VERSION}" --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap - - # Orchestrate our job run sequence workflows: From 27365d0c173e53708c5fcb42f3be2e2b38bc5df4 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 31 Aug 2022 00:45:06 +0700 Subject: [PATCH 003/210] trigger ci --- src/renderer/views/components/hello-world.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/views/components/hello-world.ejs b/src/renderer/views/components/hello-world.ejs index c2182458..1386bf63 100644 --- a/src/renderer/views/components/hello-world.ejs +++ b/src/renderer/views/components/hello-world.ejs @@ -11,4 +11,4 @@ } } }); - + From dff5b0c37cef26f0b9f97052cb9478cb9ea8925f Mon Sep 17 00:00:00 2001 From: Maikiwi Date: Tue, 30 Aug 2022 11:44:11 -0700 Subject: [PATCH 004/210] SPEEED --- src/renderer/audio/audio.js | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 62df318d..d894dbc1 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -839,49 +839,49 @@ const CiderAudio = { switch (destination) { case "spatial": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.spatialNode); console.debug("[Cider][Audio] llpw_n1 -> Spatial"); } catch (e) {} break; case "n6": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer2); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer2); console.debug("[Cider][Audio] llpw_n1 -> atmosphereRealizer2"); } catch (e) {} break; case "n5": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer1); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer1); console.debug("[Cider][Audio] llpw_n1 -> atmosphereRealizer1"); } catch (e) {} break; case "n4": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.audioNodes.vibrantbassNode[0]); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug("[Cider][Audio] llpw_n1 -> vibrantbassNode"); } catch (e) {} break; case "n3": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.audioBands[0]); console.debug("[Cider][Audio] llpw_n1 -> audioBands"); } catch (e) {} break; case "n2": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.audioNodes.opportunisticCorrection); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.opportunisticCorrection); console.debug("[Cider][Audio] llpw_n1 -> opportunisticCorrection"); } catch (e) {} break; case "n1": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.audioNodes.llpw[0]); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.llpw[0]); console.debug("[Cider][Audio] llpw_n1 -> llpw"); } catch (e) {} break; case "n0": try { - CiderAudio.audioNodes.llpw.at(-1).connect(CiderAudio.context.destination); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.context.destination); console.debug("[Cider][Audio] llpw_n1 -> destination"); } catch (e) {} break; @@ -910,50 +910,50 @@ const CiderAudio = { switch (destination) { case "spatial": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.spatialNode); console.debug("[Cider][Audio] vibrantbass_n4 -> Spatial"); } catch (e) {} break; case "n6": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer2); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer2); console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer2"); } catch (e) {} break; case "n5": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer1); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer1); console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer1"); } catch (e) {} break; case "n4": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.vibrantbassNode[0]); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug("[Cider][Audio] vibrantbass_n4 -> vibrantbassNode"); } catch (e) {} break; case "n3": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.audioBands[0]); console.debug("[Cider][Audio] vibrantbass_n4 -> audioBands"); } catch (e) {} break; case "n2": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.opportunisticCorrection); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.opportunisticCorrection); console.debug("[Cider][Audio] vibrantbass_n4 -> opportunisticCorrection"); } catch (e) {} break; case "n1": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.llpw[0]); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.llpw[0]); console.debug("[Cider][Audio] vibrantbass_n4 -> llpw"); } catch (e) {} break; case "n0": try { - CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.context.destination); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.context.destination); console.debug("[Cider][Audio] vibrantbass_n4 -> destination"); } catch (e) {} break; @@ -1168,48 +1168,48 @@ const CiderAudio = { switch (destination) { case "spatial": - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.spatialNode); console.debug("[Cider][Audio] Equalizer -> Spatial"); break; case "n6": try { - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer2); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer2); console.debug("[Cider][Audio] Equalizer -> atmosphereRealizer2"); } catch (e) {} break; case "n5": try { - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer1); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer1); console.debug("[Cider][Audio] Equalizer -> atmosphereRealizer1"); } catch (e) {} break; case "n4": try { - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.audioNodes.vibrantbassNode[0]); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug("[Cider][Audio] Equalizer -> vibrantbassNode"); } catch (e) {} break; case "n3": try { - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.audioBands[0]); console.debug("[Cider][Audio] Equalizer -> audioBands"); } catch (e) {} break; case "n2": try { - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.audioNodes.opportunisticCorrection); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.opportunisticCorrection); console.debug("[Cider][Audio] Equalizer -> opportunisticCorrection"); } catch (e) {} break; case "n1": try { - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.audioNodes.llpw[0]); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.llpw[0]); console.debug("[Cider][Audio] Equalizer -> llpw"); } catch (e) {} break; case "n0": try { - CiderAudio.audioNodes.audioBands.at(-1).connect(CiderAudio.context.destination); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.context.destination); console.debug("[Cider][Audio] Equalizer -> destination"); } catch (e) {} break; From a07bbdc95a6a2d7a34597af810c47929aa3c6831 Mon Sep 17 00:00:00 2001 From: maikirakiwi Date: Tue, 30 Aug 2022 18:44:46 +0000 Subject: [PATCH 005/210] chore: Prettified Code [ci skip] --- src/renderer/audio/audio.js | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index d894dbc1..c66a746c 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -839,49 +839,49 @@ const CiderAudio = { switch (destination) { case "spatial": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.audioNodes.spatialNode); console.debug("[Cider][Audio] llpw_n1 -> Spatial"); } catch (e) {} break; case "n6": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer2); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.audioNodes.atmosphereRealizer2); console.debug("[Cider][Audio] llpw_n1 -> atmosphereRealizer2"); } catch (e) {} break; case "n5": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer1); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.audioNodes.atmosphereRealizer1); console.debug("[Cider][Audio] llpw_n1 -> atmosphereRealizer1"); } catch (e) {} break; case "n4": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug("[Cider][Audio] llpw_n1 -> vibrantbassNode"); } catch (e) {} break; case "n3": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.audioNodes.audioBands[0]); console.debug("[Cider][Audio] llpw_n1 -> audioBands"); } catch (e) {} break; case "n2": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.opportunisticCorrection); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.audioNodes.opportunisticCorrection); console.debug("[Cider][Audio] llpw_n1 -> opportunisticCorrection"); } catch (e) {} break; case "n1": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.audioNodes.llpw[0]); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.audioNodes.llpw[0]); console.debug("[Cider][Audio] llpw_n1 -> llpw"); } catch (e) {} break; case "n0": try { - CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length-1].connect(CiderAudio.context.destination); + CiderAudio.audioNodes.llpw[CiderAudio.audioNodes.llpw.length - 1].connect(CiderAudio.context.destination); console.debug("[Cider][Audio] llpw_n1 -> destination"); } catch (e) {} break; @@ -910,50 +910,50 @@ const CiderAudio = { switch (destination) { case "spatial": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.audioNodes.spatialNode); console.debug("[Cider][Audio] vibrantbass_n4 -> Spatial"); } catch (e) {} break; case "n6": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer2); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.audioNodes.atmosphereRealizer2); console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer2"); } catch (e) {} break; case "n5": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer1); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.audioNodes.atmosphereRealizer1); console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer1"); } catch (e) {} break; case "n4": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug("[Cider][Audio] vibrantbass_n4 -> vibrantbassNode"); } catch (e) {} break; case "n3": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.audioNodes.audioBands[0]); console.debug("[Cider][Audio] vibrantbass_n4 -> audioBands"); } catch (e) {} break; case "n2": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.opportunisticCorrection); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.audioNodes.opportunisticCorrection); console.debug("[Cider][Audio] vibrantbass_n4 -> opportunisticCorrection"); } catch (e) {} break; case "n1": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.audioNodes.llpw[0]); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.audioNodes.llpw[0]); console.debug("[Cider][Audio] vibrantbass_n4 -> llpw"); } catch (e) {} break; case "n0": try { - CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length-1].connect(CiderAudio.context.destination); + CiderAudio.audioNodes.vibrantbassNode[CiderAudio.audioNodes.vibrantbassNode.length - 1].connect(CiderAudio.context.destination); console.debug("[Cider][Audio] vibrantbass_n4 -> destination"); } catch (e) {} break; @@ -1168,48 +1168,48 @@ const CiderAudio = { switch (destination) { case "spatial": - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.audioNodes.spatialNode); console.debug("[Cider][Audio] Equalizer -> Spatial"); break; case "n6": try { - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer2); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.audioNodes.atmosphereRealizer2); console.debug("[Cider][Audio] Equalizer -> atmosphereRealizer2"); } catch (e) {} break; case "n5": try { - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.atmosphereRealizer1); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.audioNodes.atmosphereRealizer1); console.debug("[Cider][Audio] Equalizer -> atmosphereRealizer1"); } catch (e) {} break; case "n4": try { - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug("[Cider][Audio] Equalizer -> vibrantbassNode"); } catch (e) {} break; case "n3": try { - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.audioNodes.audioBands[0]); console.debug("[Cider][Audio] Equalizer -> audioBands"); } catch (e) {} break; case "n2": try { - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.opportunisticCorrection); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.audioNodes.opportunisticCorrection); console.debug("[Cider][Audio] Equalizer -> opportunisticCorrection"); } catch (e) {} break; case "n1": try { - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.audioNodes.llpw[0]); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.audioNodes.llpw[0]); console.debug("[Cider][Audio] Equalizer -> llpw"); } catch (e) {} break; case "n0": try { - CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length-1].connect(CiderAudio.context.destination); + CiderAudio.audioNodes.audioBands[CiderAudio.audioNodes.audioBands.length - 1].connect(CiderAudio.context.destination); console.debug("[Cider][Audio] Equalizer -> destination"); } catch (e) {} break; From 1bcc2f801abe469ac850c67b759bd356cf62e50d Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 31 Aug 2022 17:13:17 +0700 Subject: [PATCH 006/210] fix airplay list --- src/main/base/browserwindow.ts | 2 ++ src/main/plugins/raop.ts | 14 ++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index 52d32099..7870a1a9 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -619,6 +619,8 @@ export class BrowserWindow { const ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; if (!this.chromecastIP.includes(ip)) { this.headerSent = false; + this.audioStream._readableState.buffer.clear() + this.audioStream._readableState.length = 0 this.chromecastIP.push(ip); } req.socket.setTimeout(Number.MAX_SAFE_INTEGER); diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index 0219a012..d784e98d 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -89,7 +89,7 @@ export default class RAOP { private ondeviceup(name: any, host: any, port: any, addresses: any, text: any, airplay2: any = null) { // console.log(this.castDevices.findIndex((item: any) => {return (item.name == host.replace(".local","") && item.port == port )})) - let shown_name = (host ?? "Unknown").replace(".local", ""); + let shown_name = name; try { let model = text.filter((u: any) => String(u).startsWith("model=")); let manufacturer = text.filter((u: any) => String(u).startsWith("manufacturer=")); @@ -105,7 +105,7 @@ export default class RAOP { if ( this.castDevices.findIndex((item: any) => { - return item != null && item.name == shown_name && item.port == port && item.host == host_name && item.host != "Unknown"; + return item != null && item.name == shown_name && item.host == host_name && item.host != "Unknown"; }) == -1 ) { this.castDevices.push({ @@ -158,7 +158,7 @@ export default class RAOP { }); electron.ipcMain.on("getAirplayDevice", (event, data) => { - // this.castDevices = []; + this.castDevices = []; console.log("scan for airplay devices"); const browser = this.mdns.createBrowser(this.mdns.tcp("raop")); @@ -168,9 +168,10 @@ export default class RAOP { if (service.addresses && service.fullname && service.fullname.includes("_raop._tcp")) { // console.log(service.txt) this._win.webContents.executeJavaScript(`console.log( - "${service.name} ${service.host}:${service.port} ${service.addresses}" + "${service.name} ${service.host}:${service.port} ${service.addresses} ${service.fullname}" )`); - this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt); + let itemname = service.fullname.substring(service.fullname.indexOf("@")+1,service.fullname.indexOf("._raop._tcp") ) + this.ondeviceup(itemname, service.host, service.port, service.addresses, service.txt); } }); @@ -183,7 +184,8 @@ export default class RAOP { this._win.webContents.executeJavaScript(`console.log( "${service.name} ${service.host}:${service.port} ${service.addresses}" )`); - this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt, true); + let itemname = service.fullname.substring(service.fullname.indexOf("@")+1,service.fullname.indexOf("._airplay._tcp") ) + this.ondeviceup(itemname, service.host, service.port, service.addresses, service.txt, true); } }); From 80a561412ecb445bd372dc4ea55c05094c2811a7 Mon Sep 17 00:00:00 2001 From: Monochromish Date: Wed, 31 Aug 2022 20:25:21 +1000 Subject: [PATCH 007/210] no more discord rpc when private session is enabled hah fuck u --- src/main/plugins/discordrpc.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/plugins/discordrpc.ts b/src/main/plugins/discordrpc.ts index c35947ef..e0af0b12 100644 --- a/src/main/plugins/discordrpc.ts +++ b/src/main/plugins/discordrpc.ts @@ -126,7 +126,11 @@ export default class DiscordRPC { */ onPlaybackStateDidChange(attributes: object): void { this._attributes = attributes; - this.setActivity(attributes); + if (this._utils.getStoreValue("general.privateEnabled")) { + this._client.clearActivity(); + } else { + this.setActivity(attributes); + } } /** @@ -135,7 +139,11 @@ export default class DiscordRPC { */ onNowPlayingItemDidChange(attributes: object): void { this._attributes = attributes; - this.setActivity(attributes); + if (this._utils.getStoreValue("general.privateEnabled")) { + this._client.clearActivity(); + } else { + this.setActivity(attributes); + } } /******************************************************************************************* @@ -202,7 +210,9 @@ export default class DiscordRPC { } // Set the activity - if (!attributes.status && this._utils.getStoreValue("connectivity.discord_rpc.clear_on_pause")) { + if (this._utils.getStoreValue("general.privateEnabled")) { + this._client.clearActivity(); + } else if (!attributes.status && this._utils.getStoreValue("connectivity.discord_rpc.clear_on_pause")) { this._client.clearActivity(); } else if (activity && this._activityCache !== activity) { this._client.setActivity(activity); From a3ca0b09f4e52940ea80c8bed0cf0df65a90741c Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 31 Aug 2022 12:19:04 +0100 Subject: [PATCH 008/210] discordrpc now reloads/clears activity with setting changes --- src/main/plugins/discordrpc.ts | 55 +++++++++++-------- src/main/plugins/raop.ts | 4 +- src/renderer/main/vueapp.js | 8 ++- .../views/components/settings-window.ejs | 2 +- 4 files changed, 42 insertions(+), 27 deletions(-) diff --git a/src/main/plugins/discordrpc.ts b/src/main/plugins/discordrpc.ts index e0af0b12..b8d94d8c 100644 --- a/src/main/plugins/discordrpc.ts +++ b/src/main/plugins/discordrpc.ts @@ -48,15 +48,21 @@ export default class DiscordRPC { * Runs on app ready */ onReady(_win: any): void { - const self = this; this.connect(); console.debug(`[Plugin][${this.name}] Ready.`); - ipcMain.on("updateRPCImage", async (_event, imageurl) => { + } + + /** + * Set up ipc listeners for the plugin + */ + onRendererReady() { + const self = this; + ipcMain.on("discordrpc:updateImage", async (_event, imageurl) => { if (!this._utils.getStoreValue("general.privateEnabled")) { let b64data = ""; let postbody = ""; if (imageurl.startsWith("/ciderlocalart")) { - let port = await _win.webContents.executeJavaScript(`app.clientPort`); + let port = await this._utils.getWindow().webContents.executeJavaScript(`app.clientPort`); console.log("http://localhost:" + port + imageurl); const response = await fetch("http://localhost:" + port + imageurl); b64data = (await response.buffer()).toString("base64"); @@ -66,7 +72,7 @@ export default class DiscordRPC { body: postbody, headers: { "Content-Type": "application/json", - "User-Agent": _win.webContents.getUserAgent(), + "User-Agent": this._utils.getWindow().webContents.getUserAgent(), }, }) .then((res) => res.json()) @@ -81,7 +87,7 @@ export default class DiscordRPC { body: postbody, headers: { "Content-Type": "application/json", - "User-Agent": _win.webContents.getUserAgent(), + "User-Agent": this._utils.getWindow().webContents.getUserAgent(), }, }) .then((res) => res.json()) @@ -92,17 +98,22 @@ export default class DiscordRPC { } } }); - ipcMain.on("reloadRPC", () => { + ipcMain.on("discordrpc:reload", (_event, configUpdate = null) => { console.log(`[DiscordRPC][reload] Reloading DiscordRPC.`); - this._client.destroy(); + if (this._client) { + this._client.destroy(); + } + + if (!this._utils.getStoreValue("connectivity.discord_rpc.enabled")) return this._client .endlessLogin({ clientId: this._utils.getStoreValue("connectivity.discord_rpc.client") === "Cider" ? "911790844204437504" : "886578863147192350", }) .then(() => { + console.log(`[DiscordRPC][reload] DiscordRPC Reloaded.`); this.ready = true; - this._utils.getWindow().webContents.send("rpcReloaded", this._client.user); + if (configUpdate == null) this._utils.getWindow().webContents.send("rpcReloaded", this._client.user); if (this._activityCache && this._activityCache.details && this._activityCache.state) { console.info(`[DiscordRPC][reload] Restoring activity cache.`); this._client.setActivity(this._activityCache); @@ -111,6 +122,13 @@ export default class DiscordRPC { .catch((e: any) => console.error(`[DiscordRPC][reload] ${e}`)); // this.connect(true) }); + ipcMain.on("onPrivacyModeChange", (_event, enabled) => { + if (enabled && this._client) { + this._client.clearActivity(); + } else if (!enabled && this._activityCache && this._activityCache.details && this._activityCache.state) { + this._client.setActivity(this._activityCache); + } + }); } /** @@ -126,11 +144,7 @@ export default class DiscordRPC { */ onPlaybackStateDidChange(attributes: object): void { this._attributes = attributes; - if (this._utils.getStoreValue("general.privateEnabled")) { - this._client.clearActivity(); - } else { - this.setActivity(attributes); - } + this.setActivity(attributes); } /** @@ -139,11 +153,7 @@ export default class DiscordRPC { */ onNowPlayingItemDidChange(attributes: object): void { this._attributes = attributes; - if (this._utils.getStoreValue("general.privateEnabled")) { - this._client.clearActivity(); - } else { - this.setActivity(attributes); - } + this.setActivity(attributes); } /******************************************************************************************* @@ -166,7 +176,7 @@ export default class DiscordRPC { this._client.once("ready", () => { console.info(`[DiscordRPC][connect] Successfully Connected to Discord. Authed for user: ${this._client.user.id}.`); - if (this._activityCache && this._activityCache.details && this._activityCache.state) { + if (this._activityCache && this._activityCache.details && this._activityCache.state && !this._utils.getStoreValue("general.privateEnabled")) { console.info(`[DiscordRPC][connect] Restoring activity cache.`); this._client.setActivity(this._activityCache); } @@ -209,12 +219,11 @@ export default class DiscordRPC { return; } - // Set the activity - if (this._utils.getStoreValue("general.privateEnabled")) { - this._client.clearActivity(); - } else if (!attributes.status && this._utils.getStoreValue("connectivity.discord_rpc.clear_on_pause")) { + + if (!attributes.status && this._utils.getStoreValue("connectivity.discord_rpc.clear_on_pause")) { this._client.clearActivity(); } else if (activity && this._activityCache !== activity) { + if (this._utils.getStoreValue("general.privateEnabled")) return this._client.setActivity(activity); } this._activityCache = activity; diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index 95c17195..0219a012 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -38,7 +38,7 @@ export default class RAOP { Worker, isMainThread, parentPort, workerData } = require('node:worker_threads'); function getAudioConv (buffers) { - + function interleave16(leftChannel, rightChannel) { var length = leftChannel.length + rightChannel.length; var result = new Int16Array(length); @@ -340,7 +340,7 @@ export default class RAOP { } }); - electron.ipcMain.on("updateRPCImage", (_event, imageurl) => { + electron.ipcMain.on("discordrpc:updateImage", (_event, imageurl) => { this.uploadImageAirplay(imageurl); }); } diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index ebdd3899..d06b8126 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -256,6 +256,12 @@ const app = new Vue({ }, deep: true, }, + 'cfg.connectivity.discord_rpc.enabled'(newValue) { + ipcRenderer.send("discordrpc:reload", newValue) + }, + 'mk.privateEnabled'(newValue) { + ipcRenderer.send("onPrivacyModeChange", newValue); + }, page: () => { document.getElementById("app-content").scrollTo(0, 0); app.resetState(); @@ -4115,7 +4121,7 @@ const app = new Vue({ if (this.mk.nowPlayingItem._assets[0].artworkURL) { this.currentArtUrl = this.mk.nowPlayingItem._assets[0].artworkURL; } - ipcRenderer.send("updateRPCImage", this.currentArtUrl ?? ""); + ipcRenderer.send("discordrpc:updateImage", this.currentArtUrl ?? ""); try { // document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`); } catch (e) {} diff --git a/src/renderer/views/components/settings-window.ejs b/src/renderer/views/components/settings-window.ejs index 1e0ce44a..dde7df2d 100644 --- a/src/renderer/views/components/settings-window.ejs +++ b/src/renderer/views/components/settings-window.ejs @@ -1508,7 +1508,7 @@ ipcRenderer.send('cc-logout') }, reloadDiscordRPC() { - ipcRenderer.send('reloadRPC') + ipcRenderer.send('discordrpc:reload') }, lfmDisconnect() { this.$root.cfg.connectivity.lastfm.enabled = false; From 3c34125044c4ee452ac23672cc3e7bf580ea5fb7 Mon Sep 17 00:00:00 2001 From: coredev-uk Date: Wed, 31 Aug 2022 11:19:44 +0000 Subject: [PATCH 009/210] chore: Prettified Code [ci skip] --- src/main/plugins/discordrpc.ts | 5 ++--- src/renderer/main/vueapp.js | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/plugins/discordrpc.ts b/src/main/plugins/discordrpc.ts index b8d94d8c..c8d797b0 100644 --- a/src/main/plugins/discordrpc.ts +++ b/src/main/plugins/discordrpc.ts @@ -105,7 +105,7 @@ export default class DiscordRPC { this._client.destroy(); } - if (!this._utils.getStoreValue("connectivity.discord_rpc.enabled")) return + if (!this._utils.getStoreValue("connectivity.discord_rpc.enabled")) return; this._client .endlessLogin({ clientId: this._utils.getStoreValue("connectivity.discord_rpc.client") === "Cider" ? "911790844204437504" : "886578863147192350", @@ -219,11 +219,10 @@ export default class DiscordRPC { return; } - if (!attributes.status && this._utils.getStoreValue("connectivity.discord_rpc.clear_on_pause")) { this._client.clearActivity(); } else if (activity && this._activityCache !== activity) { - if (this._utils.getStoreValue("general.privateEnabled")) return + if (this._utils.getStoreValue("general.privateEnabled")) return; this._client.setActivity(activity); } this._activityCache = activity; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index d06b8126..ca0b9509 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -256,10 +256,10 @@ const app = new Vue({ }, deep: true, }, - 'cfg.connectivity.discord_rpc.enabled'(newValue) { - ipcRenderer.send("discordrpc:reload", newValue) + "cfg.connectivity.discord_rpc.enabled"(newValue) { + ipcRenderer.send("discordrpc:reload", newValue); }, - 'mk.privateEnabled'(newValue) { + "mk.privateEnabled"(newValue) { ipcRenderer.send("onPrivacyModeChange", newValue); }, page: () => { From 6b663e3eb2beb7d17839161786b8425dc5824afd Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 31 Aug 2022 12:34:04 +0100 Subject: [PATCH 010/210] decorators are bad --- src/main/plugins/mpris.ts | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/main/plugins/mpris.ts b/src/main/plugins/mpris.ts index d65198ae..0edc69b6 100644 --- a/src/main/plugins/mpris.ts +++ b/src/main/plugins/mpris.ts @@ -31,19 +31,6 @@ export default class mpris { console.debug(`[Plugin][${mpris.name}] Loading Complete.`); } - /** - * Blocks non-linux systems from running this plugin - * @private - * @decorator - */ - private static linuxOnly(_target: any, _propertyKey: string, descriptor: PropertyDescriptor) { - if (process.platform !== "linux") { - descriptor.value = function () { - return; - }; - } - } - /** * Connects to MPRIS Service */ @@ -102,6 +89,7 @@ export default class mpris { * Update M.P.R.I.S Player Attributes */ private static updateMetaData(attributes: any) { + console.log(attributes) mpris.player.metadata = { "mpris:trackid": mpris.player.objectPath(`track/${attributes.playParams.id.replace(/[.]+/g, "")}`), "mpris:length": attributes.durationInMillis * 1000, // In microseconds @@ -134,24 +122,24 @@ export default class mpris { /** * Runs on app ready */ - @mpris.linuxOnly onReady(_: any): void { + if (process.platform !== "linux") return; console.debug(`[${mpris.name}:onReady] Ready.`); } /** * Renderer ready */ - @mpris.linuxOnly onRendererReady(): void { + if (process.platform !== "linux") return; mpris.connect(); } /** * Runs on app stop */ - @mpris.linuxOnly onBeforeQuit(): void { + if (process.platform !== "linux") return; console.debug(`[Plugin][${mpris.name}] Stopped.`); mpris.clearState(); } @@ -160,8 +148,8 @@ export default class mpris { * Runs on playback State Change * @param attributes Music Attributes (attributes.status = current state) */ - @mpris.linuxOnly onPlaybackStateDidChange(attributes: any): void { + if (process.platform !== "linux") return; mpris.player.playbackStatus = attributes?.status ? Player.PLAYBACK_STATUS_PLAYING : Player.PLAYBACK_STATUS_PAUSED; } @@ -169,8 +157,8 @@ export default class mpris { * Runs on song change * @param attributes Music Attributes */ - @mpris.linuxOnly onNowPlayingItemDidChange(attributes: object): void { + if (process.platform !== "linux") return; mpris.updateMetaData(attributes); } } From 78b1821cbf10135518942a4dba6e5f4e93539b0d Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 31 Aug 2022 12:34:40 +0100 Subject: [PATCH 011/210] remove debug [ci skip] --- src/main/plugins/mpris.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/plugins/mpris.ts b/src/main/plugins/mpris.ts index 0edc69b6..d6afd10c 100644 --- a/src/main/plugins/mpris.ts +++ b/src/main/plugins/mpris.ts @@ -89,7 +89,6 @@ export default class mpris { * Update M.P.R.I.S Player Attributes */ private static updateMetaData(attributes: any) { - console.log(attributes) mpris.player.metadata = { "mpris:trackid": mpris.player.objectPath(`track/${attributes.playParams.id.replace(/[.]+/g, "")}`), "mpris:length": attributes.durationInMillis * 1000, // In microseconds From 93666366a588ac6e599afc3e20872b5b76b02112 Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 31 Aug 2022 12:44:11 +0100 Subject: [PATCH 012/210] decorators are good --- src/main/plugins/mpris.ts | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/plugins/mpris.ts b/src/main/plugins/mpris.ts index d6afd10c..962fbd03 100644 --- a/src/main/plugins/mpris.ts +++ b/src/main/plugins/mpris.ts @@ -27,10 +27,22 @@ export default class mpris { */ constructor(utils: any) { mpris.utils = utils; - console.debug(`[Plugin][${mpris.name}] Loading Complete.`); } + /** + * Blocks non-linux systems from running this plugin + * @private + * @decorator + */ + private static linuxOnly(_target: any, _propertyKey: string, descriptor: PropertyDescriptor) { + if (process.platform !== "linux") { + descriptor.value = function () { + return; + }; + } + } + /** * Connects to MPRIS Service */ @@ -121,24 +133,24 @@ export default class mpris { /** * Runs on app ready */ + @mpris.linuxOnly onReady(_: any): void { - if (process.platform !== "linux") return; console.debug(`[${mpris.name}:onReady] Ready.`); } /** * Renderer ready */ + @mpris.linuxOnly onRendererReady(): void { - if (process.platform !== "linux") return; mpris.connect(); } /** * Runs on app stop */ + @mpris.linuxOnly onBeforeQuit(): void { - if (process.platform !== "linux") return; console.debug(`[Plugin][${mpris.name}] Stopped.`); mpris.clearState(); } @@ -147,8 +159,8 @@ export default class mpris { * Runs on playback State Change * @param attributes Music Attributes (attributes.status = current state) */ + @mpris.linuxOnly onPlaybackStateDidChange(attributes: any): void { - if (process.platform !== "linux") return; mpris.player.playbackStatus = attributes?.status ? Player.PLAYBACK_STATUS_PLAYING : Player.PLAYBACK_STATUS_PAUSED; } @@ -156,8 +168,8 @@ export default class mpris { * Runs on song change * @param attributes Music Attributes */ + @mpris.linuxOnly onNowPlayingItemDidChange(attributes: object): void { - if (process.platform !== "linux") return; mpris.updateMetaData(attributes); } } From 720970b2e2daee14251c4d9706081e29ea5c0a45 Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 31 Aug 2022 12:44:38 +0100 Subject: [PATCH 013/210] lastfm annoying --- src/main/plugins/lastfm.ts | 23 +++++++---------------- src/preload/cider-preload.js | 4 +++- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/main/plugins/lastfm.ts b/src/main/plugins/lastfm.ts index be8380d5..ce8a98bf 100644 --- a/src/main/plugins/lastfm.ts +++ b/src/main/plugins/lastfm.ts @@ -29,7 +29,9 @@ export default class lastfm { onReady(_win: Electron.BrowserWindow): void { this.initializeLastFM("", this._apiCredentials); + } + onRendererReady(): void { // Register the ipcMain handlers this._utils.getIPCMain().handle("lastfm:url", (event: any) => { console.debug(`[${lastfm.name}:url] Called.`); @@ -52,28 +54,17 @@ export default class lastfm { this.updateNowPlayingTrack(attributes); }); + this._utils.getIPCMain().on("lastfm:FilteredNowPlayingItemDidChange", (event: any, attributes: any) => { + if (this._utils.getStoreValue("general.privateEnabled")) return; + this.updateNowPlayingTrack(attributes); + }); + this._utils.getIPCMain().on("lastfm:scrobbleTrack", (event: any, attributes: any) => { if (this._utils.getStoreValue("general.privateEnabled")) return; this.scrobbleTrack(attributes); }); } - /** - * Runs on playback State Change - * @param attributes Music Attributes (attributes.status = current state) - */ - onPlaybackStateDidChange(attributes: object): void {} - - /** - * Runs on song change - * @param attributes Music Attributes - * @param scrobble - */ - onNowPlayingItemDidChange(attributes: any, scrobble = false): void { - if (this._utils.getStoreValue("general.privateEnabled")) return; - this.updateNowPlayingTrack(attributes); - } - /** * Initialize LastFM * @param token diff --git a/src/preload/cider-preload.js b/src/preload/cider-preload.js index c1fc7c6a..6f8505eb 100644 --- a/src/preload/cider-preload.js +++ b/src/preload/cider-preload.js @@ -38,8 +38,10 @@ const MusicKitInterop = { const attributes = MusicKitInterop.getAttributes(); attributes.primaryArtist = app.cfg.connectivity.lastfm.remove_featured ? await this.fetchPrimaryArtist() : attributes.artistName; + global.ipcRenderer.send("nowPlayingItemDidChange", attributes); + if (MusicKitInterop.filterTrack(attributes, false, true)) { - global.ipcRenderer.send("nowPlayingItemDidChange", attributes); + global.ipcRenderer.send("lastfm:FilteredNowPlayingItemDidChange", attributes); } else if (attributes.name !== "no-title-found" && attributes.playParams.id !== "no-id-found") { global.ipcRenderer.send("lastfm:nowPlayingChange", attributes); } From d55528cd5a908cf4bcba1e77250f60f041d0ff9e Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 31 Aug 2022 21:01:27 +0100 Subject: [PATCH 014/210] debug compatability [ci skip] --- package.json | 3 +++ tsconfig.json | 1 + 2 files changed, 4 insertions(+) diff --git a/package.json b/package.json index 93f76a1b..f53db217 100644 --- a/package.json +++ b/package.json @@ -224,5 +224,8 @@ "NSUserNotificationAlertStyle": "alert" } } + }, + "electronWebpack": { + "devtool": "source-map" } } diff --git a/tsconfig.json b/tsconfig.json index 9e9070f4..570e8f78 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,7 @@ "allowJs": true, "noImplicitAny": true, "strict": true, + "inlineSources": true, "sourceMap": true, "outDir": "./build", "baseUrl": ".", From 8028c8eeab8a776042801e87b43438b2f451b414 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 1 Sep 2022 01:08:30 +0000 Subject: [PATCH 015/210] chore: Prettified Code [ci skip] --- src/main/base/browserwindow.ts | 4 ++-- src/main/plugins/raop.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index 7870a1a9..f4fcf21f 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -619,8 +619,8 @@ export class BrowserWindow { const ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; if (!this.chromecastIP.includes(ip)) { this.headerSent = false; - this.audioStream._readableState.buffer.clear() - this.audioStream._readableState.length = 0 + this.audioStream._readableState.buffer.clear(); + this.audioStream._readableState.length = 0; this.chromecastIP.push(ip); } req.socket.setTimeout(Number.MAX_SAFE_INTEGER); diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index d784e98d..d9ab814f 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -170,7 +170,7 @@ export default class RAOP { this._win.webContents.executeJavaScript(`console.log( "${service.name} ${service.host}:${service.port} ${service.addresses} ${service.fullname}" )`); - let itemname = service.fullname.substring(service.fullname.indexOf("@")+1,service.fullname.indexOf("._raop._tcp") ) + let itemname = service.fullname.substring(service.fullname.indexOf("@") + 1, service.fullname.indexOf("._raop._tcp")); this.ondeviceup(itemname, service.host, service.port, service.addresses, service.txt); } }); @@ -184,7 +184,7 @@ export default class RAOP { this._win.webContents.executeJavaScript(`console.log( "${service.name} ${service.host}:${service.port} ${service.addresses}" )`); - let itemname = service.fullname.substring(service.fullname.indexOf("@")+1,service.fullname.indexOf("._airplay._tcp") ) + let itemname = service.fullname.substring(service.fullname.indexOf("@") + 1, service.fullname.indexOf("._airplay._tcp")); this.ondeviceup(itemname, service.host, service.port, service.addresses, service.txt, true); } }); From ddcb4c43bcf35a16e3763bac32feb6bca551e26c Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 31 Aug 2022 18:57:53 -0700 Subject: [PATCH 016/210] exposed express to backend plugins --- src/main/base/plugins.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/base/plugins.ts b/src/main/base/plugins.ts index e880171a..cfc554f7 100644 --- a/src/main/base/plugins.ts +++ b/src/main/base/plugins.ts @@ -88,6 +88,7 @@ export class Plugins { win: utils.getWindow(), dir: pluginPath, dirName: file, + express: utils.getExpress() }; plugins[plugin.name] = new plugin(pluginEnv); } From 5c69f635c564ba4fd2c0a7ef0b6fda2b9a946ea9 Mon Sep 17 00:00:00 2001 From: booploops Date: Thu, 1 Sep 2022 01:58:25 +0000 Subject: [PATCH 017/210] chore: Prettified Code [ci skip] --- src/main/base/plugins.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/base/plugins.ts b/src/main/base/plugins.ts index cfc554f7..aa90f4b9 100644 --- a/src/main/base/plugins.ts +++ b/src/main/base/plugins.ts @@ -88,7 +88,7 @@ export class Plugins { win: utils.getWindow(), dir: pluginPath, dirName: file, - express: utils.getExpress() + express: utils.getExpress(), }; plugins[plugin.name] = new plugin(pluginEnv); } From 2be9ad0944e630adc8b0570835929ddc75ece30c Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 31 Aug 2022 17:26:33 +0700 Subject: [PATCH 018/210] minor webremote fixes --- src/web-remote/assets/MissingArtwork.svg | 8 +++ src/web-remote/style.css | 27 ++++++-- .../views/components/mediaitem-artwork.ejs | 2 +- src/web-remote/views/index.ejs | 66 ++++++++++++------- 4 files changed, 73 insertions(+), 30 deletions(-) create mode 100644 src/web-remote/assets/MissingArtwork.svg diff --git a/src/web-remote/assets/MissingArtwork.svg b/src/web-remote/assets/MissingArtwork.svg new file mode 100644 index 00000000..cca3ca5b --- /dev/null +++ b/src/web-remote/assets/MissingArtwork.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/web-remote/style.css b/src/web-remote/style.css index 8ead094a..f91072f4 100644 --- a/src/web-remote/style.css +++ b/src/web-remote/style.css @@ -507,6 +507,11 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { cursor: pointer; } +.list-entry.artist-song { + padding: 5px; + width: 100%; +} + .list-entry-image { --artwork: url(""); width: 64px; @@ -519,6 +524,11 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { box-shadow: var(--mediaItemShadow); } +.artist-song .list-entry-image { + width: 45px; + height: 45px; +} + .list-entry-image.artist { border-radius: 50%; } @@ -586,6 +596,10 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { width: 100%; } +.mediaitem-scroller-horizontal::-webkit-scrollbar { + display: none; +} + .album-placeholder { height: 180px; width: 180px; @@ -643,6 +657,11 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { overflow-y: hidden; } +.search-tab-container::-webkit-scrollbar { + display: none; +} + + .search-body-container { position: relative; width: 100%; @@ -704,7 +723,7 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { } .albumpage-album-notes > .notes-preview { - height: 60px; + height: 48px; overflow: hidden; -webkit-mask-image: -webkit-gradient(linear, left 95%, left bottom, from(rgba(0, 0, 0, 1)), to(rgba(0, 0, 0, 0))); } @@ -757,13 +776,13 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { } .artist-header { - height: 400px; + /* height: 400px; */ width: 100%; - margin: 12px auto; + /* margin: 12px auto; */ display: flex; justify-content: center; align-items: center; - padding: 12px; + /* padding: 12px; */ flex-direction: column; background: rgb(0 0 0 / 40%); } diff --git a/src/web-remote/views/components/mediaitem-artwork.ejs b/src/web-remote/views/components/mediaitem-artwork.ejs index bac5cfdd..9f651a45 100644 --- a/src/web-remote/views/components/mediaitem-artwork.ejs +++ b/src/web-remote/views/components/mediaitem-artwork.ejs @@ -1,7 +1,7 @@ diff --git a/src/renderer/views/pages/search.ejs b/src/renderer/views/pages/search.ejs index 0bdd63de..2f8d967a 100644 --- a/src/renderer/views/pages/search.ejs +++ b/src/renderer/views/pages/search.ejs @@ -142,10 +142,10 @@
- + v-for="item of getFlattenedCategories()"/>
diff --git a/src/web-remote/views/components/mediaitem-artwork.ejs b/src/web-remote/views/components/mediaitem-artwork.ejs index 9f651a45..e4760eb8 100644 --- a/src/web-remote/views/components/mediaitem-artwork.ejs +++ b/src/web-remote/views/components/mediaitem-artwork.ejs @@ -86,6 +86,7 @@ this.isVisible = isVisible }, getMediaItemArtwork(url, height = 64, width) { + try{ if (typeof url == "undefined" || url == "") { return "./assets/MissingArtwork.svg" } @@ -98,7 +99,9 @@ if (newurl.includes("900x516")) { newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr"); } - return newurl + return newurl} catch (e){ + return "./assets/MissingArtwork.svg" + } }, } }); diff --git a/src/web-remote/views/components/mediaitem-square.ejs b/src/web-remote/views/components/mediaitem-square.ejs index c3d6ab13..0d8d27da 100644 --- a/src/web-remote/views/components/mediaitem-square.ejs +++ b/src/web-remote/views/components/mediaitem-square.ejs @@ -213,7 +213,7 @@ } switch (this.kind) { case "385": - artwork = this.item.attributes.editorialArtwork.subscriptionHero.url + artwork = this.item.attributes?.editorialArtwork?.subscriptionHero?.url break; } if (!includeUrl) { From c32b9b6d7041d303917d63e344f79cdb589be769 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 1 Sep 2022 12:39:13 +0000 Subject: [PATCH 020/210] chore: Prettified Code [ci skip] --- src/main/plugins/chromecast.ts | 56 +++++++++++++++----------------- src/renderer/main/vueapp.js | 59 ++++++++++++++++++---------------- 2 files changed, 57 insertions(+), 58 deletions(-) diff --git a/src/main/plugins/chromecast.ts b/src/main/plugins/chromecast.ts index fa709e06..d140cd84 100644 --- a/src/main/plugins/chromecast.ts +++ b/src/main/plugins/chromecast.ts @@ -2,7 +2,7 @@ import * as electron from "electron"; import * as os from "os"; import { resolve } from "path"; import * as CiderReceiver from "../base/castreceiver"; -const MediaRendererClient = require('upnp-mediarenderer-client') +const MediaRendererClient = require("upnp-mediarenderer-client"); export default class ChromecastPlugin { /** @@ -15,7 +15,6 @@ export default class ChromecastPlugin { private _timer: any; private audioClient = require("castv2-client").Client; private mdns = require("mdns-js"); - private devices: any = []; private castDevices: any = []; @@ -71,15 +70,13 @@ export default class ChromecastPlugin { // actual upnp devices let ssdpBrowser2 = new Client(); - ssdpBrowser2.on('response', (headers: any, statusCode: any, rinfo: any) => { - var location = getLocation(headers); - if (location != null) { - this.getServiceDescription(location, rinfo.address); - } - - }); - ssdpBrowser2.search('urn:schemas-upnp-org:device:MediaRenderer:1'); - + ssdpBrowser2.on("response", (headers: any, statusCode: any, rinfo: any) => { + var location = getLocation(headers); + if (location != null) { + this.getServiceDescription(location, rinfo.address); + } + }); + ssdpBrowser2.search("urn:schemas-upnp-org:device:MediaRenderer:1"); } catch (e) { console.log("Search GC err", e); } @@ -258,25 +255,24 @@ export default class ChromecastPlugin { } else { // upnp devices try { - let client = new MediaRendererClient(UPNPDesc); - const options = { - autoplay: true, - contentType: 'audio/x-wav', - dlnaFeatures: 'DLNA.ORG_PN=-;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01700000000000000000000000000000', - metadata: { - title: 'Cider', - creator: 'Streaming ...', - type: 'audio', // can be 'video', 'audio' or 'image' - // url: 'http://' + getIp() + ':' + server.address().port + '/', - // protocolInfo: 'DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000; - } - }; - client.load('http://' + this.getIp() + ':' + this.ciderPort + '/audio.wav', options, function (err: any, _result: any) { - if (err) throw err; - console.log('playing ...'); - }); - } catch (e) { - } + let client = new MediaRendererClient(UPNPDesc); + const options = { + autoplay: true, + contentType: "audio/x-wav", + dlnaFeatures: "DLNA.ORG_PN=-;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01700000000000000000000000000000", + metadata: { + title: "Cider", + creator: "Streaming ...", + type: "audio", // can be 'video', 'audio' or 'image' + // url: 'http://' + getIp() + ':' + server.address().port + '/', + // protocolInfo: 'DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000; + }, + }; + client.load("http://" + this.getIp() + ":" + this.ciderPort + "/audio.wav", options, function (err: any, _result: any) { + if (err) throw err; + console.log("playing ..."); + }); + } catch (e) {} } } diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 175c1f5d..d9aaed7c 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -2002,15 +2002,18 @@ const app = new Vue({ } if (kind.toString().includes("apple-curator")) { kind = "appleCurator"; - app.getTypeFromID("appleCurator", id, false, { - platform: "web", - include: "grouping,playlists", - extend: "editorialArtwork", - "art[url]": "f", - }).then(() => { - kind = "appleCurator"; - window.location.hash = `${kind}/${id}`; - document.querySelector("#app-content").scrollTop = 0}); + app + .getTypeFromID("appleCurator", id, false, { + platform: "web", + include: "grouping,playlists", + extend: "editorialArtwork", + "art[url]": "f", + }) + .then(() => { + kind = "appleCurator"; + window.location.hash = `${kind}/${id}`; + document.querySelector("#app-content").scrollTop = 0; + }); } else if (kind == "editorial-elements" || kind == "editorial-items") { console.debug(item); if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0) { @@ -4024,26 +4027,26 @@ const app = new Vue({ }, getMediaItemArtwork(url, height = 64, width) { try { - if (typeof url == "undefined" || url == "") { - return "./assets/MissingArtwork.svg"; - } - height = parseInt(height * window.devicePixelRatio); - if (width) { - width = parseInt(width * window.devicePixelRatio); - } - let newurl = `${(url ?? "") - .replace("{w}", width ?? height) - .replace("{h}", height) - .replace("{f}", "webp") - .replace("{c}", width === 900 || width === 380 || width === 600 ? "sr" : "cc")}`; + if (typeof url == "undefined" || url == "") { + return "./assets/MissingArtwork.svg"; + } + height = parseInt(height * window.devicePixelRatio); + if (width) { + width = parseInt(width * window.devicePixelRatio); + } + let newurl = `${(url ?? "") + .replace("{w}", width ?? height) + .replace("{h}", height) + .replace("{f}", "webp") + .replace("{c}", width === 900 || width === 380 || width === 600 ? "sr" : "cc")}`; - if (newurl.includes("900x516")) { - newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr"); - } - return newurl;} - catch (e) { - console.log(url) - return "./assets/MissingArtwork.svg" + if (newurl.includes("900x516")) { + newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr"); + } + return newurl; + } catch (e) { + console.log(url); + return "./assets/MissingArtwork.svg"; } }, _rgbToRgb(rgb = [0, 0, 0]) { From 26b231ee70e0b3188944d1923e515aedbdcb9f52 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 31 Aug 2022 17:49:47 +0700 Subject: [PATCH 021/210] fix closing dlna --- src/main/plugins/chromecast.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/plugins/chromecast.ts b/src/main/plugins/chromecast.ts index d140cd84..07a1a18d 100644 --- a/src/main/plugins/chromecast.ts +++ b/src/main/plugins/chromecast.ts @@ -272,6 +272,10 @@ export default class ChromecastPlugin { if (err) throw err; console.log("playing ..."); }); + if (!this.connectedHosts[device.host]) { + this.connectedHosts[device.host] = client; + this.activeConnections.push(client); + } } catch (e) {} } } From af27a3cd726685bd603ed3cd1e70f6fe6a48a15e Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 1 Sep 2022 12:45:32 +0000 Subject: [PATCH 022/210] chore: Updated Lockfile --- pnpm-lock.yaml | 76 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 12 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7967d21..bb1dcfb6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,6 +43,7 @@ specifiers: source-map-support: ^0.5.21 ts-md5: 1.2.11 typescript: ^4.7.4 + upnp-mediarenderer-client: github:vapormusic/node-upnp-mediarenderer-client v8-compile-cache: ^2.3.0 vue-devtools: ^5.1.4 wallpaper: 5.0.1 @@ -55,7 +56,7 @@ dependencies: '@sentry/electron': 4.0.0 '@sentry/integrations': 7.11.1 adm-zip: 0.4.10 - airtunes2: github.com/ciderapp/node_airtunes2/63e3a34a551aa700f89b622d65d19f52f48548ce + airtunes2: github.com/ciderapp/node_airtunes2/909bc9ae208731bfe286cc6ee46d075aa56766eb castv2-client: 1.2.0 chokidar: 3.5.3 discord-auto-rpc: 1.0.17 @@ -81,6 +82,7 @@ dependencies: run-script-os: 1.1.6 source-map-support: 0.5.21 ts-md5: 1.2.11 + upnp-mediarenderer-client: github.com/vapormusic/node-upnp-mediarenderer-client/d4856931500026eb6c4c67b3eb12c1c34755627e v8-compile-cache: 2.3.0 wallpaper: 5.0.1 ws: 8.8.1 @@ -94,7 +96,7 @@ devDependencies: '@types/node': 18.7.13 '@types/qrcode-terminal': 0.12.0 '@types/ws': 8.5.3 - electron: github.com/castlabs/electron-releases/a1749958b51da6ce1596992260cbacb602c23762 + electron: github.com/castlabs/electron-releases/8ca09f8539dc0c3f5a57af3fe23fb2db9661ab68 electron-builder: 23.3.3 electron-builder-notarize-pkg: 1.2.0 electron-webpack: 2.8.2_webpack@5.74.0 @@ -3459,6 +3461,16 @@ packages: /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: false + /conf/10.2.0: resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} engines: {node: '>=12'} @@ -4285,6 +4297,13 @@ packages: mkdirp: 0.5.6 dev: false + /elementtree/0.1.7: + resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==} + engines: {node: '>= 0.4.0'} + dependencies: + sax: 1.1.4 + dev: false + /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -6064,7 +6083,6 @@ packages: /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true /isbinaryfile/3.0.3: resolution: {integrity: sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==} @@ -6891,6 +6909,11 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true + /network-address/1.1.2: + resolution: {integrity: sha512-Q6878fmvItA1mE7H9Il46lONgFgTzX2f98zkS0c2YlkCACzNjwvum/8Kq693IQpxe9zy+w+Zm/4p0wQreLEtZw==} + hasBin: true + dev: false + /nice-try/1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true @@ -7570,7 +7593,6 @@ packages: /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true /process/0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} @@ -7808,7 +7830,6 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} @@ -8097,7 +8118,6 @@ packages: /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -8117,6 +8137,10 @@ packages: truncate-utf8-bytes: 1.0.2 dev: true + /sax/1.1.4: + resolution: {integrity: sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==} + dev: false + /sax/1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} @@ -8694,7 +8718,6 @@ packages: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - dev: true /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -9081,6 +9104,10 @@ packages: is-typedarray: 1.0.0 dev: true + /typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: false + /typescript/4.7.4: resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} @@ -9838,10 +9865,10 @@ packages: got: 11.8.5 dev: false - github.com/castlabs/electron-releases/a1749958b51da6ce1596992260cbacb602c23762: - resolution: {tarball: https://codeload.github.com/castlabs/electron-releases/tar.gz/a1749958b51da6ce1596992260cbacb602c23762} + github.com/castlabs/electron-releases/8ca09f8539dc0c3f5a57af3fe23fb2db9661ab68: + resolution: {tarball: https://codeload.github.com/castlabs/electron-releases/tar.gz/8ca09f8539dc0c3f5a57af3fe23fb2db9661ab68} name: electron - version: 21.0.0-alpha.5 + version: 21.0.0-beta.1 engines: {node: '>= 10.17.0'} hasBin: true requiresBuild: true @@ -9878,8 +9905,8 @@ packages: - supports-color dev: false - github.com/ciderapp/node_airtunes2/63e3a34a551aa700f89b622d65d19f52f48548ce: - resolution: {tarball: https://codeload.github.com/ciderapp/node_airtunes2/tar.gz/63e3a34a551aa700f89b622d65d19f52f48548ce} + github.com/ciderapp/node_airtunes2/909bc9ae208731bfe286cc6ee46d075aa56766eb: + resolution: {tarball: https://codeload.github.com/ciderapp/node_airtunes2/tar.gz/909bc9ae208731bfe286cc6ee46d075aa56766eb} name: airtunes2 version: 2.3.2 hasBin: true @@ -9936,6 +9963,31 @@ packages: readable-stream: 1.1.14 dev: false + github.com/vapormusic/node-upnp-device-client/371819a856573e3624768bd0a113ac6dc084053d: + resolution: {tarball: https://codeload.github.com/vapormusic/node-upnp-device-client/tar.gz/371819a856573e3624768bd0a113ac6dc084053d} + name: upnp-device-client + version: 1.0.2 + dependencies: + concat-stream: 1.6.2 + debug: 2.6.9 + elementtree: 0.1.7 + network-address: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + github.com/vapormusic/node-upnp-mediarenderer-client/d4856931500026eb6c4c67b3eb12c1c34755627e: + resolution: {tarball: https://codeload.github.com/vapormusic/node-upnp-mediarenderer-client/tar.gz/d4856931500026eb6c4c67b3eb12c1c34755627e} + name: upnp-mediarenderer-client + version: 1.4.0 + dependencies: + debug: 2.6.9 + elementtree: 0.1.7 + upnp-device-client: github.com/vapormusic/node-upnp-device-client/371819a856573e3624768bd0a113ac6dc084053d + transitivePeerDependencies: + - supports-color + dev: false + github.com/wavesplatform/curve25519-js/cae68782564b83ffa1c7c757e40a3944cb140290: resolution: {tarball: https://codeload.github.com/wavesplatform/curve25519-js/tar.gz/cae68782564b83ffa1c7c757e40a3944cb140290} name: axlsign From 8c9070c8da04eee99a43c8a9d55a6dd9a65a1ca8 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 31 Aug 2022 17:44:39 +0700 Subject: [PATCH 023/210] casting fix --- src/main/plugins/chromecast.ts | 4 ++++ src/main/plugins/raop.ts | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/plugins/chromecast.ts b/src/main/plugins/chromecast.ts index 07a1a18d..009d73b8 100644 --- a/src/main/plugins/chromecast.ts +++ b/src/main/plugins/chromecast.ts @@ -29,6 +29,7 @@ export default class ChromecastPlugin { private connectedHosts: any = {}; private connectedPlayer: any; private ciderPort: any = 9000; + private scanCount: any = 0; // private server = false; // private bufcount = 0; // private bufcount2 = 0; @@ -318,6 +319,9 @@ export default class ChromecastPlugin { }); electron.ipcMain.on("getChromeCastDevices", (_event, _data) => { + if(this.scanCount++ == 2) { + this.scanCount = 0 + this.castDevices = [];} this.searchForGCDevices(); }); diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index 2bdb51d3..7da7fbad 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -217,6 +217,7 @@ export default class RAOP { txt: txt, airplay2: airplay2dv, debug: null, + forceAlac: false }); // console.log('lol',txt) this.device.on("status", (status: any) => { @@ -235,15 +236,15 @@ export default class RAOP { this._win.webContents.executeJavaScript(`app.sendAirPlayFailed()`); } if (status == "stopped") { - this.airtunes.stopAll(() => { - console.log("end"); - }); - this._win.webContents.executeJavaScript(`app.airplayDisconnect(true, ${[ipv4, ipport, sepassword, title, artist, album, artworkURL, txt, airplay2dv]})`).catch((err: any) => console.error(err)); - this.airtunes = null; - this.device = null; - this.ipairplay = ""; - this.portairplay = ""; - this.ok = 1; + // this.airtunes.stopAll(() => { + // console.log("end"); + // }); + // this._win.webContents.executeJavaScript(`app.airplayDisconnect(true, ${[ipv4, ipport, sepassword, title, artist, album, artworkURL, txt, airplay2dv]})`).catch((err: any) => console.error(err)); + // this.airtunes = null; + // this.device = null; + // this.ipairplay = ""; + // this.portairplay = ""; + // this.ok = 1; } else { setTimeout(() => { if (this.ok == 1) { From 6bd2eaa3be21145690893acd21c72d68e51e1bfe Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 1 Sep 2022 04:21:44 +0000 Subject: [PATCH 024/210] chore: Prettified Code [ci skip] --- src/web-remote/style.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/web-remote/style.css b/src/web-remote/style.css index f91072f4..9c1ce5ab 100644 --- a/src/web-remote/style.css +++ b/src/web-remote/style.css @@ -661,7 +661,6 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { display: none; } - .search-body-container { position: relative; width: 100%; From d5ade09aa73a15e7db0c6d8c1b1e9adebb24a063 Mon Sep 17 00:00:00 2001 From: yazninja Date: Thu, 1 Sep 2022 15:29:53 +0800 Subject: [PATCH 025/210] Electron: bump to version 20.1.1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f53db217..bc85142f 100644 --- a/package.json +++ b/package.json @@ -114,9 +114,9 @@ } ], "build": { - "electronVersion": "20.1.0", + "electronVersion": "20.1.1", "electronDownload": { - "version": "20.1.0+wvcus", + "version": "20.1.1+wvcus", "mirror": "https://github.com/castlabs/electron-releases/releases/download/v" }, "appId": "cider", From 3b947a8361e2f0f267bdb29b185eb79cc63e850c Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 1 Sep 2022 14:39:54 +0000 Subject: [PATCH 026/210] chore: Prettified Code [ci skip] --- src/main/plugins/chromecast.ts | 7 ++++--- src/main/plugins/raop.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/plugins/chromecast.ts b/src/main/plugins/chromecast.ts index 009d73b8..46110e4e 100644 --- a/src/main/plugins/chromecast.ts +++ b/src/main/plugins/chromecast.ts @@ -319,9 +319,10 @@ export default class ChromecastPlugin { }); electron.ipcMain.on("getChromeCastDevices", (_event, _data) => { - if(this.scanCount++ == 2) { - this.scanCount = 0 - this.castDevices = [];} + if (this.scanCount++ == 2) { + this.scanCount = 0; + this.castDevices = []; + } this.searchForGCDevices(); }); diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index 7da7fbad..d62909c7 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -217,7 +217,7 @@ export default class RAOP { txt: txt, airplay2: airplay2dv, debug: null, - forceAlac: false + forceAlac: false, }); // console.log('lol',txt) this.device.on("status", (status: any) => { From 8fb097e69a271435376546723650c543c3666f4a Mon Sep 17 00:00:00 2001 From: yazninja <71800112+yazninja@users.noreply.github.com> Date: Sat, 3 Sep 2022 11:21:14 +0800 Subject: [PATCH 027/210] Add GET for syncing with bot --- .circleci/config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1aa3c3e2..79c618e3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -143,9 +143,11 @@ jobs: if [[ "${APP_VERSION}" = *"beta"* ]]; then echo $'**Beta Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese builds are considered bleeding edge, expect bugs and please do not use this as a representation of the fu ll app.\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-nightly-beta-releases).' > release-notes.md gh release create "v${APP_VERSION}" --prerelease --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap + curl http://129.146.42.180/api/v1/github/sync/main else echo $'**Stable Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese are the most stable builds we can provide. If you experience any issues, please report them [here](https://github.com/ciderapp/cider/issues/new).\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-releases).' > release-notes.md gh release create "v${APP_VERSION}" --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap + curl http://129.146.42.180/api/v1/github/sync/stable fi; # Orchestrate our job run sequence From 9d9158b409fbad8ce337f72f98e165371c512330 Mon Sep 17 00:00:00 2001 From: yazninja <71800112+yazninja@users.noreply.github.com> Date: Sat, 3 Sep 2022 11:29:20 +0800 Subject: [PATCH 028/210] Update build-macos.yml --- .github/workflows/build-macos.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 84d25b91..03cba7ad 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -125,3 +125,7 @@ jobs: repo_token: ${{ secrets.RELEASE_TOKEN }} file: dist/Cider-${{ env.APP_VERSION }}-universal.pkg tag: v${{ env.APP_VERSION }} + - name: Trigger Bot Sync + uses: indiesdev/curl@v1.1 + with: + url: http://129.146.42.180/api/v1/github/sync/${{ GITHUB_REF##*/ }} From 4228656f2420cc791183260c29da0b6b25a003a3 Mon Sep 17 00:00:00 2001 From: yazninja <71800112+yazninja@users.noreply.github.com> Date: Sat, 3 Sep 2022 11:30:48 +0800 Subject: [PATCH 029/210] Update build-macos.yml --- .github/workflows/build-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 03cba7ad..41398db7 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -128,4 +128,4 @@ jobs: - name: Trigger Bot Sync uses: indiesdev/curl@v1.1 with: - url: http://129.146.42.180/api/v1/github/sync/${{ GITHUB_REF##*/ }} + url: http://129.146.42.180/api/v1/github/sync/${GITHUB_REF##*/} From 60ae73ce89055393e4b4fc7ae3fa32efb7dd97f5 Mon Sep 17 00:00:00 2001 From: yazninja <71800112+yazninja@users.noreply.github.com> Date: Sat, 3 Sep 2022 12:14:44 +0800 Subject: [PATCH 030/210] Update build-macos.yml --- .github/workflows/build-macos.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 41398db7..9117e9d0 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -129,3 +129,4 @@ jobs: uses: indiesdev/curl@v1.1 with: url: http://129.146.42.180/api/v1/github/sync/${GITHUB_REF##*/} + log-response: true From 70ec3a19a6a793521bdf7b5ebacdf5bd82315f53 Mon Sep 17 00:00:00 2001 From: yazninja <71800112+yazninja@users.noreply.github.com> Date: Sat, 3 Sep 2022 12:43:07 +0800 Subject: [PATCH 031/210] Update build-macos.yml --- .github/workflows/build-macos.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 9117e9d0..c5d1bfe3 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -130,3 +130,4 @@ jobs: with: url: http://129.146.42.180/api/v1/github/sync/${GITHUB_REF##*/} log-response: true + timeout: 60000 From 54400c1e8b755ed120c99a285165b3cd87c2163f Mon Sep 17 00:00:00 2001 From: yazninja <71800112+yazninja@users.noreply.github.com> Date: Sat, 3 Sep 2022 13:14:43 +0800 Subject: [PATCH 032/210] Update build-macos.yml --- .github/workflows/build-macos.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index c5d1bfe3..85f58991 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -125,9 +125,16 @@ jobs: repo_token: ${{ secrets.RELEASE_TOKEN }} file: dist/Cider-${{ env.APP_VERSION }}-universal.pkg tag: v${{ env.APP_VERSION }} - - name: Trigger Bot Sync + - name: Trigger Bot Sync (main) uses: indiesdev/curl@v1.1 with: - url: http://129.146.42.180/api/v1/github/sync/${GITHUB_REF##*/} + url: http://129.146.42.180/api/v1/github/sync/main log-response: true timeout: 60000 + - name: Trigger Bot Sync (stable) + uses: indiesdev/curl@v1.1 + with: + url: http://129.146.42.180/api/v1/github/sync/stable + log-response: true + timeout: 60000 + From 15ef1352e9d3fe55e000db10336b3fd944c57452 Mon Sep 17 00:00:00 2001 From: yazninja <71800112+yazninja@users.noreply.github.com> Date: Sat, 3 Sep 2022 17:40:22 +0800 Subject: [PATCH 033/210] Update github cli to use orb --- .circleci/config.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 79c618e3..27466672 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -8,7 +8,7 @@ executors: orbs: # Add orbs to your configuration jira: circleci/jira@1.0.5 # invokes the Jira orb, making its commands accessible - + gh: circleci/github-cli@2.1 # The jobs for this project jobs: prepare-build: @@ -111,14 +111,7 @@ jobs: steps: - attach_workspace: at: ~/Cider/ - - run: - name: Installing GitHub Command Line Interface - command: | - sudo apt-get update -y - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null - sudo apt-get update -y - sudo apt install -y gh + - gh/install - run: name: Move Build Files command: | From e09da16d019dcacd9a080137f6b7990026816dae Mon Sep 17 00:00:00 2001 From: yazninja Date: Sun, 4 Sep 2022 01:03:11 +0800 Subject: [PATCH 034/210] fix song.link for library items --- src/renderer/views/components/mediaitem-list-item.ejs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/renderer/views/components/mediaitem-list-item.ejs b/src/renderer/views/components/mediaitem-list-item.ejs index 532e0154..e7c0ad5e 100644 --- a/src/renderer/views/components/mediaitem-list-item.ejs +++ b/src/renderer/views/components/mediaitem-list-item.ejs @@ -494,6 +494,10 @@ "name": `${app.getLz('action.share')} (song.link)`, "action": async function() { let item = self.item + if(item.type.startsWith('library-')) { + self.item.attributes.url = self.item.relationships.catalog.data[0].attributes.url + item.attributes.url = item.relationships.catalog.data[0].attributes.url + } if (!item.attributes.url) { if (item.type.includes("library")) { let result = (await app.mk.api.v3.music(`/v1/me/library/${item.type.replace("library-", '')}/${item.id}/catalog`)).data.data[0] From 6cbe9522fc9f1df6aec254554dcb2eb83b7fbe37 Mon Sep 17 00:00:00 2001 From: lennyerik <49204493+lennyerik@users.noreply.github.com> Date: Sat, 3 Sep 2022 23:25:19 +0200 Subject: [PATCH 035/210] Added support for opening native itms://, itmss:// music:// and musics:// links in Cider (#1409) --- src/main/base/app.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/base/app.ts b/src/main/base/app.ts index da4834d3..2b9a5d6a 100644 --- a/src/main/base/app.ts +++ b/src/main/base/app.ts @@ -232,7 +232,7 @@ export class AppEvents { startArgs.forEach((arg) => { console.log(arg); - if (arg.includes("cider://")) { + if (arg.includes("cider://") || arg.includes("itms://") || arg.includes("itmss://") || arg.includes("music://") || arg.includes("musics://")) { console.debug("[InstanceHandler] (second-instance) Link detected with " + arg); this.LinkHandler(arg); } else if (arg.includes("--force-quit")) { From 3d4fb74345c17c6caf01c553b1eecbff1975c5af Mon Sep 17 00:00:00 2001 From: Benjamin Stonawski Date: Sun, 4 Sep 2022 02:05:06 +0200 Subject: [PATCH 036/210] Updated Hungarian translation with new terms --- src/i18n/hu_HU.json | 159 ++++++++++++++++++++++++++++++-------------- 1 file changed, 109 insertions(+), 50 deletions(-) diff --git a/src/i18n/hu_HU.json b/src/i18n/hu_HU.json index a2dabd7a..c4c9eba8 100644 --- a/src/i18n/hu_HU.json +++ b/src/i18n/hu_HU.json @@ -2,7 +2,7 @@ "i18n.languageName": "Magyar", "i18n.languageNameEnglish": "Hungarian", "i18n.category": "main", - "i18n.authors": "@Amaru", + "i18n.authors": "@Amaru @BenjaminStonawski", "app.name": "Cider", "date.format": "${y} ${m} ${d}", "dialog.cancel": "Mégsem", @@ -22,7 +22,6 @@ "term.logout": "Kijelentkezés", "term.login": "Bejelentkezés", "term.quickNav": "Főmenü", - "term.cast": "Tükrözés", "term.about": "Névjegy", "term.privateSession": "Privát hallgatás", "term.disablePrivateSession": "Privát hallgatás kikapcsolása", @@ -32,6 +31,12 @@ "term.miniplayer": "Minilejátszó", "term.history": "Előzmények", "term.search": "Keresés", + "term.scroll": "Görgetési mód", + "term.scroll.infinite": "Végtelen", + "term.scroll.paged": "${songsPerPage} oldalanként", + "term.live": "ÉLŐ", + "term.showSearch": "Keresési mező megjelenítése", + "term.hideSearch": "Keresési mező elrejtése", "term.library": "Könyvtár", "term.listenNow": "Hallgatás most", "term.browse": "Böngészés", @@ -41,8 +46,8 @@ "term.albums": "Albumok", "term.artists": "Előadók", "term.podcasts": "Podcastok", - "term.charts": "Listák", "term.playlists": "Lejátszási listák", + "term.charts": "Listák", "term.playlist": "Lejátszási lista", "term.newPlaylist": "Új lejátszási lista", "term.newPlaylistFolder": "Új mappa", @@ -52,10 +57,12 @@ "term.navigateBack": "Visszalépés", "term.navigateForward": "Előrelépés", "term.play": "Lejátszás", + "term.playpause": "Lejátszás/Megállítás", "term.pause": "Megállítás", "term.stop": "Leállítás", "term.previous": "Előző", "term.next": "Következő", + "term.skip": "Átugrás", "term.shuffle": "Keverés", "term.enableShuffle": "Keverés bekapcsolása", "term.disableShuffle": "Keverés kikapcsolása", @@ -178,6 +185,7 @@ "term.top": "Top", "term.version": "Verzió", "term.noVideos": "Nincs találat", + "term.plugins": "Plug-in-ok", "term.plugin": "Plug-in", "term.pluginMenu": "Plug-in Menü", "term.pluginMenu.none": "Nem találhatóak interaktív pluginok", @@ -194,6 +202,22 @@ "term.confirmLogout": "Biztosan ki szeretnél jelentkezni?", "term.creditDesignedBy": "Készítette ${authorUsername}", "term.discNumber": "${discNumber}. lemez", + "term.reload": "Biztosan újraindítod a Cider-t?", + "term.toggleprivate": "Privát zenehallgatás", + "term.webremote": "Távirányító", + "term.cast": "Tükrözés", + "term.cast2": "Tükrözés eszközökre", + "term.quit": "Kilépés", + "term.zoomin": "Nagyítás", + "term.zoomout": "Kicsinyítés", + "term.zoomreset": "Nagyítás visszaállítása", + "term.fullscreen": "Teljes képernyő", + "term.nowPlaying": "Jelenleg lejátszás alatt", + "home.syncFavorites": "Kedvencek szinkronizálása", + "home.syncFavorites.gettingArtists": "Kedvenc előadók betöltése..", + "action.favorite": "Kedvenc", + "action.removeFavorite": "Eltávolítás a kedvencek közül", + "action.refresh": "Frissítés", "home.title": "Kezdőlap", "home.recentlyPlayed": "Nemrég játszott", "home.recentlyAdded": "Nemrég hozzáadott", @@ -222,6 +246,7 @@ "action.delete": "Törlés", "action.edit": "Szerkesztés", "action.done": "Kész", + "action.submit": "Befejezés", "action.editTracklist": "Dalok szerkesztése", "action.addToLibrary": "Hozzáadás a Könyvtárhoz", "action.addToLibrary.success": "Hozzáadva a Könyvtárhoz", @@ -266,11 +291,7 @@ "action.export": "Exportálás", "action.showAlbum": "Teljes album megjelenítése", "action.tray.minimize": "Kicsinyítés a Tálcára", - "action.tray.quit": "Bezárás", "action.tray.show": "Cider megjelenítése", - "action.tray.playpause": "Lejátszás/Megállítás", - "action.tray.next": "Következő", - "action.tray.previous": "Előző", "action.tray.listento": "Ezt hallgatja:", "action.update": "Frissítés", "action.install": "Telepítés", @@ -290,44 +311,25 @@ "action.createNew": "Új létrehozása...", "action.openArtworkInBrowser": "Borító megnyitása a böngészőben", "action.scrollToTop": "Felülre", - "menubar.options.about": "Névjegy", - "menubar.options.settings": "Beállítások", - "menubar.options.quit": "Bezárás", - "menubar.options.view": "View ", - "menubar.options.reload": "Reload", - "menubar.options.forcereload": "Force Reload", + "menubar.options.view": "Jelenítse meg a(z) ", + "menubar.options.reload": "Újratöltés", + "menubar.options.forcereload": "Kényszerített újratöltés", "menubar.options.toggledevtools": "Fejlesztői eszközök", "menubar.options.window": "Ablak", "menubar.options.minimize": "Kicsinyítés", - "menubar.options.toggleprivate": "Privát hallgatás ki/be", - "menubar.options.webremote": "Távirányító", - "menubar.options.audio": "Hangbeállítások", "menubar.options.plugins": "Plug-in Menü", - "menubar.options.controls": "Controls", - "menubar.options.next": "Következő", - "menubar.options.playpause": "Lejátszás/Megállítás", - "menubar.options.previous": "Előző", + "menubar.options.controls": "Irányítások", "menubar.options.volumeup": "Hangerő fel", "menubar.options.volumedown": "Hangerő le", - "menubar.options.browse": "Böngészés", - "menubar.options.artists": "Előadók", - "menubar.options.search": "Keresés", - "menubar.options.albums": "Albumok", - "menubar.options.cast": "Tükrözés", "menubar.options.account": "Fiók", - "menubar.options.accountsettings": "Fiókbeállítások", "menubar.options.signout": "Kijelentkezés", "menubar.options.support": "Támogatás", - "menubar.options.discord": "Discord", - "menubar.options.github": "GitHub Wiki", - "menubar.options.report": "Report a...", - "menubar.options.bug": "Bug", - "menubar.options.feature": "Feature Request", - "menubar.options.trans": "Translation Report/Request", + "menubar.options.report": "Jelentsd be egy...", + "menubar.options.bug": "Hiba", + "menubar.options.feature": "Funkciókérés", + "menubar.options.trans": "Fordítással kapcsolatos bejelentés/kérelem", "menubar.options.license": "Licensz megtekintése", "menubar.options.conf": "Open Configuration File in Editor", - "menubar.options.listennow": "Hallgatás most", - "menubar.options.recentlyAdded": "Nemrég hozzáadott", "menubar.options.songs": "Dalok", "settings.header.general": "Általános", "settings.header.general.description": "A Cider általános beállításainak módosítása.", @@ -348,13 +350,19 @@ "settings.option.general.customizeSidebar": "Oldalsáv elemeinek testreszabása", "settings.option.general.customizeSidebar.customize": "Testreszabás", "settings.option.general.keybindings": "Billentyűparancsok", + "settings.option.general.keybindings.library": "Könyvtár", + "settings.option.general.keybindings.session": "Zenehallgatás", + "settings.option.general.keybindings.control": "Irányítások", + "settings.option.general.keybindings.interface": "Felület", + "settings.option.general.keybindings.advanced": "Haladó", "settings.option.general.keybindings.pressCombination": "Nyomj le két billentyűt a parancs frissítéséhez.", "settings.option.general.keybindings.pressEscape": "Nyomj Escape-et a visszalépéshez.", "settings.notyf.general.keybindings.update.success": "Billentyűparancs sikeresen frissítve", "settings.prompt.general.keybindings.update.success": "Billentyűparancs sikeresen frissítve. Kattints az OK-ra a Cider újraindításához!", - "settings.option.general.keybindings.open": "Megnyitás", "settings.option.general.themeUpdateNotification": "Automatikus témafrissítések keresése", "settings.option.general.showLovedTracksInline": "Show loved tracks inline", + "settings.option.general.pagination": "Elemek megjelenítése oldalanként", + "settings.options.general.pagination.description": "Ez határozza meg, hogy mennyi zeneszám/album jelenjen meg eleinte a végtelen görgetésben, vagy hány zeneszám/album jelenjen meg egyetlen oldalon", "settings.description.search": "Keresés", "settings.description.albums": "Albumkönyvtár", "settings.description.artists": "Előadókönyvtár", @@ -410,6 +418,15 @@ "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Az Atmoszféra Változató™️ modul módját változtatja meg.", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Natural (Standard)", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Natural (Plus)", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1": "Rock Salt Cheese Foam Tea", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonlight Softcake", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Brown Sugar Creme Brûlée Milk", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "Clafoutis aux Cerises", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "Uji Matcha Mochi", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddle Warmth", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Feljavítja az AAC hang minőségét egy valós idejű algoritmus segítségével, ami kihasználja az emberi hallás pszichoakusztikus modelljeit és az AAC hang kódolási jellemzőit.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "A CAP nem kompatibilis a Térbeli Hanggal. Kapcsold ki a Térbeli Hangot a folytatáshoz.", @@ -426,23 +443,22 @@ "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Előre beállított Térbeli hangzás, ami letiltja a Térbeli Hang testreszabási beállításait. A Térbeli Hangot be kell kapcsolni az engedélyezéshez.", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Térbeli Hangprofil", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Megváltoztatja a Térbeli Hang előbeállítás profilját.", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standard", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "Soundstage", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separation", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Diffused", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encore", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Expanded Encore", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Alapértelmezett", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "Hangszínpad", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Elválasztás", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimális", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiofil", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Diffúz", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Ráadás", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Kiterjesztett ráadás", "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "A Térbeli Hang nem kompatibilis a CAP-pal. Kapcsold ki a CAP-ot a folytatáshoz.", "settings.option.audio.dbspl.display": "dB SPL kijelzés", "settings.option.audio.dbspl.description": "(Haladó felhasználóknak) A hangerő dB SPL-ben történő kijelzése a dBFS helyett.", "settings.option.audio.dbfs.calibration": "0 dBFS kalibráció", - "settings.option.audio.dbfs.description": "Enter the peak Z-weighted dB SPL when Cider is at 0 dBFS.", + "settings.option.audio.dbfs.description": "Adja meg a csúcs Z-súlyozott dB SPL értékét, amikor a Cider 0 dBFS-en van.", "settings.header.visual": "Vizuális", "settings.header.visual.description": "A Cider vizuális beállításainak módosítása.", "settings.option.visual.windowStyle": "Ablakelrendezés", - "settings.option.visual.purplePodcastPlaybackBar": "Lila lejátszási sáv a Podcastoknál", "settings.option.visual.windowBackgroundStyle": "Ablakháttér stílusa", "settings.header.visual.windowBackgroundStyle.none": "Sehol", "settings.header.visual.windowBackgroundStyle.artwork": "Borító", @@ -465,12 +481,14 @@ "settings.option.visual.uiscale": "Nagyítás mértéke", "settings.header.visual.theme": "Téma", "settings.option.visual.theme.github.download": "Telepítés GitHub URL-ről", + "settings.option.visual.theme.github.openfolder": "Témák mappa megnyitása", "settings.option.visual.theme.github.explore": "Témák felfedezése", "settings.header.visual.theme.github.page": "Témák a GitHub-ról", "settings.option.visual.theme.github.install.confirm": "Biztosan szeretnéd telepíteni a(z) {{ repo }} témát?", "settings.prompt.visual.theme.github.URL": "Add meg a telepítendő téma URL-jét", "settings.prompt.visual.theme.uninstallTheme": "Biztos, hogy törölni szeretnéd a {{ theme }} témát?", "settings.option.visual.theme.checkForUpdates": "Frissítések keresése", + "settings.header.visual.styles": "Stílusok", "settings.option.visual.theme.manageStyles": "Témakezelő", "settings.option.visual.theme.uninstall": "Törlés", "settings.option.visual.theme.viewInfo": "Információk", @@ -522,6 +540,13 @@ "settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playing engedélyezése", "settings.option.connectivity.lastfmScrobble.removeFeatured": "Közreműködő zenészek eltávolítása a címből (Last.fm)", "settings.option.connectivity.lastfmScrobble.filterLoop": "Ismételt zeneszám szűrése (Last.fm)", + "settings.option.connectivity.lastfmScrobble.filterLoop.description": "Ismételt zeneszámok scrobble-zésének és megjelenítésének letiltása a jelenleg lejátszás alatt listában (Last.fm)", + "settings.option.connectivity.lastfmScrobble.filterTypes": "Médiatípusok szűrése (Last.fm)", + "settings.option.connectivity.lastfmScrobble.manualToken": "Last.fm Token beírása manuálisan", + "settings.option.connectivity.lastfmScrobble.manualToken.link": "Last.fm Token legenerálásához kattints ide", + "settings.notyf.connectivity.lastfmScrobble.connectError": "A Last.fm csatlakozása során időtullépés lépett fel", + "settings.notyf.connectivity.lastfmScrobble.connectSuccess": "A Last.fm csatlakozása sikeres volt", + "settings.notyf.connectivity.lastfmScrobble.connecting": "Last.fm-hez való csatlakozás...", "settings.header.debug": "Hibaelhárítás", "settings.option.debug.copy_log": "Napló másolása a vágólapra", "settings.option.debug.openAppData": "Cider mappa megnyitása", @@ -533,17 +558,24 @@ "settings.option.experimental.unknownPlugin.description": "Engedélyezi azon pluginok telepítését is, amik nem tartoznak a Cider Plugin Gyűjteménybe, ezáltal lehetséges biztonsági kockázatot jelenthetnek.", "settings.option.experimental.compactUI": "Kompakt felület", "settings.option.window.close_button_hide": "A bezárás gomb rejtse el az alkalmazást", + "settings.option.window.maxElementScale": "Maximális elem skála", "settings.option.experimental.inline_playlists": "Ablakon belüli lejátszási listák és albumok", "settings.option.advanced.playlistTrackMapping": "Lejátszási lista feltérképezés", "settings.option.advanced.playlistTrackMapping.description": "Engedélyezi a lejátszási listák mély feltérképezését, ami meg tudja határozni, hogy egy zeneszám mely lejátszási listákba található. A lejátszási lista gyorsítótár felépítésének időtartalma nagy mértékben megnőhet.", "settings.option.visual.transparent": "Átlátszó keret", - "settings.option.visual.transparent.description": "a Témák támogatása és újraindítás szükséges", + "settings.option.visual.transparent.description": "a Témák támogatása (újraindítás szükséges)", + "settings.option.visual.customAccentColor": "Egyedi kiemelőszín", + "settings.option.visual.accentColor": "Kiemelőszín", + "settings.option.visual.purplePodcastPlaybackBar": "Lila lejátszási sáv podcastok lejátszása esetén", + "settings.option.visual.compactArtistHeader": "Kompakt előadó fejléc", + "settings.option.visual.windowColor": "Az ablak színárnyalata", + "settings.header.visual.windowBackgroundStyle.color": "Színárnyalat", "settings.header.advanced": "Haladó", - "settings.header.connect": "Sync", - "settings.option.connect.link_account": "Enable Sync with Cider Connect", - "settings.option.connect.link_account.description": "Linking your Discord account with Cider Connect allows you to store userdata including Settings, EQ's, and eventually more once finished. (Work In Progress)", + "settings.header.connect": "Szinkronizálás", + "settings.option.connect.link_account": "Szinkronizálás a Cider Connect szolgáltatással engedélyezése", + "settings.option.connect.link_account.description": "A Discord fiók összekapcsolása a Cider Connect szolgáltatással lehetővé teszi a felhasználói adatok tárolását, beleértve a beállításokat, az EQ-kat és esetleg még többet. (Fejlesztés alatt)", "spatial.notTurnedOn": "A Térbeli Hang ki van kapcsolva, használatához kapcsolja be.", - "spatial.spatialProperties": "Térbeli Hang", + "spatial.spatialProperties": "Térbeli hang", "spatial.width": "Szélesség", "spatial.height": "Magasság", "spatial.depth": "Hosszúság", @@ -575,4 +607,31 @@ "share.platform.songLink": "song.link URL másolása", "share.platform.clipboard": "Link másolása", "about.thanks": "Köszönet a Cider Collective csapatának és minden hozzájárulónak." + "oobe.yes": "Igen", + "oobe.no": "Nem", + "oobe.next": "Következő", + "oobe.previous": "Előző", + "oobe.done": "Kész", + "oobe.amupsell.title": "Még mielőtt belevágnánk", + "oobe.amupsell.text": "A Cider Apple Music előfizetést igényel\nA Cider nem támogatja az Apple Music Voice Plan-t vagy más fajta promóciós próba előfizetéseket. Ha már Apple Music előfizető vagy, lépj tovább.", + "oobe.amupsell.subscribeBtn": "Előfizetés Apple Music-ra", + "oobe.amupsell.explainBtn": "Magyarázat", + "oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ", + "oobe.amupsell.amWebUrl": "https://beta.music.apple.com/", + "oobe.amupsell.promoExplained": "Egyes promóciós és nem egyesült államokbeli Apple Music próba-előfizetések nem férnek hozzá a szükséges Apple Music Web Player API-khoz, amelyek a Cider működéséhez szükségesek. Ha le szeretnéd ellenőrizni, hogy az aktív előfizetésed kompatibilis a Cider-rel, kattints a {{ amWebUrl }} linkre, jelentkezz be és próbálj meg lejátszani bármilyen zenét. Ha működik, akkor jó hírunk van! Készen állsz arra, hogy használd a Cider-t. Viszont ha mégsem működött, fizess elő Apple Music-ra ezen a linken: {{ subscribeUrl }}", + "oobe.intro.title": "Üdvözlünk a Cider-ben!", + "oobe.intro.subtitle": "", + "oobe.intro.text": "Állítsunk be néhány dolgot, hogy tetszés szerint használhasd a Cider-t. Ezeket a beállításokat később bármikor módosíthatod.", + "oobe.general.title": "Általános", + "oobe.general.subtitle": "", + "oobe.general.text": "", + "oobe.audio.title": "Hang", + "oobe.audio.subtitle": "", + "oobe.audio.text": "A Cider egyedi hangolású és tervezett hangkészletekkel rendelkezik, amely gazdag, kiváló minőségű hangélményt biztosít.\nKöztük van a Cider Adrenaline, Atmosphere Realizer, és a Spatialized Audio.\nA hangkészletek engedélyezéséhez a \"Fejlett audiófunkciók\"-at be kell kapcsolni.\nA fejlett audiófunkciók engedélyezése hozzáférést biztosít ezekhez a hangkészletekhez a Cider Audio Labs szolgáltatásban, amely az alkalmazás beállításai között található.", + "oobe.audio.advancedFunctionality": "", + "oobe.visual.title": "Vizuális", + "oobe.visual.subtitle": "", + "oobe.visual.text": "", + "oobe.visual.layout.text": "A Cider két különböző ablakmegjelenéssel rendelkezik.\nA Maverick egy iTunes-ra hasonló megjelenést biztosít, a zenelejátszó az ablak tetején található.\nA Mojave egy új hullám a Cider Collective által készítve.\n\nBármikor megváltoztathatod a megjelenést a beállításokban.", + "oobe.amsignin.title": "" } From 167893e890cd913eb9af7f120a7dc3a2201bd118 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sun, 4 Sep 2022 18:38:26 +0700 Subject: [PATCH 037/210] adding search suggestions --- src/renderer/less/elements.less | 26 +++++++++++++++ src/renderer/main/vueapp.js | 25 +++++++++++--- src/renderer/views/app/chrome-top.ejs | 40 ++++++++++++++++++++--- src/renderer/views/components/sidebar.ejs | 40 ++++++++++++++++++++--- src/renderer/views/pages/search.ejs | 39 +++++++++++++++++++--- 5 files changed, 152 insertions(+), 18 deletions(-) diff --git a/src/renderer/less/elements.less b/src/renderer/less/elements.less index 19f960e7..b2c7377a 100644 --- a/src/renderer/less/elements.less +++ b/src/renderer/less/elements.less @@ -334,6 +334,15 @@ width: 42px; height: 42px; flex: 0 0 auto; + &.circle{ + border-radius: 50%; + .mediaitem-artwork{ + border-radius: 50%; + } + img { + border-radius: 50%; + } + } } &:hover { @@ -349,6 +358,11 @@ color: #eee; } + &.hintactive { + background: var(--keyColor); + border-radius: 6px; + } + .queue-info { justify-content: center; display: flex; @@ -392,6 +406,18 @@ } } +.search-hints .cd-queue-item{ + &:hover { + background: var(--selected); + border-radius: 6px; + } + &:active { + background: var(--selected-click); + color: #eee; + border-radius: 6px; + } +} + /* horizontal media scroller */ .cd-hmedia-scroller { &::-webkit-scrollbar-thumb { diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index d9aaed7c..76dffdd3 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -1903,8 +1903,18 @@ const app = new Vue({ this.search.hints = []; return; } - let hints = await (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search/hints?term=${this.search.term}`)).data.results; - this.search.hints = hints ? hints.terms : []; + let hints = await (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search/suggestions?term=${this.search.term}`, + {"fields[albums]": "artwork,name,playParams,url,artistName,id", + "fields[artists]": "url,name,artwork,id", + "fields[songs]": "artwork,name,playParams,url,artistName,id", + "kinds": "terms,topResults", + "l": this.mklang, + "limit[results:terms]": 5, + "limit[results:topResults]": 5, + "omit[resource]": "autos", + "platform": "web", + "types": "activities,albums,artists,editorial-items,music-movies,playlists,record-labels,songs,stations"})).data.results; + this.search.hints = hints ? hints.suggestions : []; }, getSongProgress() { if (this.playerLCD.userInteraction) { @@ -3890,15 +3900,22 @@ const app = new Vue({ if (e.keyCode == "40") { if (this.search.hints.length - 1 < this.search.cursor + 1) return; this.search.cursor++; - this.search.term = this.search.hints[this.search.cursor]; + let item = this.search.hints[this.search.cursor] + this.search.term = item.content ? (item.content?.attributes?.name ?? "") :item.displayTerm; } else if (e.keyCode == "38") { if (this.search.cursor == 0) return; this.search.cursor--; - this.search.term = this.search.hints[this.search.cursor]; + let item = this.search.hints[this.search.cursor] + this.search.term = item.content ? (item.content?.attributes?.name ?? "") :item.displayTerm; } }, async searchQuery(term = this.search.term) { let self = this; + if (typeof term === "object"){ + this.routeView(term) + this.search.term = "" + return; + } if (term == "") { return; } diff --git a/src/renderer/views/app/chrome-top.ejs b/src/renderer/views/app/chrome-top.ejs index a65f0a7e..2530ba0c 100644 --- a/src/renderer/views/app/chrome-top.ejs +++ b/src/renderer/views/app/chrome-top.ejs @@ -277,10 +277,10 @@ diff --git a/src/renderer/views/components/sidebar.ejs b/src/renderer/views/components/sidebar.ejs index baf16fe4..1c89bc6a 100644 --- a/src/renderer/views/components/sidebar.ejs +++ b/src/renderer/views/components/sidebar.ejs @@ -7,10 +7,10 @@ + diff --git a/src/renderer/views/pages/search.ejs b/src/renderer/views/pages/search.ejs index 2f8d967a..abd3d053 100644 --- a/src/renderer/views/pages/search.ejs +++ b/src/renderer/views/pages/search.ejs @@ -4,17 +4,48 @@
- +
+
From db0316963cea5a9922ad17c6f535fc6f8c4a2d08 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sun, 4 Sep 2022 13:00:55 +0000 Subject: [PATCH 038/210] chore: Prettified Code [ci skip] --- src/renderer/less/elements.less | 6 ++--- src/renderer/main/vueapp.js | 39 ++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/renderer/less/elements.less b/src/renderer/less/elements.less index b2c7377a..4c9cb482 100644 --- a/src/renderer/less/elements.less +++ b/src/renderer/less/elements.less @@ -334,9 +334,9 @@ width: 42px; height: 42px; flex: 0 0 auto; - &.circle{ + &.circle { border-radius: 50%; - .mediaitem-artwork{ + .mediaitem-artwork { border-radius: 50%; } img { @@ -406,7 +406,7 @@ } } -.search-hints .cd-queue-item{ +.search-hints .cd-queue-item { &:hover { background: var(--selected); border-radius: 6px; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 76dffdd3..010c77ba 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -1903,17 +1903,20 @@ const app = new Vue({ this.search.hints = []; return; } - let hints = await (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search/suggestions?term=${this.search.term}`, - {"fields[albums]": "artwork,name,playParams,url,artistName,id", - "fields[artists]": "url,name,artwork,id", - "fields[songs]": "artwork,name,playParams,url,artistName,id", - "kinds": "terms,topResults", - "l": this.mklang, - "limit[results:terms]": 5, - "limit[results:topResults]": 5, - "omit[resource]": "autos", - "platform": "web", - "types": "activities,albums,artists,editorial-items,music-movies,playlists,record-labels,songs,stations"})).data.results; + let hints = await ( + await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search/suggestions?term=${this.search.term}`, { + "fields[albums]": "artwork,name,playParams,url,artistName,id", + "fields[artists]": "url,name,artwork,id", + "fields[songs]": "artwork,name,playParams,url,artistName,id", + kinds: "terms,topResults", + l: this.mklang, + "limit[results:terms]": 5, + "limit[results:topResults]": 5, + "omit[resource]": "autos", + platform: "web", + types: "activities,albums,artists,editorial-items,music-movies,playlists,record-labels,songs,stations", + }) + ).data.results; this.search.hints = hints ? hints.suggestions : []; }, getSongProgress() { @@ -3900,20 +3903,20 @@ const app = new Vue({ if (e.keyCode == "40") { if (this.search.hints.length - 1 < this.search.cursor + 1) return; this.search.cursor++; - let item = this.search.hints[this.search.cursor] - this.search.term = item.content ? (item.content?.attributes?.name ?? "") :item.displayTerm; + let item = this.search.hints[this.search.cursor]; + this.search.term = item.content ? item.content?.attributes?.name ?? "" : item.displayTerm; } else if (e.keyCode == "38") { if (this.search.cursor == 0) return; this.search.cursor--; - let item = this.search.hints[this.search.cursor] - this.search.term = item.content ? (item.content?.attributes?.name ?? "") :item.displayTerm; + let item = this.search.hints[this.search.cursor]; + this.search.term = item.content ? item.content?.attributes?.name ?? "" : item.displayTerm; } }, async searchQuery(term = this.search.term) { let self = this; - if (typeof term === "object"){ - this.routeView(term) - this.search.term = "" + if (typeof term === "object") { + this.routeView(term); + this.search.term = ""; return; } if (term == "") { From 819ac7f43dddcd76c4e30076317f9e53fb79f861 Mon Sep 17 00:00:00 2001 From: Core Date: Sun, 4 Sep 2022 17:18:05 +0100 Subject: [PATCH 039/210] updated account settings link, normal site not workin --- src/renderer/views/pages/apple-account-settings.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/views/pages/apple-account-settings.ejs b/src/renderer/views/pages/apple-account-settings.ejs index 6b970995..72634919 100644 --- a/src/renderer/views/pages/apple-account-settings.ejs +++ b/src/renderer/views/pages/apple-account-settings.ejs @@ -1,7 +1,7 @@ From f3e97f03ba4240f008785b648e5329e9374a1672 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Mon, 5 Sep 2022 23:09:44 +0700 Subject: [PATCH 040/210] fix --- src/renderer/style.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index 23014cf2..d4e0fa52 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -724,7 +724,7 @@ input[type="range"].web-slider::-webkit-slider-runnable-track { .search-hints-container { top: 44px; - background: rgb(30 30 30); + // background: rgb(30 30 30); #cmenu.container(); .search-hints { From 9bbbb6d276342b508f07f1e6078b0602e655d892 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 8 Sep 2022 18:07:51 +0700 Subject: [PATCH 041/210] add context menu to suggestions --- src/main/base/browserwindow.ts | 1 + src/main/base/vcomponents.json | 1 + src/renderer/audio/audio.js | 2 +- src/renderer/main/vueapp.js | 1 + src/renderer/views/app/chrome-top.ejs | 31 +- .../views/components/mediaitem-square.ejs | 4 +- src/renderer/views/components/menu-panel.ejs | 23 +- src/renderer/views/components/sidebar.ejs | 31 +- src/renderer/views/components/smarthints.ejs | 382 ++++++++++++++++++ src/renderer/views/pages/replay.ejs | 7 +- src/renderer/views/pages/search.ejs | 31 +- 11 files changed, 417 insertions(+), 97 deletions(-) create mode 100644 src/renderer/views/components/smarthints.ejs diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index f4fcf21f..a3aaa9bd 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -90,6 +90,7 @@ export class BrowserWindow { "components/equalizer", "components/add-to-playlist", "components/queue", + "components/smarthints", "components/mediaitem-scroller-horizontal", "components/mediaitem-scroller-horizontal-large", "components/mediaitem-scroller-horizontal-sp", diff --git a/src/main/base/vcomponents.json b/src/main/base/vcomponents.json index 65d7067a..2c694941 100644 --- a/src/main/base/vcomponents.json +++ b/src/main/base/vcomponents.json @@ -42,6 +42,7 @@ "components/moreinfo-modal", "components/equalizer", "components/add-to-playlist", + "components/smarthints", "components/queue", "components/mediaitem-scroller-horizontal", "components/mediaitem-scroller-horizontal-large", diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index c66a746c..99645e24 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -397,7 +397,7 @@ const CiderAudio = { constructor() { super(); - this._bufferSize = 1024; + this._bufferSize = 2048; this._buffers = null; this._initBuffer(); } diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 010c77ba..9e73b405 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -159,6 +159,7 @@ const app = new Vue({ miniTmpY: "", tmpVar: [], notification: false, + hintscontext: false, chrome: { sidebarCollapsed: false, nativeControls: false, diff --git a/src/renderer/views/app/chrome-top.ejs b/src/renderer/views/app/chrome-top.ejs index 2530ba0c..772fc6cf 100644 --- a/src/renderer/views/app/chrome-top.ejs +++ b/src/renderer/views/app/chrome-top.ejs @@ -279,7 +279,7 @@
diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index e10c873b..94aca1c8 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -576,7 +576,7 @@ Vue.component('mediaitem-square', { icon: "./assets/feather/play.svg", name: app.getLz('action.startRadio'), action: () => { - app.mk.setStationQueue({ artist: this.item.id }).then(() => { + app.mk.setStationQueue({ artist: 'a-'+this.item.id }).then(() => { app.mk.play() }) } @@ -586,7 +586,7 @@ Vue.component('mediaitem-square', { icon: "./assets/feather/share.svg", name: app.getLz('term.share'), action: () => { - self.app.copyToClipboard(this.item.id.attributes.url) + self.app.copyToClipboard(this.item.attributes.url) } }, { diff --git a/src/renderer/views/components/menu-panel.ejs b/src/renderer/views/components/menu-panel.ejs index 2028854c..203dd5da 100644 --- a/src/renderer/views/components/menu-panel.ejs +++ b/src/renderer/views/components/menu-panel.ejs @@ -1,5 +1,5 @@ + + \ No newline at end of file diff --git a/src/renderer/views/pages/replay.ejs b/src/renderer/views/pages/replay.ejs index 8550a66a..1d5e7f3d 100644 --- a/src/renderer/views/pages/replay.ejs +++ b/src/renderer/views/pages/replay.ejs @@ -23,8 +23,10 @@
-

{{ convertToHours(loaded.attributes.listenTimeInMinutes) }} - {{$root.getLz('term.time.hours')}}

+

{{convertToHours(loaded.attributes.listenTimeInMinutes)}} + {{$root.getLz('term.time.hours')}} + {{hourshow ? "" : (loaded.attributes.listenTimeInMinutes % 60) }} + {{hourshow ? "" : $root.getLz('term.time.minutes')}}

{{ loaded.attributes.uniqueAlbumCount }} {{$root.getLz('term.uniqueAlbums')}}

{{ loaded.attributes.uniqueArtistCount }} {{$root.getLz('term.uniqueArtists')}}

{{ loaded.attributes.uniqueSongCount }} {{$root.getLz('term.uniqueSongs')}}

@@ -101,6 +103,7 @@ loaded: { id: -1 }, + hourshow: true, musicTypeGenre: "" } }, diff --git a/src/renderer/views/pages/search.ejs b/src/renderer/views/pages/search.ejs index abd3d053..eb27407d 100644 --- a/src/renderer/views/pages/search.ejs +++ b/src/renderer/views/pages/search.ejs @@ -3,7 +3,7 @@ From 74e1e3d38aa2304eaf770d64ff4f26e6fcc3c8a3 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 8 Sep 2022 18:16:00 +0700 Subject: [PATCH 042/210] fix add to lib for suggestion contextmenu --- src/renderer/views/components/smarthints.ejs | 24 +++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/renderer/views/components/smarthints.ejs b/src/renderer/views/components/smarthints.ejs index 7abecd87..c841d222 100644 --- a/src/renderer/views/components/smarthints.ejs +++ b/src/renderer/views/components/smarthints.ejs @@ -50,6 +50,28 @@ async mounted() { }, methods: { + async isInLibrary() { + if (this.item.type && !this.item.type.includes("library")) { + let params = { + relate: "library", + "fields": "inLibrary", + "extend": this.revisedRandId() + } + let kind = this.item.type ?? this.item.attributes.playParams.kind + let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; + if (truekind === "musicVideos") { + truekind = "music-videos" + } + let res = await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/?ids[${truekind}]=${this.item.attributes.playParams.id ?? this.item.id}`, params); + res = res.data.data[0] + this.addedToLibrary = (res && res.attributes && res.attributes.inLibrary) ? res.attributes.inLibrary : false + } else { + this.addedToLibrary = true + } + }, + revisedRandId() { + return Math.random().toString(36).replace(/[^a-z]+/g, '').slice(2, 10); + }, uuidv4() { return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) @@ -276,7 +298,7 @@ }) } catch (e) { - + console.log(e) } try { let rating = await app.getRating(self.item) From 1d8b39aa010710331554db0f463f23a5754b69e6 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Fri, 9 Sep 2022 22:35:36 +0700 Subject: [PATCH 043/210] fix search --- package.json | 2 +- src/renderer/views/app/chrome-top.ejs | 2 +- src/renderer/views/components/sidebar.ejs | 2 +- src/renderer/views/pages/search.ejs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index ab00ee7a..6375b5b3 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "run-script-os": "^1.1.6", "source-map-support": "^0.5.21", "ts-md5": "1.2.11", - "upnp-mediarenderer-client": "github:vapormusic/node-upnp-mediarenderer-client", + "upnp-mediarenderer-client": "git+https://github.com/vapormusic/node-upnp-mediarenderer-client.git", "v8-compile-cache": "^2.3.0", "wallpaper": "5.0.1", "ws": "^8.8.1", diff --git a/src/renderer/views/app/chrome-top.ejs b/src/renderer/views/app/chrome-top.ejs index 772fc6cf..fc30234f 100644 --- a/src/renderer/views/app/chrome-top.ejs +++ b/src/renderer/views/app/chrome-top.ejs @@ -280,7 +280,7 @@
From b6d62e5b15acb959a38ef4fcd70c66d7e7fa93be Mon Sep 17 00:00:00 2001 From: vapormusic Date: Fri, 9 Sep 2022 15:36:31 +0000 Subject: [PATCH 044/210] chore: Updated Lockfile --- pnpm-lock.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb1dcfb6..2d1083b1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ specifiers: source-map-support: ^0.5.21 ts-md5: 1.2.11 typescript: ^4.7.4 - upnp-mediarenderer-client: github:vapormusic/node-upnp-mediarenderer-client + upnp-mediarenderer-client: git+https://github.com/vapormusic/node-upnp-mediarenderer-client.git v8-compile-cache: ^2.3.0 vue-devtools: ^5.1.4 wallpaper: 5.0.1 @@ -56,7 +56,7 @@ dependencies: '@sentry/electron': 4.0.0 '@sentry/integrations': 7.11.1 adm-zip: 0.4.10 - airtunes2: github.com/ciderapp/node_airtunes2/909bc9ae208731bfe286cc6ee46d075aa56766eb + airtunes2: github.com/ciderapp/node_airtunes2/dd94d42717cd4f3b6117a121755933fd4f510239 castv2-client: 1.2.0 chokidar: 3.5.3 discord-auto-rpc: 1.0.17 @@ -96,7 +96,7 @@ devDependencies: '@types/node': 18.7.13 '@types/qrcode-terminal': 0.12.0 '@types/ws': 8.5.3 - electron: github.com/castlabs/electron-releases/8ca09f8539dc0c3f5a57af3fe23fb2db9661ab68 + electron: github.com/castlabs/electron-releases/5fdb0713d72234fb3a4f8b59aee90d0fccfd52c6 electron-builder: 23.3.3 electron-builder-notarize-pkg: 1.2.0 electron-webpack: 2.8.2_webpack@5.74.0 @@ -9865,10 +9865,10 @@ packages: got: 11.8.5 dev: false - github.com/castlabs/electron-releases/8ca09f8539dc0c3f5a57af3fe23fb2db9661ab68: - resolution: {tarball: https://codeload.github.com/castlabs/electron-releases/tar.gz/8ca09f8539dc0c3f5a57af3fe23fb2db9661ab68} + github.com/castlabs/electron-releases/5fdb0713d72234fb3a4f8b59aee90d0fccfd52c6: + resolution: {tarball: https://codeload.github.com/castlabs/electron-releases/tar.gz/5fdb0713d72234fb3a4f8b59aee90d0fccfd52c6} name: electron - version: 21.0.0-beta.1 + version: 21.0.0-beta.4 engines: {node: '>= 10.17.0'} hasBin: true requiresBuild: true @@ -9905,8 +9905,8 @@ packages: - supports-color dev: false - github.com/ciderapp/node_airtunes2/909bc9ae208731bfe286cc6ee46d075aa56766eb: - resolution: {tarball: https://codeload.github.com/ciderapp/node_airtunes2/tar.gz/909bc9ae208731bfe286cc6ee46d075aa56766eb} + github.com/ciderapp/node_airtunes2/dd94d42717cd4f3b6117a121755933fd4f510239: + resolution: {tarball: https://codeload.github.com/ciderapp/node_airtunes2/tar.gz/dd94d42717cd4f3b6117a121755933fd4f510239} name: airtunes2 version: 2.3.2 hasBin: true From 9eeb54e0a7d1a4f5dc5d4c697681a1ea4ade2794 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Fri, 9 Sep 2022 22:53:57 +0700 Subject: [PATCH 045/210] filter blank first row grouping item --- src/renderer/views/components/mediaitem-mvview-sp.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/views/components/mediaitem-mvview-sp.ejs b/src/renderer/views/components/mediaitem-mvview-sp.ejs index 5ec81176..1c938e8a 100644 --- a/src/renderer/views/components/mediaitem-mvview-sp.ejs +++ b/src/renderer/views/components/mediaitem-mvview-sp.ejs @@ -1,5 +1,5 @@ @@ -33,59 +23,11 @@ data: function() { return { app: this.$root, - radio: { personal: [], recent: [], am: [] } - } + }; }, - async mounted() { - this.radio.personal = await this.getPersonalStations() - this.radio.recent = await this.getRecentStations() - this.radio.am = await this.getAmStations() - console.log(this.radio) - // this.getPersonalStations(); - // this.getAmStations(); + mounted() { + this.$root.getRadioPage(); }, - methods: { - async getPersonalStations(attempts = 0) { - if (attempts > 3) { - return [] - } - try { - return (await app.mk.api.v3.music(`/v1/catalog/${app.mk.api.v3.storefrontId}/stations`, { - "filter[identity]": "personal", - })).data.data - } catch (e) { - console.error(`Failed to get personal stations: ${e}`) - await this.getPersonalStations(attempts + 1) - } - }, - async getRecentStations(attempts = 0) { - if (attempts > 3) { - return [] - } - try { - return (await app.mk.api.v3.music(`/v1/me/recent/radio-stations`, { - "platform": "web", - "art[url]": "f", - l: app.mklang - })).data.data - } catch (e) { - console.error(`Failed to get recent stations: ${e}`) - await this.getRecentStations(attempts + 1) - } - }, - async getAmStations(attempt = 0) { - if (attempt > 3) { - return [] - } - try { - return (await app.mk.api.v3.music(`/v1/catalog/${app.mk.api.v3.storefrontId}/stations`, { - "filter[featured]": "apple-music-live-radio", - })).data.data - } catch (e) { - console.error(`Failed to get AM stations: ${e}`) - await this.getAmStations(attempt + 1) - } - }, - } - }) + methods: {} + }); From a7b935707c51ea850ad0d94da706321096222404 Mon Sep 17 00:00:00 2001 From: Core Date: Tue, 13 Sep 2022 22:30:10 +0100 Subject: [PATCH 073/210] Update bug_report.yaml --- .github/ISSUE_TEMPLATE/bug_report.yaml | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 58a3c496..85d64312 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -25,7 +25,7 @@ body: placeholder: Tell us how you did it value: "1. Clicked on..." validations: - required: true + required: true - type: textarea id: environment attributes: @@ -33,12 +33,30 @@ body: description: | Examples: - **OS**: Ubuntu 20.04 - - **App Version** and/or **Commit ID**: 1.0.0 c9d43be + - **Desktop Environment (if applicable)**: i3wm + - **App Version**: 1.5.5-beta.22 + - **Commit ID (if available)**: c9d43be - To find app version, Cider Menu -> About + *To find the app version, Cider Menu -> About* value: | - OS: - - App Version and/or Commit ID: + - Desktop Environment: + - App Version: + - Commit ID: + validations: + required: true + - type: dropdown + id: download + attributes: + label: How did you download the software? + options: + - Microsoft Store + - GitHub + - Winget + - Winget (Nightly) + - Chocolatey + - Flathub + - AUR validations: required: true - type: textarea From 1b5ae2177e54b96d0f8ca14fd6d29ac08c26c4db Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 14 Sep 2022 01:00:29 +0100 Subject: [PATCH 074/210] radio page overhauled Signed-off-by: Core --- src/renderer/main/vueapp.js | 25 ++------- src/renderer/views/pages/radio.ejs | 88 +++++++++++++++++++++++++++--- 2 files changed, 86 insertions(+), 27 deletions(-) diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 37ce1bbd..bffa034c 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -45,10 +45,7 @@ const app = new Vue({ browsepage: [], listennow: [], madeforyou: [], - radio: { - "editorial": [], - "recent": [], - }, + radio: [], mklang: "en", webview: { url: "", @@ -3017,29 +3014,17 @@ const app = new Vue({ name: "radio", "omit[resource:artists]": "relationships", "include[albums]": "artists", - "include[music-videos]": "artists", "include[songs]": "artists", - "include[stations]": "events", - extend: "artistUrl,editorialArtwork", + "include[music-videos]": "artists", + extend: "editorialArtwork,artistUrl", "fields[artists]": "name,url,artwork,editorialArtwork,genreNames,editorialNotes", - "format[resources]": "map", "art[url]": "f", - l: app.mklang + l: app.mklang, }).then((radio) => { - app.radio.editorial = radio.data.resources + app.radio = radio.data.data[0]; console.debug(app.radio); }) - - app.mk.api.v3.music(`/v1/me/recent/radio-stations`, { - "platform": "web", - "art[url]": "f", - "format[resources]": "map", - l: app.mklang - }).then((radio) => { - app.radio.recent = radio.data - console.debug(app.radio); - }) this.radio.timestamp = Date.now(); } catch (e) { console.log(e); diff --git a/src/renderer/views/pages/radio.ejs b/src/renderer/views/pages/radio.ejs index 6f1c3017..486a9964 100644 --- a/src/renderer/views/pages/radio.ejs +++ b/src/renderer/views/pages/radio.ejs @@ -1,16 +1,71 @@ From a4973407e435524296919993594c958f0d9ed0c9 Mon Sep 17 00:00:00 2001 From: coredev-uk Date: Wed, 14 Sep 2022 00:02:13 +0000 Subject: [PATCH 075/210] chore: Prettified Code [ci skip] --- src/renderer/main/vueapp.js | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index bffa034c..f485c405 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -781,7 +781,6 @@ const app = new Vue({ // Restore mk - // load cached library let librarySongs = await CiderCache.getCache("library-songs"); let libraryAlbums = await CiderCache.getCache("library-albums"); @@ -3009,21 +3008,23 @@ const app = new Vue({ return; } try { - app.mk.api.v3.music(`/v1/editorial/${app.mk.storefrontId}/groupings`, { - platform: "web", - name: "radio", - "omit[resource:artists]": "relationships", - "include[albums]": "artists", - "include[songs]": "artists", - "include[music-videos]": "artists", - extend: "editorialArtwork,artistUrl", - "fields[artists]": "name,url,artwork,editorialArtwork,genreNames,editorialNotes", - "art[url]": "f", - l: app.mklang, - }).then((radio) => { - app.radio = radio.data.data[0]; - console.debug(app.radio); - }) + app.mk.api.v3 + .music(`/v1/editorial/${app.mk.storefrontId}/groupings`, { + platform: "web", + name: "radio", + "omit[resource:artists]": "relationships", + "include[albums]": "artists", + "include[songs]": "artists", + "include[music-videos]": "artists", + extend: "editorialArtwork,artistUrl", + "fields[artists]": "name,url,artwork,editorialArtwork,genreNames,editorialNotes", + "art[url]": "f", + l: app.mklang, + }) + .then((radio) => { + app.radio = radio.data.data[0]; + console.debug(app.radio); + }); this.radio.timestamp = Date.now(); } catch (e) { From b57f972fafc834710f7c14bb4f7f0b2fc149faf4 Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 14 Sep 2022 01:14:24 +0100 Subject: [PATCH 076/210] #1428 fix Signed-off-by: Core --- src/main/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/index.ts b/src/main/index.ts index 8a4dc148..a3c7f54f 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -62,9 +62,11 @@ app.on("ready", () => { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Renderer Event Handlers * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ - +let rendererInitialized = false; ipcMain.handle("renderer-ready", (event) => { + if (rendererInitialized) return; CiderPlug.callPlugins("onRendererReady", event); + rendererInitialized = true; }); ipcMain.on("playbackStateDidChange", (_event, attributes) => { From 3e0ecc294dd7fb429e0f287d2eb5f74725f7495a Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 14 Sep 2022 21:30:48 +0700 Subject: [PATCH 077/210] remove blank block for radio grouping --- src/renderer/views/pages/radio.ejs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/renderer/views/pages/radio.ejs b/src/renderer/views/pages/radio.ejs index 486a9964..6991d12d 100644 --- a/src/renderer/views/pages/radio.ejs +++ b/src/renderer/views/pages/radio.ejs @@ -52,6 +52,9 @@ +
diff --git a/src/renderer/views/pages/radio.ejs b/src/renderer/views/pages/radio.ejs index 6991d12d..0d029f53 100644 --- a/src/renderer/views/pages/radio.ejs +++ b/src/renderer/views/pages/radio.ejs @@ -86,9 +86,9 @@ }, mounted() { this.$root.getRadioPage(); - debugger + // debugger this.getRecentlyPlayed(); - debugger + // debugger }, methods: { getRecentlyPlayed: async function (next = null) { From 62a95f1ea12042f1bffbefb56dab3375d35d1e31 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 14 Sep 2022 15:52:13 +0000 Subject: [PATCH 079/210] chore: Prettified Code [ci skip] --- src/renderer/main/vueapp.js | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 30b0ba54..f90b176f 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -575,21 +575,23 @@ const app = new Vue({ window.location.hash = `#charts/top`; } else { const id = url.split("id=")[1]; - if (id != null){ - window.location.hash = `#groupings/${id}`;} else { + if (id != null) { + window.location.hash = `#groupings/${id}`; + } else { const params = new Proxy(new URLSearchParams(new URL(url).search), { get: (searchParams, prop) => searchParams.get(prop), }); let id = params.fcId; - app.getTypeFromID("room", id, false, { - platform: "web", - extend: "editorialArtwork,uber,lockupStyle", - }) - .then(() => { - let kind = "multiroom"; - window.location.hash = `${kind}/${id}`; - document.querySelector("#app-content").scrollTop = 0; - }); + app + .getTypeFromID("room", id, false, { + platform: "web", + extend: "editorialArtwork,uber,lockupStyle", + }) + .then(() => { + let kind = "multiroom"; + window.location.hash = `${kind}/${id}`; + document.querySelector("#app-content").scrollTop = 0; + }); } } }, @@ -2056,13 +2058,14 @@ const app = new Vue({ get: (searchParams, prop) => searchParams.get(prop), }); id = params.fcId; - kind = "multiroom" - if (item.attributes.link.url.includes("viewMultiRoom")){ - kind = "multiroom" + kind = "multiroom"; + if (item.attributes.link.url.includes("viewMultiRoom")) { + kind = "multiroom"; } else { - kind = "room" + kind = "room"; } - app.getTypeFromID(kind, id, false, { + app + .getTypeFromID(kind, id, false, { platform: "web", extend: "editorialArtwork,uber,lockupStyle", }) From d4e23a3e75fc8f0dddfbc4d66a2a371c949dcec4 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 14 Sep 2022 23:57:48 +0700 Subject: [PATCH 080/210] improved radio support --- src/renderer/main/vueapp.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index f90b176f..c3aff1d4 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -20,6 +20,7 @@ const app = new Vue({ pluginMenuEntries: [], lz: ipcRenderer.sendSync("get-i18n", "en_US"), lzListing: ipcRenderer.sendSync("get-i18n-listing"), + radiohls: null, search: { term: "", cursor: -1, @@ -5056,7 +5057,35 @@ const app = new Vue({ }); // Load first source let src = sources[0]; - app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false); + if (src.includes("http")){ + app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false);} else { + if (Hls.isSupported()) { + let d = "WIDEVINE_SOFTWARE" + let h = { + initDataTypes: ["cenc", "keyids"], + distinctiveIdentifier: "optional", + persistentState: "required" + } + let p = { + platformInfo: { requiresCDMAttachOnStart: !0, maxSecurityLevel: d, keySystemConfig: h }, + appData: { serviceName: "Apple Music" } + } + if (app.radiohls != null && app.radiohls.destroy != null){ + app.radiohls.destroy() + setTimeout(()=>{ + app.radiohls = new CiderHls(); + app.radiohls.loadSource(e); + app.radiohls.attachMedia(app.mk._services.mediaItemPlayback._currentPlayer._targetElement); + app.mk._services.mediaItemPlayback._currentPlayer._targetElement.play()},500) + } else { + app.radiohls = new CiderHls(); + app.radiohls.loadSource(e); + app.radiohls.attachMedia(app.mk._services.mediaItemPlayback._currentPlayer._targetElement); + app.mk._services.mediaItemPlayback._currentPlayer._targetElement.play()} + } + } + + } } }, From f009c4b13cd381e3db81a83007db216c83f237be Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 14 Sep 2022 16:58:33 +0000 Subject: [PATCH 081/210] chore: Prettified Code [ci skip] --- src/renderer/main/vueapp.js | 41 +++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index c3aff1d4..74e92984 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -5057,35 +5057,36 @@ const app = new Vue({ }); // Load first source let src = sources[0]; - if (src.includes("http")){ - app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false);} else { + if (src.includes("http")) { + app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false); + } else { if (Hls.isSupported()) { - let d = "WIDEVINE_SOFTWARE" + let d = "WIDEVINE_SOFTWARE"; let h = { initDataTypes: ["cenc", "keyids"], distinctiveIdentifier: "optional", - persistentState: "required" - } + persistentState: "required", + }; let p = { platformInfo: { requiresCDMAttachOnStart: !0, maxSecurityLevel: d, keySystemConfig: h }, - appData: { serviceName: "Apple Music" } - } - if (app.radiohls != null && app.radiohls.destroy != null){ - app.radiohls.destroy() - setTimeout(()=>{ - app.radiohls = new CiderHls(); - app.radiohls.loadSource(e); - app.radiohls.attachMedia(app.mk._services.mediaItemPlayback._currentPlayer._targetElement); - app.mk._services.mediaItemPlayback._currentPlayer._targetElement.play()},500) + appData: { serviceName: "Apple Music" }, + }; + if (app.radiohls != null && app.radiohls.destroy != null) { + app.radiohls.destroy(); + setTimeout(() => { + app.radiohls = new CiderHls(); + app.radiohls.loadSource(e); + app.radiohls.attachMedia(app.mk._services.mediaItemPlayback._currentPlayer._targetElement); + app.mk._services.mediaItemPlayback._currentPlayer._targetElement.play(); + }, 500); } else { - app.radiohls = new CiderHls(); - app.radiohls.loadSource(e); - app.radiohls.attachMedia(app.mk._services.mediaItemPlayback._currentPlayer._targetElement); - app.mk._services.mediaItemPlayback._currentPlayer._targetElement.play()} + app.radiohls = new CiderHls(); + app.radiohls.loadSource(e); + app.radiohls.attachMedia(app.mk._services.mediaItemPlayback._currentPlayer._targetElement); + app.mk._services.mediaItemPlayback._currentPlayer._targetElement.play(); + } } } - - } } }, From bd6552a048d6c6b3a67336e1995a7511fb0e7753 Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 14 Sep 2022 18:35:30 +0100 Subject: [PATCH 082/210] added playback stop css Signed-off-by: Core --- src/main/base/app.ts | 1 + src/renderer/less/elements.less | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/main/base/app.ts b/src/main/base/app.ts index 3fff0e52..dd63e332 100644 --- a/src/main/base/app.ts +++ b/src/main/base/app.ts @@ -86,6 +86,7 @@ export class AppEvents { case "disabled": console.info("Hardware acceleration is disabled."); app.commandLine.appendSwitch("disable-gpu"); + app.disableHardwareAcceleration() break; } diff --git a/src/renderer/less/elements.less b/src/renderer/less/elements.less index 4c9cb482..8322c8a2 100644 --- a/src/renderer/less/elements.less +++ b/src/renderer/less/elements.less @@ -1868,6 +1868,12 @@ input[type="checkbox"][switch]:checked:active::before { background-position: center; } +.playback-button.stop { + background-image: url("./assets/cider-icons/stop.svg"); + background-size: 38px; + background-position: center; +} + .playback-button.play { background-image: url("./assets/cider-icons/play.svg"); background-size: 38px; From 80c052d648e9e40d68d343e69df62e6e2fb5da8d Mon Sep 17 00:00:00 2001 From: coredev-uk Date: Wed, 14 Sep 2022 17:36:00 +0000 Subject: [PATCH 083/210] chore: Prettified Code [ci skip] --- src/main/base/app.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/base/app.ts b/src/main/base/app.ts index dd63e332..f59c6788 100644 --- a/src/main/base/app.ts +++ b/src/main/base/app.ts @@ -86,7 +86,7 @@ export class AppEvents { case "disabled": console.info("Hardware acceleration is disabled."); app.commandLine.appendSwitch("disable-gpu"); - app.disableHardwareAcceleration() + app.disableHardwareAcceleration(); break; } From 378551bd0c339d23b081f5ba88e918872ef2715a Mon Sep 17 00:00:00 2001 From: Core Date: Wed, 14 Sep 2022 19:14:22 +0100 Subject: [PATCH 084/210] radio station compatability Signed-off-by: Core --- src/main/plugins/discordrpc.ts | 8 +------- src/main/plugins/lastfm.ts | 6 +++--- src/preload/cider-preload.js | 1 + src/renderer/main/vueapp.js | 1 + 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/plugins/discordrpc.ts b/src/main/plugins/discordrpc.ts index c8d797b0..d5f0f44b 100644 --- a/src/main/plugins/discordrpc.ts +++ b/src/main/plugins/discordrpc.ts @@ -241,7 +241,7 @@ export default class DiscordRPC { } // Add the timestamp if its playing and people want them - if (!this._utils.getStoreValue("connectivity.discord_rpc.hide_timestamp") && attributes.status) { + if (!this._utils.getStoreValue("connectivity.discord_rpc.hide_timestamp") && attributes.status && new Date(attributes.endTime).getTime() > 0 && isFinite(attributes.endTime) && isFinite(attributes.startTime)) { activity.startTimestamp = Date.now() - (attributes?.durationInMillis - attributes?.remainingTime); activity.endTimestamp = attributes.endTime; } @@ -298,12 +298,6 @@ export default class DiscordRPC { activity.largeImageKey = "cider"; } - // Timestamp - if (new Date(attributes.endTime).getTime() < 0) { - delete activity.startTime; - delete activity.endTime; - } - // not sure if (!attributes.artistName) { delete activity.state; diff --git a/src/main/plugins/lastfm.ts b/src/main/plugins/lastfm.ts index ce8a98bf..ba912370 100644 --- a/src/main/plugins/lastfm.ts +++ b/src/main/plugins/lastfm.ts @@ -50,17 +50,17 @@ export default class lastfm { }); this._utils.getIPCMain().on("lastfm:nowPlayingChange", (event: any, attributes: any) => { - if (this._utils.getStoreValue("connectivity.lastfm.filter_loop") || this._utils.getStoreValue("general.privateEnabled")) return; + if (this._utils.getStoreValue("connectivity.lastfm.filter_loop") || this._utils.getStoreValue("general.privateEnabled") || attributes.type === "radioStation") return; this.updateNowPlayingTrack(attributes); }); this._utils.getIPCMain().on("lastfm:FilteredNowPlayingItemDidChange", (event: any, attributes: any) => { - if (this._utils.getStoreValue("general.privateEnabled")) return; + if (this._utils.getStoreValue("general.privateEnabled") || attributes.type === "radioStation") return; this.updateNowPlayingTrack(attributes); }); this._utils.getIPCMain().on("lastfm:scrobbleTrack", (event: any, attributes: any) => { - if (this._utils.getStoreValue("general.privateEnabled")) return; + if (this._utils.getStoreValue("general.privateEnabled") || attributes.type === "radioStation") return; this.scrobbleTrack(attributes); }); } diff --git a/src/preload/cider-preload.js b/src/preload/cider-preload.js index e8c62551..da5cd080 100644 --- a/src/preload/cider-preload.js +++ b/src/preload/cider-preload.js @@ -135,6 +135,7 @@ const MusicKitInterop = { const attributes = nowPlayingItem != null ? nowPlayingItem.attributes : {}; attributes.songId = attributes.songId ?? attributes.playParams?.catalogId ?? attributes.playParams?.id; + attributes.type = nowPlayingItem.type ?? ""; attributes.status = isPlayingExport ?? null; attributes.name = attributes?.name ?? "no-title-found"; attributes.artwork = attributes?.artwork ?? { url: "" }; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 74e92984..2f59ff5d 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -1957,6 +1957,7 @@ const app = new Vue({ * @memberOf app */ convertTime(seconds, format = "short") { + if (app.mk?.nowPlayingItem?.type === "radioStation") return; if (isNaN(seconds) || seconds === Infinity) { seconds = 0; } From bf6c439927fd0f3df5c07e199386e2a66e302cd5 Mon Sep 17 00:00:00 2001 From: Core Date: Thu, 15 Sep 2022 00:18:10 +0100 Subject: [PATCH 085/210] fix Signed-off-by: Core --- src/renderer/main/vueapp.js | 5 +++++ src/renderer/views/pages/search.ejs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 2f59ff5d..de38fca3 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -2247,6 +2247,11 @@ const app = new Vue({ artistId = item.relationships.artists.data[0].id; } } + if (item.relationships.albums && item.relationships.albums.data.length > 0) { + if (item.relationships.albums.data[0].attributes.artistUrl) { + artistId = item.relationships.albums.data[0].attributes.artistUrl.split("/").pop(); + } + } if (artistId == "") { const url = item.relationships.catalog.data[0].attributes.artistUrl; artistId = url.substring(url.lastIndexOf("/") + 1); diff --git a/src/renderer/views/pages/search.ejs b/src/renderer/views/pages/search.ejs index 078d1865..79e13093 100644 --- a/src/renderer/views/pages/search.ejs +++ b/src/renderer/views/pages/search.ejs @@ -37,7 +37,7 @@