Example #1
0
 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()
Example #2
0
 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()
Example #3
0
 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()
Example #4
0
 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()
Example #5
0
 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))
Example #6
0
 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))
Example #7
0
 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
Example #8
0
 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()