Use the same Image objects for all tracks of an album

This commit is contained in:
Wieland Hoffmann
2014-01-22 23:27:08 +01:00
parent b3593896a8
commit 030fb9b00b
9 changed files with 28 additions and 21 deletions

View File

@@ -26,7 +26,7 @@ import re
import traceback
from functools import partial
from picard import config, log
from picard.metadata import is_front_image
from picard.metadata import Image, is_front_image
from picard.util import mimetype, parse_amazon_url
from picard.const import CAA_HOST, CAA_PORT
from PyQt4.QtCore import QUrl, QObject
@@ -101,9 +101,10 @@ def _coverart_downloaded(album, metadata, release, try_list, coverinfos, data, h
filename = None
if not is_front_image(coverinfos) and config.setting["caa_image_type_as_filename"]:
filename = coverinfos['type']
metadata.add_image(mime, data, filename, coverinfos)
image = Image(data, mime, coverinfos['type'], coverinfos['desc'])
metadata.add_image(image)
for track in album._new_tracks:
track.metadata.add_image(mime, data, filename, coverinfos)
track.metadata.add_image(image)
# If the image already was a front image, there might still be some
# other front images in the try_list - remove them.

View File

@@ -63,7 +63,7 @@ class APEv2File(File):
if '\0' in values.value:
descr, data = values.value.split('\0', 1)
mime = mimetype.get_from_data(data, descr, 'image/jpeg')
metadata.add_image(mime, data)
metadata.make_and_add_image(mime, data)
# skip EXTERNAL and BINARY values
if values.kind != mutagen.apev2.TEXT:
continue

View File

@@ -139,7 +139,7 @@ class ASFFile(File):
if name == 'WM/Picture':
for image in values:
(mime, data, type, description) = unpack_image(image.value)
metadata.add_image(mime, data, comment=description,
metadata.make_and_add_image(mime, data, comment=description,
imagetype=image_type_from_id3_num(type))
continue
elif name not in self.__RTRANS:

View File

@@ -248,7 +248,7 @@ class ID3File(File):
else:
metadata['discnumber'] = value[0]
elif frameid == 'APIC':
metadata.add_image(frame.mime, frame.data, comment=frame.desc,
metadata.make_and_add_image(frame.mime, frame.data, comment=frame.desc,
imagetype=image_type_from_id3_num(frame.type))
elif frameid == 'POPM':
# Rating in ID3 ranges from 0 to 255, normalize this to the range 0 to 5

View File

@@ -140,9 +140,9 @@ class MP4File(File):
elif name == "covr":
for value in values:
if value.imageformat == value.FORMAT_JPEG:
metadata.add_image("image/jpeg", value)
metadata.make_and_add_image("image/jpeg", value)
elif value.imageformat == value.FORMAT_PNG:
metadata.add_image("image/png", value)
metadata.make_and_add_image("image/png", value)
self._info(metadata, file)
return metadata

View File

@@ -96,7 +96,7 @@ class VCommentFile(File):
name = "totaldiscs"
elif name == "metadata_block_picture":
image = mutagen.flac.Picture(base64.standard_b64decode(value))
metadata.add_image(image.mime, image.data,
metadata.make_and_add_image(image.mime, image.data,
comment=image.desc,
imagetype=image_type_from_id3_num(image.type))
continue
@@ -105,13 +105,13 @@ class VCommentFile(File):
metadata.add(name, value)
if self._File == mutagen.flac.FLAC:
for image in file.pictures:
metadata.add_image(image.mime, image.data, comment=image.desc,
metadata.make_and_add_image(image.mime, image.data, comment=image.desc,
imagetype=image_type_from_id3_num(image.type))
# Read the unofficial COVERART tags, for backward compatibillity only
if not "metadata_block_picture" in file.tags:
try:
for index, data in enumerate(file["COVERART"]):
metadata.add_image(file["COVERARTMIME"][index],
metadata.make_and_add_image(file["COVERARTMIME"][index],
base64.standard_b64decode(data)
)
except KeyError:

View File

@@ -156,9 +156,15 @@ class Metadata(dict):
self.images = []
self.length = 0
def add_image(self, mime, data, filename=None, comment="",
imagetype="front"):
"""Adds the image ``data`` to this Metadata object.
def add_image(self, image):
"""Adds the Image object ``image`` to tis Metadata object.
"""
self.images.append(image)
def make_and_add_image(self, mime, data, filename=None, comment="",
imagetype="front"):
"""Build a new image object from ``data`` and adds it to this Metadata
object.
Arguments:
mime -- The mimetype of the image

View File

@@ -178,16 +178,16 @@ class CoverArtBox(QtGui.QGroupBox):
self.__set_data([mime, data], pixmap=pixmap)
if isinstance(self.item, Album):
album = self.item
album.metadata.add_image(mime, data)
album.metadata.make_and_add_image(mime, data)
for track in album.tracks:
track.metadata.add_image(mime, data)
track.metadata.make_and_add_image(mime, data)
for file in album.iterfiles():
file.metadata.add_image(mime, data)
file.metadata.make_and_add_image(mime, data)
elif isinstance(self.item, Track):
track = self.item
track.metadata.add_image(mime, data)
track.metadata.make_and_add_image(mime, data)
for file in track.iterfiles():
file.metadata.add_image(mime, data)
file.metadata.make_and_add_image(mime, data)
elif isinstance(self.item, File):
file = self.item
file.metadata.add_image(mime, data)
file.metadata.make_and_add_image(mime, data)

View File

@@ -544,7 +544,7 @@ class TestCoverArt(unittest.TestCase):
f = picard.formats.open(self.filename)
metadata = Metadata()
imgdata = tests[t]['head'] + dummyload
metadata.add_image(tests[t]['mime'], imgdata)
metadata.make_and_add_image(tests[t]['mime'], imgdata)
f._save(self.filename, metadata)
f = picard.formats.open(self.filename)