Store each client's play queue in the database
The queue lived in memory and was shared by all clients, so a restart or a finished sync cleared it. Every client now has its own queue in the new queue and queue_song tables (added to the undeployed migration 000006). The music endpoints return the queue ID in the X-Queue-Id header and expect it back. A request without an ID, or with an ended one, starts a new queue. /music/reset ends the queue and returns a new ID, and a sync ends all running queues. Ended queues are kept as history. The deprecated legacy routes without the /api/v1 prefix are removed.
This commit is contained in:
1 parent
b5dc42b654
commit
a705d7b476
28 files changed
+1103
-320
No files matched your search
+2
@@ -1 +1,3 @@
|
||||
DROP TABLE queue_song;
|
||||
DROP TABLE queue;
|
||||
ALTER TABLE soundtrack DROP COLUMN fingerprint;
|
||||
@@ -0,0 +1,26 @@
|
||||
-- Cheap fingerprint (file names, sizes and modification times) used to skip
|
||||
-- content hashing of soundtracks that have not changed since the last sync.
|
||||
ALTER TABLE soundtrack ADD COLUMN fingerprint TEXT NOT NULL DEFAULT '';
|
||||
|
||||
-- Play queues. Every client has its own queue, identified by the queue's UUID.
|
||||
-- Ended queues are kept as history.
|
||||
CREATE TABLE queue (
|
||||
uuid UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
current_song INT4 NOT NULL DEFAULT -1,
|
||||
-- The last random song, added to the queue by /music/addQue.
|
||||
last_fetched_song_uuid UUID NULL,
|
||||
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
ended_at TIMESTAMPTZ NULL
|
||||
);
|
||||
CREATE INDEX idx_queue_active ON queue(uuid) WHERE ended_at IS NULL;
|
||||
|
||||
-- song_uuid has no foreign key: a sync can delete songs. The names are kept for the history.
|
||||
CREATE TABLE queue_song (
|
||||
queue_uuid UUID NOT NULL REFERENCES queue(uuid) ON DELETE CASCADE,
|
||||
song_no INT4 NOT NULL,
|
||||
song_uuid UUID NOT NULL,
|
||||
soundtrack_name VARCHAR NOT NULL,
|
||||
song_name VARCHAR NOT NULL,
|
||||
added_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
PRIMARY KEY (queue_uuid, song_no)
|
||||
);
|
||||
@@ -1,3 +0,0 @@
|
||||
-- Cheap fingerprint (file names, sizes and modification times) used to skip
|
||||
-- content hashing of soundtracks that have not changed since the last sync.
|
||||
ALTER TABLE soundtrack ADD COLUMN fingerprint TEXT NOT NULL DEFAULT '';
|
||||
Reference in new issue
Block a user