From 63dec0ede24d53cbe926fa26f69dba713a3f037f Mon Sep 17 00:00:00 2001 From: Jurn Wubben Date: Sun, 1 Feb 2026 18:47:42 +0100 Subject: [PATCH] Spotify now starts playing the latest song if the queue was empty before and then a song was added --- extension/spotiqueue.js | 2 +- src/playerManager.ts | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/extension/spotiqueue.js b/extension/spotiqueue.js index a91bbe2..da999b1 100644 --- a/extension/spotiqueue.js +++ b/extension/spotiqueue.js @@ -231,9 +231,9 @@ class SpotiQueue { this.socket && this.socket.readyState === WebSocket.OPEN && !this.startedPlaying ) { + Spicetify.Player.pause(); console.log("[SpotiQueue] Requesting new song..."); this.send({ c: "next_song" }); - Spicetify.Player.pause(); } this.startedPlaying = false; }); diff --git a/src/playerManager.ts b/src/playerManager.ts index 682fe26..0b404bd 100644 --- a/src/playerManager.ts +++ b/src/playerManager.ts @@ -10,8 +10,10 @@ export type MergedQueue = { user: string; song: Song }[]; export class PlayerManager { private userQueue: { [x: string]: UserQueue } = {}; private nextUserIndex = 0; + private queueStopped = false; public mergedQueue: MergedQueue = []; + public login(name: string, userWS: UserWS): UserQueue { if (name in this.userQueue) { const user = this.userQueue[name]; @@ -23,8 +25,7 @@ export class PlayerManager { } this.userQueue[name] = { - queue: [], - userWS, + queue: [], userWS, }; return this.userQueue[name]; @@ -39,7 +40,10 @@ export class PlayerManager { } public getNext(): Song | null { const song = this.mergedQueue.shift(); - if (song === undefined) return null; + if (song === undefined) { + this.queueStopped = true; + return null + }; if (song.user in this.userQueue) { const user = this.userQueue[song.user]; @@ -57,6 +61,11 @@ export class PlayerManager { public updateMergedQueue() { this.generateMergedQueue(); this.broadcastMergedQueue(); + + if (this.queueStopped && this.mergedQueue.length > 0) { + this.queueStopped = false; + spotify?.sendSong(); + } } private broadcastMergedQueue() { for (const user of Object.values(this.userQueue)) {