From 174e5c67a5d4a089906fb0fb6f6a5b695bf38ae9 Mon Sep 17 00:00:00 2001 From: Grigory Date: Sun, 10 Dec 2023 06:37:49 +0500 Subject: [PATCH] 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 => {