From 009732e7454cc97820787e073accb5178a8c8746 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Mon, 25 May 2026 11:43:50 -0700 Subject: [PATCH] add OS reportPlayback endpoint and types --- src/renderer/api/subsonic/subsonic-api.ts | 8 ++++++++ src/shared/api/subsonic/subsonic-types.ts | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/renderer/api/subsonic/subsonic-api.ts b/src/renderer/api/subsonic/subsonic-api.ts index 968c28662..651ef173c 100644 --- a/src/renderer/api/subsonic/subsonic-api.ts +++ b/src/renderer/api/subsonic/subsonic-api.ts @@ -289,6 +289,14 @@ export const contract = c.router({ 200: ssType._response.removeFavorite, }, }, + reportPlayback: { + method: 'GET', + path: 'reportPlayback.view', + query: ssType._parameters.reportPlayback, + responses: { + 200: ssType._response.reportPlayback, + }, + }, savePlayQueue: { method: 'GET', path: 'savePlayQueue.view', diff --git a/src/shared/api/subsonic/subsonic-types.ts b/src/shared/api/subsonic/subsonic-types.ts index 7e9cf4267..92139f443 100644 --- a/src/shared/api/subsonic/subsonic-types.ts +++ b/src/shared/api/subsonic/subsonic-types.ts @@ -454,6 +454,7 @@ const similarSongs2 = z.object({ export enum SubsonicExtensions { FORM_POST = 'formPost', INDEX_BASED_QUEUE = 'indexBasedQueue', + PLAYBACK_REPORT = 'playbackReport', SONG_LYRICS = 'songLyrics', TRANSCODE_OFFSET = 'transcodeOffset', TRANSCODING = 'transcoding', @@ -793,6 +794,17 @@ const getInternetRadioStations = z.object({ .optional(), }); +const reportPlaybackParameters = z.object({ + ignoreScrobble: z.boolean(), + mediaId: z.string(), + mediaType: z.enum(['song', 'podcast']), + playbackRate: z.number(), + positionMs: z.number(), + state: z.enum(['starting', 'playing', 'paused', 'stopped']), +}); + +const reportPlayback = z.null(); + export const ssType = { _body: { getTranscodeDecision: transcodeDecisionRequestBody, @@ -824,6 +836,7 @@ export const ssType = { getTranscodeStream: getTranscodeStreamParameters, randomSongList: randomSongListParameters, removeFavorite: removeFavoriteParameters, + reportPlayback: reportPlaybackParameters, savePlayQueueByIndex: savePlayQueueByIndexParameters, saveQueue: saveQueueParameters, scrobble: scrobbleParameters, @@ -877,6 +890,7 @@ export const ssType = { playQueueByIndex, randomSongList, removeFavorite, + reportPlayback, saveQueue, scrobble, search3,