From: Fabian Munkes <105975993+fmunkes@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:11:13 +0000 (+0100) Subject: FIX: Audiobookshelf - use non admin user endpoint + wrong login credentials (#1883) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=4205f7041756e767c1dc8adceb6e968271f35ca2;p=music-assistant-server.git FIX: Audiobookshelf - use non admin user endpoint + wrong login credentials (#1883) --- diff --git a/music_assistant/providers/audiobookshelf/__init__.py b/music_assistant/providers/audiobookshelf/__init__.py index 8b559284..9b689e06 100644 --- a/music_assistant/providers/audiobookshelf/__init__.py +++ b/music_assistant/providers/audiobookshelf/__init__.py @@ -18,7 +18,7 @@ from music_assistant_models.enums import ( ProviderFeature, StreamType, ) -from music_assistant_models.errors import MediaNotFoundError +from music_assistant_models.errors import LoginFailed, MediaNotFoundError from music_assistant_models.media_items import ( Audiobook, AudioFormat, @@ -125,13 +125,18 @@ class Audiobookshelf(MusicProvider): async def handle_async_init(self) -> None: """Pass config values to client and initialize.""" self._client = ABSClient() - await self._client.init( - session=self.mass.http_session, - base_url=str(self.config.get_value(CONF_URL)), - username=str(self.config.get_value(CONF_USERNAME)), - password=str(self.config.get_value(CONF_PASSWORD)), - check_ssl=bool(self.config.get_value(CONF_VERIFY_SSL)), - ) + base_url = str(self.config.get_value(CONF_URL)) + try: + await self._client.init( + session=self.mass.http_session, + base_url=base_url, + username=str(self.config.get_value(CONF_USERNAME)), + password=str(self.config.get_value(CONF_PASSWORD)), + check_ssl=bool(self.config.get_value(CONF_VERIFY_SSL)), + ) + except RuntimeError: + # login details were not correct + raise LoginFailed(f"Login to abs instance at {base_url} failed.") await self._client.sync() async def unload(self, is_removed: bool = False) -> None: diff --git a/music_assistant/providers/audiobookshelf/abs_client.py b/music_assistant/providers/audiobookshelf/abs_client.py index ab1d984e..d3ef110a 100644 --- a/music_assistant/providers/audiobookshelf/abs_client.py +++ b/music_assistant/providers/audiobookshelf/abs_client.py @@ -123,9 +123,9 @@ class ABSClient: """Logout from ABS.""" await self._post("logout", add_api_endpoint=False) - async def get_user(self, id_: str) -> ABSUser: + async def get_authenticated_user(self) -> ABSUser: """Get an ABS user.""" - data = await self._get(f"users/{id_}") + data = await self._get("me") return ABSUser.from_json(data) async def sync(self) -> None: @@ -141,7 +141,7 @@ class ABSClient: self.audiobook_libraries.append(library) elif media_type == "podcast": self.podcast_libraries.append(library) - self.user = await self.get_user(self.user.id_) + self.user = await self.get_authenticated_user() async def get_all_podcasts(self) -> AsyncGenerator[ABSPodcast]: """Get all available podcasts.""" diff --git a/music_assistant/providers/audiobookshelf/manifest.json b/music_assistant/providers/audiobookshelf/manifest.json index 89c27f05..47626207 100644 --- a/music_assistant/providers/audiobookshelf/manifest.json +++ b/music_assistant/providers/audiobookshelf/manifest.json @@ -6,5 +6,6 @@ "codeowners": [ "@fmunkes" ], - "documentation": "https://music-assistant.io/music-providers/audiobookshelf" + "documentation": "https://music-assistant.io/music-providers/audiobookshelf", + "multi_instance": true }