From 7a25a09b02ca4a8b0f6e1f3aeebad1b7c7234689 Mon Sep 17 00:00:00 2001 From: ririxi Date: Sat, 9 Dec 2023 17:50:10 +0100 Subject: [PATCH 01/10] revert: enhance snackbar exposition (#2712) --- jsHelper/spicetifyWrapper.js | 5 +++-- src/preprocess/preprocess.go | 9 ++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/jsHelper/spicetifyWrapper.js b/jsHelper/spicetifyWrapper.js index b6419e156f..7fe0110d20 100644 --- a/jsHelper/spicetifyWrapper.js +++ b/jsHelper/spicetifyWrapper.js @@ -311,7 +311,8 @@ window.Spicetify = { }, ReactComponent: {}, ReactHook: {}, - ReactFlipToolkit: {} + ReactFlipToolkit: {}, + Snackbar: {} }; (async function hotloadWebpackModules() { @@ -449,6 +450,7 @@ window.Spicetify = { // Snackbar notifications // https://github.com/iamhosseindhv/notistack Snackbar: { + ...Spicetify.Snackbar, SnackbarProvider: functionModules.find(m => m.toString().includes("enqueueSnackbar called with invalid argument")), useSnackbar: functionModules.find(m => m.toString().match(/\{return\(0,\w+\.useContext\)\(\w+\)\}/)) }, @@ -542,7 +544,6 @@ window.Spicetify = { return; } - if (!Spicetify.Snackbar) Spicetify.Snackbar = {}; Spicetify.Snackbar.enqueueSnackbar = (message, { variant = "default", autoHideDuration } = {}) => { isError = variant === "error"; Spicetify.showNotification(message, isError, autoHideDuration); diff --git a/src/preprocess/preprocess.go b/src/preprocess/preprocess.go index 3c0a920c3b..7a8f63d472 100644 --- a/src/preprocess/preprocess.go +++ b/src/preprocess/preprocess.go @@ -465,13 +465,8 @@ if (${1}.popper?.firstChild?.id === "context-menu") { // Snackbar https://github.com/iamhosseindhv/notistack utils.Replace( &input, - `\(\w+\s*=\s*\w\.call\(this,[^)]+\)\s*\|\|\s*this\)\.enqueueSnackbar`, - ` Spicetify.Snackbar.enqueueSnackbar=${0}`) - - utils.Replace( - &input, - `\w+.closeSnackbar=function`, - `Spicetify.Snackbar.closeSnackbar=${0}`) + `\w+\s*=\s*\w\.call\(this,[^)]+\)\s*\|\|\s*this\)\.enqueueSnackbar`, + `Spicetify.Snackbar=${0}`) return input } From 9497d66f74274cf4f39c200c3162d45d8a70cf8b Mon Sep 17 00:00:00 2001 From: Grigory Date: Sat, 9 Dec 2023 22:28:19 +0500 Subject: [PATCH 02/10] fix(wrapper): correct module for `Slider` (#2704) --- jsHelper/spicetifyWrapper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsHelper/spicetifyWrapper.js b/jsHelper/spicetifyWrapper.js index 7fe0110d20..7e90d71288 100644 --- a/jsHelper/spicetifyWrapper.js +++ b/jsHelper/spicetifyWrapper.js @@ -404,7 +404,7 @@ window.Spicetify = { ), Menu: functionModules.find(m => m.toString().includes("getInitialFocusElement") && m.toString().includes("children")), MenuItem: functionModules.find(m => m.toString().includes("handleMouseEnter") && m.toString().includes("onClick")), - Slider: wrapProvider(functionModules.find(m => m.toString().includes("onStepBackward"))), + Slider: wrapProvider(functionModules.find(m => m.toString().includes("onStepBackward") && !m.toString().includes("volume"))), RemoteConfigProvider: functionModules.find(m => m.toString().includes("resolveSuspense") && m.toString().includes("configuration")), RightClickMenu: functionModules.find( m => From 929be7e455410a43ccdbaca8b1ab98cecabaeded Mon Sep 17 00:00:00 2001 From: Grigory Date: Sat, 9 Dec 2023 22:28:52 +0500 Subject: [PATCH 03/10] feat(wrapper): add `Toggle` ReactComponent (#2708) --- jsHelper/spicetifyWrapper.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jsHelper/spicetifyWrapper.js b/jsHelper/spicetifyWrapper.js index 7e90d71288..24f1c14136 100644 --- a/jsHelper/spicetifyWrapper.js +++ b/jsHelper/spicetifyWrapper.js @@ -241,7 +241,8 @@ window.Spicetify = { "ButtonSecondary", "ButtonTertiary", "Snackbar", - "Chip" + "Chip", + "Toggle" ]; const REACT_HOOK = ["DragHandler", "usePanelState", "useExtractedColor"]; @@ -428,6 +429,7 @@ window.Spicetify = { styledImage: functionModules.find(m => m.toString().includes("placeholderSrc")) }, Chip: modules.find(m => m?.render?.toString().includes("invertedDark") && m?.render?.toString().includes("isUsingKeyboard")), + Toggle: functionModules.find(m => m.toString().includes("onSelected")) && functionModules.find(m => m.toString().includes('type:"checkbox"')), ...Object.fromEntries(menus) }, ReactHook: { From 7c6be5567361bfc56d09d6d536a08072dcb5f2ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:29:12 +0000 Subject: [PATCH 04/10] chore(deps): bump actions/stale from 8.0.0 to 9.0.0 (#2710) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 3af1a5bfd1..db291ac26e 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -12,7 +12,7 @@ jobs: pull-requests: write steps: - - uses: actions/stale@v8.0.0 + - uses: actions/stale@v9.0.0 with: # Token for the repository. Can be passed in using `{{ secrets.GITHUB_TOKEN }}`. repo-token: ${{ github.token }} From 50770677cd404b0f8dd8226a0035f0b93ab19156 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:29:42 +0000 Subject: [PATCH 05/10] chore(deps): bump actions/setup-go from 4 to 5 (#2705) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b5bafdcab..c0b9180b86 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version-file: "go.mod" @@ -48,7 +48,7 @@ jobs: run: echo "IS_WIN=${{ matrix.os == 'windows' && matrix.arch != 'arm64' }}" >> $GITHUB_ENV - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version-file: "go.mod" From e44577b9f6b22e56d89dda2571e3fef256fdec4a Mon Sep 17 00:00:00 2001 From: Grigory Date: Sat, 9 Dec 2023 22:30:04 +0500 Subject: [PATCH 06/10] feat(wrapper): add missing `formatDate` method (#2702) --- jsHelper/spicetifyWrapper.js | 1 + 1 file changed, 1 insertion(+) diff --git a/jsHelper/spicetifyWrapper.js b/jsHelper/spicetifyWrapper.js index 24f1c14136..8bea655ba9 100644 --- a/jsHelper/spicetifyWrapper.js +++ b/jsHelper/spicetifyWrapper.js @@ -480,6 +480,7 @@ window.Spicetify = { get _dictionary() { return localeModule._translations; }, + formatDate: (date, options) => localeModule.formatDate(date, options), formatRelativeTime: (date, options) => localeModule.formatRelativeDate(date, options), formatNumber: (number, options) => localeModule.formatNumber(number, options), formatNumberCompact: (number, options) => localeModule.formatNumberCompact(number, options), From 7c589c9499104c40ed5fd0f4a08144f48ba744e8 Mon Sep 17 00:00:00 2001 From: Grigory Date: Sat, 9 Dec 2023 22:30:33 +0500 Subject: [PATCH 07/10] fix(preprocess): block last logging function (#2706) --- src/preprocess/preprocess.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/preprocess/preprocess.go b/src/preprocess/preprocess.go index 7a8f63d472..b7d6b24e4c 100644 --- a/src/preprocess/preprocess.go +++ b/src/preprocess/preprocess.go @@ -244,10 +244,10 @@ func disableLogging(input string) string { utils.Replace(&input, `key:"logImpression",value:function\([\w,]+\)\{`, "${0}return;") utils.Replace(&input, `key:"logNonAuthImpression",value:function\([\w,]+\)\{`, "${0}return;") utils.Replace(&input, `key:"logNavigation",value:function\([\w,]+\)\{`, "${0}return;") - utils.Replace(&input, `key:"logClientLostFocus",value:function\(\)\{`, "${0}return;") - utils.Replace(&input, `key:"logClientGainedFocus",value:function\(\)\{`, "${0}return;") + utils.Replace(&input, `key:"handleBackgroundStates",value:function\(\)\{`, "${0}return;") utils.Replace(&input, `key:"createLoggingParams",value:function\([\w,]+\)\{`, "${0}return;") utils.Replace(&input, `key:"initSendingEvents",value:function\(\)\{`, "${0}return;") + utils.Replace(&input, `key:"flush",value:function\(\)\{`, "${0}return;") utils.Replace(&input, `(\{key:"send",value:function\([\w,]+\))\{[\d\w\s,{}()[\]\.,!\?=>&|;:_""]+?\}(\},\{key:"hasContext")`, "${1}{return;}${2}") utils.Replace(&input, `key:"lastFlush",value:function\(\)\{`, "${0}return;") @@ -255,10 +255,11 @@ func disableLogging(input string) string { utils.Replace(&input, `(\}logInteraction\([\w,]+\))\{.+?\}(logImpression)`, "${1}{return{interactionId:null,pageInstanceId:null};}${2}") utils.Replace(&input, `(\}logImpression\([\w,]+\))\{.+?\}(logNavigation)`, "${1}{return;}${2}") utils.Replace(&input, `(\}logNavigation\([\w,]+\))\{.+?\}(getPageInstanceId|getInteractionId)`, "${1}{return;}${2}") - utils.Replace(&input, `(\}logClientLostFocus\(\))\{.+?\}(logClientGainedFocus)`, "${1}{return;}${2}") - utils.Replace(&input, `(\}logClientGainedFocus\(\))\{.+?\}(getPageInstanceId|addEventListeners)`, "${1}{return;}${2}") + utils.Replace(&input, `(\}handleBackgroundStates\(\))\{.+?\}(startNavigation)`, "${1}{return;}${2}") utils.Replace(&input, `(\}createLoggingParams\([\w,]+\))\{.+?\}(async pullToLocal)`, "${1}{return;}${2}") utils.Replace(&input, `(\}initSendingEvents\(\))\{.+?\}(initializeContexts)`, "${1}{return;}${2}") + utils.Replace(&input, `(\}flush\(\))\{.+\}(sendEvents)`, "${1}{return;}${2}") + utils.Replace(&input, `(\}flush\(\w+=!0\))\{.+\}(flushAll)`, "${1}{return;}${2}") utils.Replace(&input, `(\}send\([\w,:=!\d{}]+\))\{.+?\}(hasContext)`, "${1}{return;}${2}") utils.Replace(&input, `(\}lastFlush\(\))\{.+?\}(flush\(\))`, "${1}{return;}${2}") From 45bc8a0240f145b4a9a72d76f7ca5ff5b734e82d Mon Sep 17 00:00:00 2001 From: Grigory Date: Sat, 9 Dec 2023 22:31:07 +0500 Subject: [PATCH 08/10] fix(wrapper): add optional chaining to `colorExtractor` (#2703) --- jsHelper/spicetifyWrapper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsHelper/spicetifyWrapper.js b/jsHelper/spicetifyWrapper.js index 8bea655ba9..0288797c95 100644 --- a/jsHelper/spicetifyWrapper.js +++ b/jsHelper/spicetifyWrapper.js @@ -769,7 +769,7 @@ Spicetify.colorExtractor = async uri => { if (body.entries && body.entries.length) { const list = {}; for (const color of body.entries[0].color_swatches) { - list[color.preset] = `#${color.color.toString(16).padStart(6, "0")}`; + list[color.preset] = `#${color.color?.toString(16).padStart(6, "0")}`; } return list; } else { From 174e5c67a5d4a089906fb0fb6f6a5b695bf38ae9 Mon Sep 17 00:00:00 2001 From: Grigory Date: Sun, 10 Dec 2023 06:37:49 +0500 Subject: [PATCH 09/10] refactor(wrapper): use `update` event for generating `Player` events (#2715) --- jsHelper/spicetifyWrapper.js | 42 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/jsHelper/spicetifyWrapper.js b/jsHelper/spicetifyWrapper.js index 0288797c95..5a10b1f14e 100644 --- a/jsHelper/spicetifyWrapper.js +++ b/jsHelper/spicetifyWrapper.js @@ -685,31 +685,22 @@ window.Spicetify = { return; } - function objectsAreEqual(obj1, obj2) { - return JSON.stringify(obj1) === JSON.stringify(obj2); - } + const interval = setInterval(() => { + if (!Spicetify.Player.origin._state) return; + Spicetify.Player.data = Spicetify.Player.origin._state; + clearInterval(interval); + }, 10); const playerState = { cache: Spicetify.Player.data, current: null }; - setInterval(() => { - if ( - objectsAreEqual(Spicetify.Platform.PlayerAPI._state, playerState.cache) || - (!Spicetify.Platform.PlayerAPI._state.item && !Spicetify.Player.data) - ) - return; - - if (!Spicetify.Platform.PlayerAPI._state.item) { - Spicetify.Player.data = null; - return; - } - - playerState.current = Spicetify.Platform.PlayerAPI._state; + Spicetify.Player.origin._events.addListener("update", ({ data: playerEventData }) => { + playerState.current = playerEventData; Spicetify.Player.data = playerState.current; - if (playerState.cache?.item.uri !== playerState.current?.item?.uri) { + if (playerState.cache?.item?.uri !== playerState.current?.item?.uri) { const event = new Event("songchange"); event.data = Spicetify.Player.data; Spicetify.Player.dispatchEvent(event); @@ -722,12 +713,21 @@ window.Spicetify = { } playerState.cache = playerState.current; - }, 100); + }); + + Spicetify.Player.origin._events.addListener("error", ({ data: error }) => { + if (error.code === "all_tracks_unplayable_auto_stopped") { + Spicetify.Player.data = null; + playerState.cache = null; + } + }); setInterval(() => { - const event = new Event("onprogress"); - event.data = Spicetify.Player.getProgress(); - Spicetify.Player.dispatchEvent(event); + if (playerState.cache?.isPaused === false) { + const event = new Event("onprogress"); + event.data = Spicetify.Player.getProgress(); + Spicetify.Player.dispatchEvent(event); + } }, 100); Spicetify.addToQueue = uri => { From 1fc2bb9aa4fba6e1073db1a7d142b33a8e02370f Mon Sep 17 00:00:00 2001 From: Thomas Fitzpatrick <22730962+ohitstom@users.noreply.github.com> Date: Sun, 10 Dec 2023 01:45:20 +0000 Subject: [PATCH 10/10] fix(wrapper): improve simpleLayout & wrapper hooks (#2713) --- jsHelper/spicetifyWrapper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsHelper/spicetifyWrapper.js b/jsHelper/spicetifyWrapper.js index 5a10b1f14e..b697bda175 100644 --- a/jsHelper/spicetifyWrapper.js +++ b/jsHelper/spicetifyWrapper.js @@ -423,8 +423,8 @@ window.Spicetify = { ButtonSecondary: modules.find(m => m?.render && m?.displayName === "ButtonSecondary"), ButtonTertiary: modules.find(m => m?.render && m?.displayName === "ButtonTertiary"), Snackbar: { - wrapper: functionModules.find(m => m.toString().includes("encore-light-theme")), - simpleLayout: functionModules.find(m => m.toString().includes("leading")), + wrapper: functionModules.find(m => m.toString().includes("encore-light-theme") && m.toString().includes("elevated")), + simpleLayout: functionModules.find(m => ["leading", "center", "trailing"].every(keyword => m.toString().includes(keyword))), ctaText: functionModules.find(m => m.toString().includes("ctaText")), styledImage: functionModules.find(m => m.toString().includes("placeholderSrc")) },