@@ -348,6 +348,11 @@ def open_release_page(self):
348348 lookup .album_lookup (self .release )
349349
350350
351+ def image_delete (obj , image ):
352+ obj .metadata .images .strip_selected_image (image )
353+ obj .metadata_images_changed .emit ()
354+
355+
351356def set_image_replace (obj , coverartimage ):
352357 obj .metadata .images .strip_front_images ()
353358 obj .metadata .images .append (coverartimage )
@@ -545,6 +550,71 @@ def load_remote_image(self, url, data):
545550 log .warning ("Can't load image: %s" , e )
546551 return
547552
553+ def delete_cover_art (self ):
554+ if not self .item or not self .item .metadata .images :
555+ if not self .item .orig_metadata .images :
556+ return
557+
558+ cover_art_list = [image .source or _ ("Unnamed Cover Art" ) for image in self .item .metadata .images ]
559+
560+ selected_item , ok_pressed = QtWidgets .QInputDialog .getItem (self , _ ("Delete Cover Art" ),
561+ _ ("Select the cover art image to delete:" ),
562+ cover_art_list , 0 , False )
563+ if ok_pressed :
564+ selected_image_index = cover_art_list .index (selected_item )
565+ selected_image = self .item .metadata .images [selected_image_index ]
566+ try :
567+ self .delete_cover_art_for_item (self .item , selected_image )
568+ except CoverArtImageError as e :
569+ log .error ("Can't delete image: %s" , e )
570+ return
571+
572+ def delete_cover_art_for_item (self , item , selected_image ):
573+ metadata = item .metadata
574+ if not metadata or not metadata .images :
575+ return
576+
577+ debug_info = "Deleting %r from %r"
578+
579+ if isinstance (item , Album ):
580+ item .enable_update_metadata_images (False )
581+ for track in item .tracks :
582+ track .enable_update_metadata_images (False )
583+ image_delete (track , selected_image )
584+ for file in item .iterfiles ():
585+ image_delete (file , selected_image )
586+ file .update (signal = False )
587+ for track in item .tracks :
588+ track .enable_update_metadata_images (True )
589+ item .enable_update_metadata_images (True )
590+ item .update (update_tracks = False )
591+ elif isinstance (item , FileListItem ):
592+ parents = set ()
593+ item .enable_update_metadata_images (False )
594+ image_delete (item , selected_image )
595+ for file in item .iterfiles ():
596+ for parent in iter_file_parents (file ):
597+ parent .enable_update_metadata_images (False )
598+ parents .add (parent )
599+ image_delete (file , selected_image )
600+ file .update (signal = False )
601+ for parent in parents :
602+ image_delete (parent , selected_image )
603+ parent .enable_update_metadata_images (True )
604+ if isinstance (parent , Album ):
605+ parent .update (update_tracks = False )
606+ else :
607+ parent .update ()
608+ item .enable_update_metadata_images (True )
609+ item .update ()
610+ elif isinstance (item , File ):
611+ image_delete (item , selected_image )
612+ item .update ()
613+ else :
614+ debug_info = "Dropping %r to %r is not handled"
615+
616+ log .debug (debug_info , selected_image , item )
617+
548618 def _try_load_remote_image (self , url , data ):
549619 coverartimage = CoverArtImage (
550620 url = url .toString (),
@@ -634,6 +704,13 @@ def contextMenuEvent(self, event):
634704 show_more_details_action .triggered .connect (self .show_cover_art_info )
635705 menu .addAction (show_more_details_action )
636706
707+ delete_cover_art_action = QtGui .QAction (_ ("Delete cover art" ), self .parent )
708+ if self .item and self .item .can_show_coverart and self .item .metadata .images :
709+ delete_cover_art_action .triggered .connect (self .delete_cover_art )
710+ else :
711+ delete_cover_art_action .setEnabled (False )
712+ menu .addAction (delete_cover_art_action )
713+
637714 if self .orig_cover_art .isVisible ():
638715 name = _ ("Keep original cover art" )
639716 use_orig_value_action = QtGui .QAction (name , self .parent )
0 commit comments