From 2194d4a8b6654562ac15939d98fc46fc5233458f Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Fri, 15 May 2026 17:01:51 +0700 Subject: [PATCH] fix: preserve failed media queue item --- src/media/mediaQueue.ts | 8 ++++---- tests/media/mediaQueue.test.ts | 9 +++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/media/mediaQueue.ts b/src/media/mediaQueue.ts index ea224e2..d412e5b 100644 --- a/src/media/mediaQueue.ts +++ b/src/media/mediaQueue.ts @@ -38,11 +38,11 @@ export class MediaQueue { this.current = null; } - failCurrent(): void { - if (this.current) { - this.current = { ...this.current, status: "failed" }; - } + failCurrent(): MediaQueueItem | null { + if (!this.current) return null; + const failed = { ...this.current, status: "failed" as const }; this.current = null; + return failed; } clear(): void { diff --git a/tests/media/mediaQueue.test.ts b/tests/media/mediaQueue.test.ts index d63d5e7..bb21531 100644 --- a/tests/media/mediaQueue.test.ts +++ b/tests/media/mediaQueue.test.ts @@ -55,6 +55,15 @@ describe("MediaQueue", () => { expect(queue.snapshot().queue).toEqual([]); }); + it("returns the failed current item", () => { + const queue = new MediaQueue(() => "item-1", () => 1700000000000); + const item = queue.add(source(), "tester"); + queue.startNext(); + + expect(queue.failCurrent()).toEqual({ ...item, status: "failed" }); + expect(queue.snapshot()).toEqual({ current: null, queue: [] }); + }); + it("clears current and queued items", () => { const queue = new MediaQueue(() => "item-1", () => 1700000000000); queue.add(source(), "tester");