From 4825c6977c907750064069995decb8b8a512a13e Mon Sep 17 00:00:00 2001 From: Eric Munson Date: Wed, 13 Mar 2024 14:36:28 -0400 Subject: [PATCH] Subsonic: Check for transcodeOffset support on startup (#1137) --- .../server/providers/opensubsonic/sonic_provider.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/music_assistant/server/providers/opensubsonic/sonic_provider.py b/music_assistant/server/providers/opensubsonic/sonic_provider.py index 0d4f8ebb..87d3b9e3 100644 --- a/music_assistant/server/providers/opensubsonic/sonic_provider.py +++ b/music_assistant/server/providers/opensubsonic/sonic_provider.py @@ -65,6 +65,7 @@ class OpenSonicProvider(MusicProvider): _conn: SonicConnection = None _enable_podcasts: bool = True + _seek_support: bool = False async def handle_async_init(self) -> None: """Set up the music provider and test the connection.""" @@ -97,6 +98,17 @@ class OpenSonicProvider(MusicProvider): ) raise LoginFailed(msg) from e self._enable_podcasts = self.config.get_value(CONF_ENABLE_PODCASTS) + try: + ret = await self._run_async(self._conn.getOpenSubsonicExtensions) + extensions = ret["openSubsonicExtensions"] + for entry in extensions: + if entry["name"] == "transcodeOffset": + self._seek_support = True + break + except OSError: + logging.getLogger("libopensonic").info( + "Server does not support transcodeOffset, seeking in player provider" + ) @property def supported_features(self) -> tuple[ProviderFeature, ...]: @@ -656,6 +668,7 @@ class OpenSonicProvider(MusicProvider): return StreamDetails( item_id=sonic_song.id, provider=self.instance_id, + can_seek=self._seek_support, audio_format=AudioFormat(content_type=ContentType.try_parse(mime_type)), duration=sonic_song.duration if sonic_song.duration is not None else 0, callback=self._report_playback_stopped, -- 2.34.1