@@ -349,6 +349,11 @@ def open_release_page(self):
349
349
lookup .album_lookup (self .release )
350
350
351
351
352
+ def image_delete (obj , image ):
353
+ obj .metadata .images .strip_selected_image (image )
354
+ obj .metadata_images_changed .emit ()
355
+
356
+
352
357
def set_image_replace (obj , coverartimage ):
353
358
obj .metadata .images .strip_front_images ()
354
359
obj .metadata .images .append (coverartimage )
@@ -457,10 +462,11 @@ def update_metadata(self):
457
462
orig_metadata = self .item .orig_metadata
458
463
459
464
if not metadata or not metadata .images :
460
- self .cover_art .set_metadata (orig_metadata )
465
+ self .cover_art .set_metadata (None )
466
+ self .orig_cover_art .set_metadata (None )
461
467
else :
462
468
self .cover_art .set_metadata (metadata )
463
- self .orig_cover_art .set_metadata (orig_metadata )
469
+ self .orig_cover_art .set_metadata (orig_metadata )
464
470
self .update_display ()
465
471
466
472
def fetch_remote_image (self , url , fallback_data = None ):
@@ -547,6 +553,71 @@ def load_remote_image(self, url, data):
547
553
log .warning ("Can't load image: %s" , e )
548
554
return
549
555
556
+ def delete_cover_art (self ):
557
+ if not self .item or not self .item .metadata .images :
558
+ if not self .item .orig_metadata .images :
559
+ return
560
+
561
+ cover_art_list = [image .source or _ ("Unnamed Cover Art" ) for image in self .item .metadata .images ]
562
+
563
+ selected_item , ok_pressed = QtWidgets .QInputDialog .getItem (self , _ ("Delete Cover Art" ),
564
+ _ ("Select the cover art image to delete:" ),
565
+ cover_art_list , 0 , False )
566
+ if ok_pressed :
567
+ selected_image_index = cover_art_list .index (selected_item )
568
+ selected_image = self .item .metadata .images [selected_image_index ]
569
+ try :
570
+ self .delete_cover_art_for_item (self .item , selected_image )
571
+ except CoverArtImageError as e :
572
+ log .error ("Can't delete image: %s" , e )
573
+ return
574
+
575
+ def delete_cover_art_for_item (self , item , selected_image ):
576
+ metadata = item .metadata
577
+ if not metadata or not metadata .images :
578
+ return
579
+
580
+ debug_info = "Deleted %r from %r"
581
+
582
+ if isinstance (item , Album ):
583
+ item .enable_update_metadata_images (False )
584
+ for track in item .tracks :
585
+ track .enable_update_metadata_images (False )
586
+ image_delete (track , selected_image )
587
+ for file in item .iterfiles ():
588
+ image_delete (file , selected_image )
589
+ file .update (signal = False )
590
+ for track in item .tracks :
591
+ track .enable_update_metadata_images (True )
592
+ item .enable_update_metadata_images (True )
593
+ item .update (update_tracks = False )
594
+ elif isinstance (item , FileListItem ):
595
+ parents = set ()
596
+ item .enable_update_metadata_images (False )
597
+ image_delete (item , selected_image )
598
+ for file in item .iterfiles ():
599
+ for parent in iter_file_parents (file ):
600
+ parent .enable_update_metadata_images (False )
601
+ parents .add (parent )
602
+ image_delete (file , selected_image )
603
+ file .update (signal = False )
604
+ for parent in parents :
605
+ image_delete (parent , selected_image )
606
+ parent .enable_update_metadata_images (True )
607
+ if isinstance (parent , Album ):
608
+ parent .update (update_tracks = False )
609
+ else :
610
+ parent .update ()
611
+ item .enable_update_metadata_images (True )
612
+ item .update ()
613
+ elif isinstance (item , File ):
614
+ image_delete (item , selected_image )
615
+ item .update ()
616
+ else :
617
+ debug_info = "Unable to delete %r from %r"
618
+
619
+ log .debug (debug_info , selected_image , item )
620
+
550
621
def _try_load_remote_image (self , url , data ):
551
622
coverartimage = CoverArtImage (
552
623
url = url .toString (),
@@ -636,6 +707,13 @@ def contextMenuEvent(self, event):
636
707
show_more_details_action .triggered .connect (self .show_cover_art_info )
637
708
menu .addAction (show_more_details_action )
638
709
710
+ delete_cover_art_action = QtGui .QAction (_ ("Delete cover art" ), self .parent )
711
+ if self .item and self .item .can_show_coverart and self .item .metadata .images :
712
+ delete_cover_art_action .triggered .connect (self .delete_cover_art )
713
+ else :
714
+ delete_cover_art_action .setEnabled (False )
715
+ menu .addAction (delete_cover_art_action )
716
+
639
717
if self .orig_cover_art .isVisible ():
640
718
name = _ ("Keep original cover art" )
641
719
use_orig_value_action = QtGui .QAction (name , self .parent )
0 commit comments