From 60d87a5f5ab6cc181ba4ca3a312a01b262fe78a8 Mon Sep 17 00:00:00 2001 From: relic664 <138946165+relic664@users.noreply.github.com> Date: Tue, 24 Feb 2026 09:11:30 -0500 Subject: [PATCH] Add custom URL endpoint for listenbrainz scrobble (#3228) * 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 --- .../providers/listenbrainz_scrobble/__init__.py | 16 +++++++++++++++- .../listenbrainz_scrobble/manifest.json | 2 +- requirements_all.txt | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/music_assistant/providers/listenbrainz_scrobble/__init__.py b/music_assistant/providers/listenbrainz_scrobble/__init__.py index 79d518c6..e5b06243 100644 --- a/music_assistant/providers/listenbrainz_scrobble/__init__.py +++ b/music_assistant/providers/listenbrainz_scrobble/__init__.py @@ -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), ) diff --git a/music_assistant/providers/listenbrainz_scrobble/manifest.json b/music_assistant/providers/listenbrainz_scrobble/manifest.json index 28ab9454..a4f8cd8d 100644 --- a/music_assistant/providers/listenbrainz_scrobble/manifest.json +++ b/music_assistant/providers/listenbrainz_scrobble/manifest.json @@ -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"] } diff --git a/requirements_all.txt b/requirements_all.txt index 9a9ada4e..0de002b1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -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 -- 2.34.1