Fix other race condition
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 27 Sep 2025 13:49:46 +0000 (15:49 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 27 Sep 2025 13:49:46 +0000 (15:49 +0200)
music_assistant/controllers/music.py

index 48a72e69e7f2792280a3a92bd8fc876dae24a485..128345c7888c53670d50fd2fab52d639071b3911 100644 (file)
@@ -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