From: Marcel van der Veldt Date: Sat, 27 Sep 2025 13:49:46 +0000 (+0200) Subject: Fix other race condition X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=02ec357224397414d3c9fc1a0fa9da42a30b3fe3;p=music-assistant-server.git Fix other race condition --- diff --git a/music_assistant/controllers/music.py b/music_assistant/controllers/music.py index 48a72e69..128345c7 100644 --- a/music_assistant/controllers/music.py +++ b/music_assistant/controllers/music.py @@ -683,32 +683,33 @@ class MusicController(CoreController): self, item: str | MediaItemType, overwrite_existing: bool = False ) -> MediaItemType: """Add item (uri or mediaitem) to the library.""" + # ensure we have a full item if isinstance(item, str): - item = await self.get_item_by_uri(item) - if isinstance(item, ItemMapping): - item = await self.get_item( + full_item = await self.get_item_by_uri(item) + else: + full_item = await self.get_item( item.media_type, item.item_id, item.provider, ) # add to provider(s) library first - for prov_mapping in item.provider_mappings: + for prov_mapping in full_item.provider_mappings: provider = self.mass.get_provider(prov_mapping.provider_instance) - if not provider.library_edit_supported(item.media_type): + if not provider.library_edit_supported(full_item.media_type): continue conf_export_library = provider.config.get_value( CONF_ENTRY_LIBRARY_EXPORT_ADD.key, CONF_ENTRY_LIBRARY_EXPORT_ADD.default_value ) if conf_export_library != "export_library": continue - prov_item = item + prov_item = deepcopy(full_item) if full_item.provider == "library" else full_item prov_item.provider = prov_mapping.provider_instance prov_item.item_id = prov_mapping.item_id prov_mapping.in_library = True self.mass.create_task(provider.library_add(prov_item)) # add (or overwrite) to library - ctrl = self.get_controller(item.media_type) - library_item = await ctrl.add_item_to_library(item, overwrite_existing) + ctrl = self.get_controller(full_item.media_type) + library_item = await ctrl.add_item_to_library(full_item, overwrite_existing) # perform full metadata scan (and provider match) await self.mass.metadata.update_metadata(library_item, overwrite_existing) return library_item