Move test for save_images_to_tags option to metadata.images_to_be_saved_to_tags

This commit is contained in:
Laurent Monin
2014-05-21 15:42:43 +02:00
parent c0de7d95c9
commit fb4088addd
6 changed files with 60 additions and 64 deletions

View File

@@ -119,7 +119,7 @@ class APEv2File(File):
tags = mutagen.apev2.APEv2()
if config.setting["clear_existing_tags"]:
tags.clear()
elif config.setting['save_images_to_tags'] and metadata.images:
elif metadata.images_to_be_saved_to_tags:
for name, value in tags.items():
if name.lower().startswith('cover art') and value.kind == mutagen.apev2.BINARY:
del tags[name]
@@ -156,13 +156,12 @@ class APEv2File(File):
temp.setdefault(name, []).append(value)
for name, values in temp.items():
tags[str(name)] = values
if config.setting['save_images_to_tags']:
for image in metadata.images_to_be_saved_to_tags:
cover_filename = 'Cover Art (Front)'
cover_filename += image.extension
tags['Cover Art (Front)'] = mutagen.apev2.APEValue(cover_filename + '\0' + image.data, mutagen.apev2.BINARY)
break # can't save more than one item with the same name
# (mp3tags does this, but it's against the specs)
for image in metadata.images_to_be_saved_to_tags:
cover_filename = 'Cover Art (Front)'
cover_filename += image.extension
tags['Cover Art (Front)'] = mutagen.apev2.APEValue(cover_filename + '\0' + image.data, mutagen.apev2.BINARY)
break # can't save more than one item with the same name
# (mp3tags does this, but it's against the specs)
tags.save(encode_filename(filename))

View File

@@ -175,15 +175,14 @@ class ASFFile(File):
if config.setting['clear_existing_tags']:
file.tags.clear()
if config.setting['save_images_to_tags']:
cover = []
for image in metadata.images_to_be_saved_to_tags:
tag_data = pack_image(image.mimetype, image.data,
image_type_as_id3_num(image.maintype),
image.comment)
cover.append(ASFByteArrayAttribute(tag_data))
if cover:
file.tags['WM/Picture'] = cover
cover = []
for image in metadata.images_to_be_saved_to_tags:
tag_data = pack_image(image.mimetype, image.data,
image_type_as_id3_num(image.maintype),
image.comment)
cover.append(ASFByteArrayAttribute(tag_data))
if cover:
file.tags['WM/Picture'] = cover
for name, values in metadata.rawitems():
if name.startswith('lyrics:'):

View File

@@ -297,8 +297,7 @@ class ID3File(File):
if config.setting['clear_existing_tags']:
tags.clear()
if (config.setting['save_images_to_tags']
and metadata.images_to_be_saved_to_tags):
if metadata.images_to_be_saved_to_tags:
tags.delall('APIC')
if config.setting['write_id3v1']:
@@ -321,25 +320,24 @@ class ID3File(File):
text = metadata['discnumber']
tags.add(id3.TPOS(encoding=0, text=text))
if config.setting['save_images_to_tags']:
# This is necessary because mutagens HashKey for APIC frames only
# includes the FrameID (APIC) and description - it's basically
# impossible to save two images, even of different types, without
# any description.
counters = defaultdict(lambda: 0)
for image in metadata.images_to_be_saved_to_tags:
desc = desctag = image.comment
if counters[desc] > 0:
if desc:
desctag = "%s (%i)" % (desc, counters[desc])
else:
desctag = "(%i)" % counters[desc]
counters[desc] += 1
tags.add(id3.APIC(encoding=0,
mime=image.mimetype,
type=image_type_as_id3_num(image.maintype),
desc=desctag,
data=image.data))
# This is necessary because mutagens HashKey for APIC frames only
# includes the FrameID (APIC) and description - it's basically
# impossible to save two images, even of different types, without
# any description.
counters = defaultdict(lambda: 0)
for image in metadata.images_to_be_saved_to_tags:
desc = desctag = image.comment
if counters[desc] > 0:
if desc:
desctag = "%s (%i)" % (desc, counters[desc])
else:
desctag = "(%i)" % counters[desc]
counters[desc] += 1
tags.add(id3.APIC(encoding=0,
mime=image.mimetype,
type=image_type_as_id3_num(image.maintype),
desc=desctag,
data=image.data))
tmcl = mutagen.id3.TMCL(encoding=encoding, people=[])
tipl = mutagen.id3.TIPL(encoding=encoding, people=[])

View File

@@ -200,15 +200,14 @@ class MP4File(File):
else:
file.tags["disk"] = [(int(metadata["discnumber"]), 0)]
if config.setting['save_images_to_tags']:
covr = []
for image in metadata.images_to_be_saved_to_tags:
if image.mimetype == "image/jpeg":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_JPEG))
elif image.mimetype == "image/png":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_PNG))
if covr:
file.tags["covr"] = covr
covr = []
for image in metadata.images_to_be_saved_to_tags:
if image.mimetype == "image/jpeg":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_JPEG))
elif image.mimetype == "image/png":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_PNG))
if covr:
file.tags["covr"] = covr
file.save()

View File

@@ -154,15 +154,14 @@ class VCommentFile(File):
def _save(self, filename, metadata):
"""Save metadata to the file."""
log.debug("Saving file %r", filename)
is_flac = self._File == mutagen.flac.FLAC
file = self._File(encode_filename(filename))
if file.tags is None:
file.add_tags()
if config.setting["clear_existing_tags"]:
file.tags.clear()
if self._File == mutagen.flac.FLAC and (
config.setting["clear_existing_tags"] or
(config.setting['save_images_to_tags'] and
metadata.images_to_be_saved_to_tags)):
if (is_flac and (config.setting["clear_existing_tags"] or
metadata.images_to_be_saved_to_tags)):
file.clear_pictures()
tags = {}
for name, value in metadata.items():
@@ -198,21 +197,21 @@ class VCommentFile(File):
if "totaldiscs" in metadata:
tags.setdefault(u"DISCTOTAL", []).append(metadata["totaldiscs"])
if config.setting['save_images_to_tags']:
for image in metadata.images_to_be_saved_to_tags:
picture = mutagen.flac.Picture()
picture.data = image.data
picture.mime = image.mimetype
picture.desc = image.comment
picture.type = image_type_as_id3_num(image.maintype)
if self._File == mutagen.flac.FLAC:
file.add_picture(picture)
else:
tags.setdefault(u"METADATA_BLOCK_PICTURE", []).append(
base64.standard_b64encode(picture.write()))
for image in metadata.images_to_be_saved_to_tags:
picture = mutagen.flac.Picture()
picture.data = image.data
picture.mime = image.mimetype
picture.desc = image.comment
picture.type = image_type_as_id3_num(image.maintype)
if self._File == mutagen.flac.FLAC:
file.add_picture(picture)
else:
tags.setdefault(u"METADATA_BLOCK_PICTURE", []).append(
base64.standard_b64encode(picture.write()))
file.tags.update(tags)
kwargs = {}
if self._File == mutagen.flac.FLAC and config.setting["remove_id3_from_flac"]:
if is_flac and config.setting["remove_id3_from_flac"]:
kwargs["deleteid3"] = True
try:
file.save(**kwargs)

View File

@@ -53,6 +53,8 @@ class Metadata(dict):
@property
def images_to_be_saved_to_tags(self):
if not config.setting["save_images_to_tags"]:
return ()
if not config.setting["save_only_front_images_to_tags"]:
return self.images
return [img for img in self.images if img.is_front_image()]