Add new external image to artwork infodialog

This commit is contained in:
twodoorcoupe
2024-06-15 11:37:21 +02:00
parent 9d6434cad7
commit c22fe4cd64
4 changed files with 59 additions and 13 deletions

View File

@@ -322,7 +322,7 @@ class CoverArtImage:
raise CoverArtImageIOError(e)
def set_external_file_data(self, data):
self.external_file_coverart = CoverArtImage(data=data)
self.external_file_coverart = CoverArtImage(data=data, url=self.url)
@property
def maintype(self):

View File

@@ -21,6 +21,7 @@
import time
from picard import log
from picard.config import get_config
from picard.coverart.processing import ( # noqa: F401 # pylint: disable=unused-import
filters,
processors,
@@ -53,6 +54,7 @@ def run_image_metadata_filters(metadata):
def run_image_processors(data, coverartimage):
config = get_config()
tags_data = data
file_data = data
try:
@@ -61,16 +63,18 @@ def run_image_processors(data, coverartimage):
both_queue, tags_queue, file_queue = get_cover_art_processors()
for processor in both_queue:
processor.run(image, ProcessingTarget.BOTH)
tags_image = image.copy()
for processor in tags_queue:
processor.run(tags_image, ProcessingTarget.TAGS)
tags_data = tags_image.get_result(default_format=True)
if config.setting['save_images_to_tags']:
tags_image = image.copy()
for processor in tags_queue:
processor.run(tags_image, ProcessingTarget.TAGS)
tags_data = tags_image.get_result(default_format=True)
coverartimage.set_tags_data(tags_data)
file_image = image.copy()
for processor in file_queue:
processor.run(file_image, ProcessingTarget.FILE)
file_data = file_image.get_result(default_format=True)
coverartimage.set_external_file_data(file_data)
if config.setting['save_images_to_files']:
file_image = image.copy()
for processor in file_queue:
processor.run(file_image, ProcessingTarget.FILE)
file_data = file_image.get_result(default_format=True)
coverartimage.set_external_file_data(file_data)
log.debug(
"Image processing for %s finished in %d ms",
coverartimage,
@@ -80,5 +84,6 @@ def run_image_processors(data, coverartimage):
raise CoverArtProcessingError(e)
except CoverArtProcessingError as e:
coverartimage.set_tags_data(tags_data)
coverartimage.set_external_file_data(file_data)
if config.setting['save_images_to_files']:
coverartimage.set_external_file_data(file_data)
raise e

View File

@@ -137,6 +137,19 @@ class ArtworkTableSimple(ArtworkTable):
self.setColumnWidth(self.get_column_index('type'), self.TYPE_COLUMN_SIZE)
class ArtworkTableSimpleExternal(ArtworkTableSimple):
NUM_COLS = 3
_columns = {
'type': 0,
'new': 1,
'external': 2,
}
_labels = (_("Type"), _("Cover"), _("External Cover"),)
artwork_columns = ('new', 'external',)
class ArtworkTableExisting(ArtworkTable):
NUM_COLS = 3
@@ -150,11 +163,28 @@ class ArtworkTableExisting(ArtworkTable):
artwork_columns = ('orig', 'new',)
class ArtworkTableExistingExternal(ArtworkTable):
NUM_COLS = 4
_columns = {
'orig': 0,
'type': 1,
'new': 2,
'external': 3,
}
_labels = (_("Existing Cover"), _("Type"), _("New Cover"), _("New External Cover"),)
artwork_columns = ('orig', 'new', 'external',)
class ArtworkRow:
def __init__(self, orig_image=None, new_image=None, types=None):
self.orig_image = orig_image
self.new_image = new_image
self.types = types
self.new_external_image = None
if self.new_image:
self.new_external_image = self.new_image.external_file_coverart
class InfoDialog(PicardDialog):
@@ -171,6 +201,9 @@ class InfoDialog(PicardDialog):
self.new_images = sorted(obj.metadata.images) or []
self.orig_images = []
artworktable_class = ArtworkTableSimple
has_external_images = any(image.external_file_coverart for image in self.new_images)
if has_external_images:
artworktable_class = ArtworkTableSimpleExternal
has_orig_images = hasattr(obj, 'orig_metadata') and obj.orig_metadata.images
if has_orig_images and obj.orig_metadata.images != obj.metadata.images:
@@ -180,6 +213,8 @@ class InfoDialog(PicardDialog):
if is_track or is_linked_file or is_album_with_files:
self.orig_images = sorted(obj.orig_metadata.images)
artworktable_class = ArtworkTableExisting
if has_external_images:
artworktable_class = ArtworkTableExistingExternal
self.ui.setupUi(self)
self.ui.buttonBox.addButton(
@@ -242,7 +277,11 @@ class InfoDialog(PicardDialog):
col_index = self.artwork_table.get_column_index(colname)
pixmap = None
infos = None
source = 'new_image' if colname == 'new' else 'orig_image'
source = 'orig_image'
if colname == 'new':
source = 'new_image'
elif colname == 'external':
source = 'new_external_image'
image = getattr(self.artwork_rows[row_index], source)
item = QtWidgets.QTableWidgetItem()

View File

@@ -115,7 +115,9 @@ class ImageProcessorsTest(PicardTestCase):
'cover_tags_maximum_height': 500,
'resize_images_saved_to_file': True,
'cover_file_maximum_width': 750,
'cover_file_maximum_height': 750
'cover_file_maximum_height': 750,
'save_images_to_tags': True,
'save_images_to_files': True,
}
self.set_config_values(settings)
sizes = [