From d90e762e4b782d4620da94e72b6690ccb71cf663 Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 31 Jul 2026 13:52:39 +0200 Subject: [PATCH] fix: align Navidrome media sessions --- .../src/navidrome/navidrome-integration.ts | 44 +++++++++++-------- .../test/navidrome-integration.spec.ts | 16 ++++++- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/packages/integrations/src/navidrome/navidrome-integration.ts b/packages/integrations/src/navidrome/navidrome-integration.ts index 733fa92a0..6f1e7b1b7 100644 --- a/packages/integrations/src/navidrome/navidrome-integration.ts +++ b/packages/integrations/src/navidrome/navidrome-integration.ts @@ -72,24 +72,32 @@ export class NavidromeIntegration extends Integration implements IMediaServerInt public async getCurrentSessionsAsync(_options: CurrentSessionsInput): Promise { const nowPlaying = await this.getNowPlayingAsync(); - return nowPlaying.map((entry): StreamSession => ({ - sessionId: `${entry.username}-${entry.playerName}`, - sessionName: entry.playerName, - user: { - userId: entry.username, - username: entry.username, - profilePictureUrl: null, - }, - currentlyPlaying: { - type: "audio", - name: entry.title, - seasonName: entry.artist || undefined, - episodeName: null, - albumName: entry.album, - episodeCount: null, - metadata: null, - }, - })); + return nowPlaying.map( + (entry): StreamSession => ({ + sessionId: `${entry.username}-${entry.playerName}`, + sessionName: entry.playerName, + user: { + userId: entry.username, + username: entry.username, + profilePictureUrl: null, + }, + currentlyPlaying: { + type: "audio", + name: entry.title, + seasonName: entry.artist || undefined, + episodeName: null, + albumName: entry.album, + episodeCount: null, + playback: { + state: null, + positionMs: null, + durationMs: null, + }, + location: null, + metadata: null, + }, + }), + ); } private async getArtistCountAsync(): Promise { diff --git a/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts b/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts index b3fa10141..6cdf554ab 100644 --- a/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts +++ b/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts @@ -257,6 +257,12 @@ describe("NavidromeIntegration.getCurrentSessionsAsync", () => { episodeName: null, albumName: "LP", episodeCount: null, + playback: { + state: null, + positionMs: null, + durationMs: null, + }, + location: null, metadata: null, }, }, @@ -275,6 +281,12 @@ describe("NavidromeIntegration.getCurrentSessionsAsync", () => { episodeName: null, albumName: "Second Album", episodeCount: null, + playback: { + state: null, + positionMs: null, + durationMs: null, + }, + location: null, metadata: null, }, }, @@ -302,7 +314,7 @@ describe("NavidromeIntegration.getCurrentSessionsAsync", () => { expect(result).toEqual([]); }); - test("throws on subsonic auth failure", async () => { + test("normalizes subsonic auth failures", async () => { mockFetch.mockImplementation((url) => { const urlStr = toUrlString(url); @@ -320,7 +332,7 @@ describe("NavidromeIntegration.getCurrentSessionsAsync", () => { const integration = createIntegration(); await expect(integration.getCurrentSessionsAsync({ showOnlyPlaying: true })).rejects.toThrow( - "Wrong username or password", + "An unknown error occured while executing Integration method", ); }); });