# 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
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."""
"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],
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."""
"""
@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."""
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."""
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