def _save_images(self, dirname, metadata, settings): """Save the cover images to disk.""" if not metadata.images: return default_filename = self._make_image_filename( settings["cover_image_filename"], dirname, metadata, settings) overwrite = settings["save_images_overwrite"] counters = defaultdict(lambda: 0) for image in metadata.images: filename = image["filename"] data = image["data"] mime = image["mime"] if filename is None: filename = default_filename else: filename = self._make_image_filename(filename, dirname, metadata, settings) image_filename = filename ext = mimetype.get_extension(mime, ".jpg") if counters[filename] > 0: image_filename = "%s (%d)" % (filename, counters[filename]) counters[filename] = counters[filename] + 1 while os.path.exists(image_filename + ext) and not overwrite: if os.path.getsize(image_filename + ext) == len(data): self.log.debug("Identical file size, not saving %r", image_filename) break image_filename = "%s (%d)" % (filename, counters[filename]) counters[filename] = counters[filename] + 1 else: self.log.debug("Saving cover images to %r", image_filename) new_dirname = os.path.dirname(image_filename) if not os.path.isdir(new_dirname): os.makedirs(new_dirname) f = open(image_filename + ext, "wb") f.write(data) f.close()
def _save_images(self, filename, metadata, settings): """Save the cover images to disk.""" if not metadata.images: return overwrite = settings["save_images_overwrite"] image_filename = self._script_to_filename( settings["cover_image_filename"], metadata, settings) if not image_filename: image_filename = "cover" if os.path.isabs(image_filename): filename = image_filename else: filename = os.path.join(os.path.dirname(filename), image_filename) if settings['windows_compatible_filenames'] or sys.platform == 'win32': filename = filename.replace('./', '_/').replace('.\\', '_\\') filename = encode_filename(filename) i = 0 for mime, data in metadata.images: image_filename = filename ext = mimetype.get_extension(mime, ".jpg") if i > 0: image_filename = "%s (%d)" % (filename, i) i += 1 while os.path.exists(image_filename + ext) and not overwrite: if os.path.getsize(image_filename + ext) == len(data): self.log.debug("Identical file size, not saving %r", image_filename) break image_filename = "%s (%d)" % (filename, i) i += 1 else: self.log.debug("Saving cover images to %r", image_filename) f = open(image_filename + ext, "wb") f.write(data) f.close()
def _save_images(self, dirname, metadata, settings): """Save the cover images to disk.""" if not metadata.images: return default_filename = self._make_image_filename( settings["cover_image_filename"], dirname, metadata, settings) overwrite = settings["save_images_overwrite"] i = 0 for mime, data, filename in metadata.images: if filename is None: filename = default_filename else: filename = self._make_image_filename(filename, dirname, metadata, settings) image_filename = filename ext = mimetype.get_extension(mime, ".jpg") i += 1 while os.path.exists(image_filename + ext) and not overwrite: if os.path.getsize(image_filename + ext) == len(data): self.log.debug("Identical file size, not saving %r", image_filename) break image_filename = "%s (%d)" % (filename, i) i += 1 else: self.log.debug("Saving cover images to %r", image_filename) new_dirname = os.path.dirname(image_filename) if not os.path.isdir(new_dirname): os.makedirs(new_dirname) f = open(image_filename + ext, "wb") f.write(data) f.close()
def _save(self, filename, metadata): """Save metadata to the file.""" log.debug("Saving file %r", filename) try: tags = mutagen.apev2.APEv2(encode_filename(filename)) except mutagen.apev2.APENoHeaderError: tags = mutagen.apev2.APEv2() if config.setting["clear_existing_tags"]: tags.clear() elif config.setting['save_images_to_tags'] and metadata.images: for name, value in tags.items(): if name.lower().startswith( 'cover art') and value.kind == mutagen.apev2.BINARY: del tags[name] temp = {} for name, value in metadata.items(): if name.startswith("~"): continue if name.startswith('lyrics:'): name = 'Lyrics' elif name == "date": name = "Year" # tracknumber/totaltracks => Track elif name == 'tracknumber': name = 'Track' if 'totaltracks' in metadata: value = '%s/%s' % (value, metadata['totaltracks']) # discnumber/totaldiscs => Disc elif name == 'discnumber': name = 'Disc' if 'totaldiscs' in metadata: value = '%s/%s' % (value, metadata['totaldiscs']) elif name in ('totaltracks', 'totaldiscs'): continue # "performer:Piano=Joe Barr" => "Performer=Joe Barr (Piano)" elif name.startswith('performer:') or name.startswith('comment:'): name, desc = name.split(':', 1) name = name.title() if desc: value += ' (%s)' % desc elif name in self.__rtranslate: name = self.__rtranslate[name] else: name = name.title() 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: if not save_this_image_to_tags(image): continue cover_filename = 'Cover Art (Front)' cover_filename += mimetype.get_extension(image["mime"], '.jpg') 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))
def _save(self, filename, metadata): """Save metadata to the file.""" log.debug("Saving file %r", filename) try: tags = mutagen.apev2.APEv2(encode_filename(filename)) except mutagen.apev2.APENoHeaderError: tags = mutagen.apev2.APEv2() if config.setting["clear_existing_tags"]: tags.clear() elif config.setting['save_images_to_tags'] and metadata.images: for name, value in tags.items(): if name.lower().startswith('cover art') and value.kind == mutagen.apev2.BINARY: del tags[name] temp = {} for name, value in metadata.items(): if name.startswith("~"): continue if name.startswith('lyrics:'): name = 'Lyrics' elif name == "date": name = "Year" # tracknumber/totaltracks => Track elif name == 'tracknumber': name = 'Track' if 'totaltracks' in metadata: value = '%s/%s' % (value, metadata['totaltracks']) # discnumber/totaldiscs => Disc elif name == 'discnumber': name = 'Disc' if 'totaldiscs' in metadata: value = '%s/%s' % (value, metadata['totaldiscs']) elif name in ('totaltracks', 'totaldiscs'): continue # "performer:Piano=Joe Barr" => "Performer=Joe Barr (Piano)" elif name.startswith('performer:') or name.startswith('comment:'): name, desc = name.split(':', 1) name = name.title() if desc: value += ' (%s)' % desc elif name in self.__rtranslate: name = self.__rtranslate[name] else: name = name.title() 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: if not save_this_image_to_tags(image): continue cover_filename = 'Cover Art (Front)' cover_filename += mimetype.get_extension(image.mimetype, '.jpg') 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))
def __init__(self, data, mimetype="image/jpeg", imagetype="front", comment="", filename=None, datahash=""): self.description = comment (fd, self._tempfile_filename) = tempfile.mkstemp(prefix="picard") with fdopen(fd, "wb") as imagefile: imagefile.write(data) log.debug("Saving image (hash=%s) to %r" % (datahash, self._tempfile_filename)) self.datalength = len(data) self.extension = mime.get_extension(mime, ".jpg") self.filename = filename self.imagetype = imagetype self.is_front_image = imagetype == "front" self.mimetype = mimetype
def _save_images(self, dirname, metadata): """Save the cover images to disk.""" if not metadata.images: return default_filename = self._make_image_filename( config.setting["cover_image_filename"], dirname, metadata) overwrite = config.setting["save_images_overwrite"] counters = defaultdict(lambda: 0) for image in metadata.images: filename = image["filename"] data = image["data"] mime = image["mime"] if filename is None: filename = default_filename else: filename = self._make_image_filename(filename, dirname, metadata) image_filename = filename ext = mimetype.get_extension(mime, ".jpg") if counters[filename] > 0: image_filename = "%s (%d)" % (filename, counters[filename]) counters[filename] = counters[filename] + 1 while os.path.exists(image_filename + ext) and not overwrite: if os.path.getsize(image_filename + ext) == len(data): log.debug("Identical file size, not saving %r", image_filename) break image_filename = "%s (%d)" % (filename, counters[filename]) counters[filename] = counters[filename] + 1 else: new_filename = image_filename + ext # Even if overwrite is enabled we don't need to write the same # image multiple times if (os.path.exists(new_filename) and os.path.getsize(new_filename) == len(data)): log.debug("Identical file size, not saving %r", image_filename) continue log.debug("Saving cover images to %r", image_filename) new_dirname = os.path.dirname(image_filename) if not os.path.isdir(new_dirname): os.makedirs(new_dirname) f = open(image_filename + ext, "wb") f.write(data) f.close()