description: str | None = None
review: str | None = None
explicit: bool | None = None
+ # NOTE: images is a list of available images, sorted by preference
images: list[MediaItemImage] | None = None
genres: set[str] | None = None
mood: str | None = None
def update(
self,
new_values: MediaItemMetadata,
- allow_overwrite: bool = True,
+ allow_overwrite: bool = False,
) -> MediaItemMetadata:
"""Update metadata (in-place) with new values."""
if not new_values:
except MusicAssistantError as err:
# edge case where playlist track has invalid albumdetails
self.logger.warning("Unable to fetch album details %s - %s", track.album.uri, str(err))
- # prefer album image if album explicitly given or track has no image on its own
- if (
- (album_uri or not track.metadata.images)
- and isinstance(track.album, Album)
- and track.album.image
- ):
- track.metadata.images = [track.album.image]
+
# append artist details to full track item (resolve ItemMappings)
track_artists = []
for artist in track.artists:
# grab additional metadata
if metadata_lookup:
await self.mass.metadata.get_track_metadata(item)
- # copy track image from album (only if albumtype = single)
+ # copy track image from album (only if albumtype = single !)
if (
not item.image
and isinstance(item.album, Album)
and item.album.image
and item.album.album_type == AlbumType.SINGLE
):
- item.metadata.images = item.album.metadata.images
- elif item.image and isinstance(item.album, Album) and item.image == item.album.image:
- item.metadata.images = []
- if item.image and isinstance(item.album, Album) and not item.album.image:
- item.album.metadata.images = item.metadata.images
+ item.metadata.images = [item.album.image]
# check for existing item first
library_item = None
if cur_item := await self.get_library_item_by_prov_id(item.item_id, item.provider):
if ProviderFeature.ARTIST_METADATA not in provider.supported_features:
continue
if metadata := await provider.get_artist_metadata(artist):
- artist.metadata.update(metadata)
+ artist.metadata.update(metadata, allow_overwrite=False)
self.logger.debug(
"Fetched metadata for Artist %s on provider %s",
artist.name,
if ProviderFeature.ALBUM_METADATA not in provider.supported_features:
continue
if metadata := await provider.get_album_metadata(album):
- album.metadata.update(metadata)
+ album.metadata.update(metadata, allow_overwrite=False)
self.logger.debug(
"Fetched metadata for Album %s on provider %s",
album.name,
if ProviderFeature.TRACK_METADATA not in provider.supported_features:
continue
if metadata := await provider.get_track_metadata(track):
- track.metadata.update(metadata)
+ track.metadata.update(metadata, allow_overwrite=False)
self.logger.debug(
"Fetched metadata for Track %s on provider %s",
track.name,