From 247cc1fc5cf59cd57e026c5d7136684f27a29a78 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 22 Feb 2025 11:47:58 +0100 Subject: [PATCH] Chore: Make provider name consistent --- music_assistant/mass.py | 9 ++++++- music_assistant/models/provider.py | 27 ++++++++++++++----- .../providers/filesystem_local/__init__.py | 7 +++-- .../providers/filesystem_smb/__init__.py | 12 ++++----- .../providers/podcastfeed/__init__.py | 9 +++---- music_assistant/providers/spotify/__init__.py | 9 +++---- 6 files changed, 45 insertions(+), 28 deletions(-) diff --git a/music_assistant/mass.py b/music_assistant/mass.py index aaf2d628..31813093 100644 --- a/music_assistant/mass.py +++ b/music_assistant/mass.py @@ -663,12 +663,19 @@ class MusicAssistant: # run async setup await provider.handle_async_init() + # TEMP workaround + # cleanup wrong name config value (set to provider name) + # remove after 2.4 release + if conf.name == prov_manifest.name: + self.config.set_raw_provider_config_value(provider.instance_id, "name", None) + provider.config.name = None + # if we reach this point, the provider loaded successfully self._providers[provider.instance_id] = provider LOGGER.info( "Loaded %s provider %s", provider.type.value, - conf.name or conf.domain, + provider.name, ) provider.available = True diff --git a/music_assistant/models/provider.py b/music_assistant/models/provider.py index 1fa03893..3d579dad 100644 --- a/music_assistant/models/provider.py +++ b/music_assistant/models/provider.py @@ -94,17 +94,30 @@ class Provider: def name(self) -> str: """Return (custom) friendly name for this provider instance.""" if self.config.name: + # always prefer user-set name from config return self.config.name return self.default_name @property + @final def default_name(self) -> str: - """Return a default name for this provider instance.""" - inst_count = len([x for x in self.mass.music.providers if x.domain == self.domain]) - if inst_count > 1: - postfix = self.instance_id[-8:] - return f"{self.manifest.name} {postfix}" - return self.manifest.name + """Return a default friendly name for this provider instance.""" + # create default name based on instance count + instances = [x.instance_id for x in self.mass.music.providers if x.domain == self.domain] + if len(instances) <= 1: + # only one instance (or no instances yet at all) - return provider name + return self.manifest.name + instance_name_postfix = self.instance_name_postfix + if not instance_name_postfix: + # default implementation - simply use the instance number/index + instance_name_postfix = str(instances.index(self.instance_id) + 1) + # append instance name to provider name + return f"{self.manifest.name} [{self.instance_name_postfix}]" + + @property + def instance_name_postfix(self) -> str | None: + """Return a (default) instance name postfix for this provider instance.""" + return None def update_config_value(self, key: str, value: Any, encrypted: bool = False) -> None: """Update a config value.""" @@ -122,6 +135,8 @@ class Provider: "type": self.type.value, "domain": self.domain, "name": self.name, + "default_name": self.default_name, + "instance_name_postfix": self.instance_name_postfix, "instance_id": self.instance_id, "lookup_key": self.lookup_key, "supported_features": [x.value for x in self.supported_features], diff --git a/music_assistant/providers/filesystem_local/__init__.py b/music_assistant/providers/filesystem_local/__init__.py index 8ce96fca..f46cc146 100644 --- a/music_assistant/providers/filesystem_local/__init__.py +++ b/music_assistant/providers/filesystem_local/__init__.py @@ -192,10 +192,9 @@ class LocalFileSystemProvider(MusicProvider): return False @property - def default_name(self) -> str: - """Return default name for this provider instance.""" - postfix = self.base_path.split(os.sep)[-1] - return f"{self.manifest.name} {postfix}" + def instance_name_postfix(self) -> str | None: + """Return a (default) instance name postfix for this provider instance.""" + return self.base_path.split(os.sep)[-1] async def handle_async_init(self) -> None: """Handle async initialization of the provider.""" diff --git a/music_assistant/providers/filesystem_smb/__init__.py b/music_assistant/providers/filesystem_smb/__init__.py index 72b2213e..3d762e39 100644 --- a/music_assistant/providers/filesystem_smb/__init__.py +++ b/music_assistant/providers/filesystem_smb/__init__.py @@ -145,17 +145,15 @@ class SMBFileSystemProvider(LocalFileSystemProvider): """ @property - def default_name(self) -> str: - """Return default name for this provider instance.""" + def instance_name_postfix(self) -> str | None: + """Return a (default) instance name postfix for this provider instance.""" share = str(self.config.get_value(CONF_SHARE)) subfolder = str(self.config.get_value(CONF_SUBFOLDER)) if subfolder: - postfix = subfolder + return subfolder elif share: - postfix = share - else: - return super().default_name - return f"{self.manifest.name} {postfix}" + return share + return None async def handle_async_init(self) -> None: """Handle async initialization of the provider.""" diff --git a/music_assistant/providers/podcastfeed/__init__.py b/music_assistant/providers/podcastfeed/__init__.py index 661676f0..83631705 100644 --- a/music_assistant/providers/podcastfeed/__init__.py +++ b/music_assistant/providers/podcastfeed/__init__.py @@ -127,12 +127,11 @@ class PodcastMusicprovider(MusicProvider): return False @property - def default_name(self) -> str: - """Return default name for this provider instance.""" + def instance_name_postfix(self) -> str | None: + """Return a (default) instance name postfix for this provider instance.""" if self.parsed: - postfix = self.parsed["title"] - return f"{self.manifest.name}: {postfix}" - return super().default_name + return self.parsed["title"] + return None async def get_library_podcasts(self) -> AsyncGenerator[Podcast, None]: """Retrieve library/subscribed podcasts from the provider.""" diff --git a/music_assistant/providers/spotify/__init__.py b/music_assistant/providers/spotify/__init__.py index dff4ef40..f4835085 100644 --- a/music_assistant/providers/spotify/__init__.py +++ b/music_assistant/providers/spotify/__init__.py @@ -288,12 +288,11 @@ class SpotifyProvider(MusicProvider): return base @property - def default_name(self) -> str: - """Return default name for this provider instance.""" + def instance_name_postfix(self) -> str | None: + """Return a (default) instance name postfix for this provider instance.""" if self._sp_user: - postfix = self._sp_user["display_name"] - return f"{self.manifest.name}: {postfix}" - return super().default_name + return self._sp_user["display_name"] + return None async def search( self, search_query: str, media_types=list[MediaType], limit: int = 5 -- 2.34.1