Add custom URL endpoint for listenbrainz scrobble (#3228)
authorrelic664 <138946165+relic664@users.noreply.github.com>
Tue, 24 Feb 2026 14:11:30 +0000 (09:11 -0500)
committerGitHub <noreply@github.com>
Tue, 24 Feb 2026 14:11:30 +0000 (14:11 +0000)
* add custom URL for listenbrainz scrobble

Bump  to 0.7.0 for custom URL specification, add the proper handling for a custom listenbrainz scrobble endpoint

* minor change

hide API base URL under advanced, streamline  constructo

music_assistant/providers/listenbrainz_scrobble/__init__.py
music_assistant/providers/listenbrainz_scrobble/manifest.json
requirements_all.txt

index 79d518c6c76c28018ed89dabe0021469cd211f12..e5b06243b51ac3483aeac1e0187517a570b199a5 100644 (file)
@@ -27,6 +27,8 @@ from music_assistant.models import ProviderInstanceType
 from music_assistant.models.plugin import PluginProvider
 
 CONF_USER_TOKEN = "_user_token"
+CONF_API_BASE_URL = "api_base_url"
+LISTENBRAINZ_API_URL = "https://api.listenbrainz.org"
 SUPPORTED_FEATURES: set[ProviderFeature] = (
     set()
 )  # we don't have any special supported features (yet)
@@ -37,12 +39,14 @@ async def setup(
 ) -> ProviderInstanceType:
     """Initialize provider(instance) with given configuration."""
     token = config.get_value(CONF_USER_TOKEN)
+    api_base_url = config.get_value(CONF_API_BASE_URL, LISTENBRAINZ_API_URL)
+
     if not token:
         raise SetupFailedError("User token needs to be set")
 
     assert token != SECURE_STRING_SUBSTITUTE
 
-    client = ListenBrainz()
+    client = ListenBrainz(api_base_url=api_base_url)
     client.set_auth_token(token)
 
     return ListenBrainzScrobbleProvider(mass, manifest, config, client)
@@ -155,6 +159,16 @@ async def get_config_entries(
             required=True,
             value=values.get(CONF_USER_TOKEN) if values else None,
         ),
+        ConfigEntry(
+            key=CONF_API_BASE_URL,
+            type=ConfigEntryType.STRING,
+            label="Base URL",
+            required=False,
+            value=values.get(CONF_API_BASE_URL) if values else None,
+            description="URL for listenbrainz endpoint. Leave blank to default"
+            "to the public listenbrainz API.",
+            advanced=True,
+        ),
         # add user selection entry
         await create_scrobble_users_config_entry(mass),
     )
index 28ab94548c5069abc8ee088b9aaac1832737e734..a4f8cd8d7c7951385fd9a8e70f9ae5b352ea0ceb 100644 (file)
@@ -9,5 +9,5 @@
   "documentation": "https://music-assistant.io/plugins/listenbrainz_scrobble/",
   "multi_instance": false,
   "builtin": false,
-  "requirements": ["liblistenbrainz==0.6.1"]
+  "requirements": ["liblistenbrainz==0.7.0"]
 }
index 9a9ada4e1517af292cc55dbc6c27229520573671..0de002b1ffcf7160f7007876c7f294209890db68 100644 (file)
@@ -37,7 +37,7 @@ gql[all]==4.0.0
 hass-client==1.2.0
 ibroadcastaio==0.4.0
 ifaddr==0.2.0
-liblistenbrainz==0.6.1
+liblistenbrainz==0.7.0
 librosa==0.11.0
 lyricsgenius==3.7.5
 mashumaro==3.18