Subsonic: Check for transcodeOffset support on startup (#1137)
authorEric Munson <eric@munsonfam.org>
Wed, 13 Mar 2024 18:36:28 +0000 (14:36 -0400)
committerGitHub <noreply@github.com>
Wed, 13 Mar 2024 18:36:28 +0000 (19:36 +0100)
music_assistant/server/providers/opensubsonic/sonic_provider.py

index 0d4f8ebb8ee71f5c44446a15e13621ce7ae937d0..87d3b9e35fb16f7cb22f7b50ee859a94208c698d 100644 (file)
@@ -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,