mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-28 10:33:59 +00:00
Use the same Image objects for all tracks of an album
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user