Exemplo n.º 1
0
def _coverart_downloaded(album, metadata, release, try_list, coverinfos, data, http, error):
    album._requests -= 1

    if error or len(data) < 1000:
        if error:
            log.error(str(http.errorString()))
    else:
        QObject.tagger.window.set_statusbar_message(N_("Coverart %s downloaded"),
                http.url().toString())
        mime = mimetype.get_from_data(data, default="image/jpeg")
        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)
        for track in album._new_tracks:
            track.metadata.add_image(mime, data, filename, coverinfos)

    # If the image already was a front image, there might still be some
    # other front images in the try_list - remove them.
    if is_front_image(coverinfos):
        for item in try_list[:]:
            if is_front_image(item) and 'archive.org' not in item['host']:
                # Hosts other than archive.org only provide front images
                try_list.remove(item)
    _walk_try_list(album, metadata, release, try_list)
Exemplo n.º 2
0
def _coverart_downloaded(album, metadata, release, try_list, coverinfos, data, http, error):
    album._requests -= 1

    if error or len(data) < 1000:
        if error:
            _coverart_http_error(album, http)
    else:
        QObject.tagger.window.set_statusbar_message(N_("Coverart %s downloaded"),
                http.url().toString())
        mime = mimetype.get_from_data(data, default="image/jpeg")
        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)
        for track in album._new_tracks:
            track.metadata.add_image(mime, data, filename, coverinfos)

    # If the image already was a front image, there might still be some
    # other front images in the try_list - remove them.
    if is_front_image(coverinfos):
        for item in try_list[:]:
            if is_front_image(item) and 'archive.org' not in item['host']:
                # Hosts other than archive.org only provide front images
                try_list.remove(item)
    _walk_try_list(album, metadata, release, try_list)
Exemplo n.º 3
0
def _coverart_downloaded(album, metadata, release, try_list, coverinfos, data, http, error):
    album._requests -= 1

    if error or len(data) < 1000:
        if error:
            _coverart_http_error(album, http)
    else:
        QObject.tagger.window.set_statusbar_message(N_("Coverart %s downloaded"),
                http.url().toString())
        mime = mimetype.get_from_data(data, default="image/jpeg")

        try:
            metadata.make_and_add_image(mime, data,
                                        imagetype=coverinfos['type'],
                                        comment=coverinfos['desc'])
            for track in album._new_tracks:
                track.metadata.make_and_add_image(mime, data,
                                                  imagetype=coverinfos['type'],
                                                  comment=coverinfos['desc'])
        except (IOError, OSError), e:
            album.error_append(e.message)
            album._finalize_loading(error=True)
            # It doesn't make sense to store/download more images if we can't
            # save them in the temporary folder, abort.
            return
Exemplo n.º 4
0
def _coverart_downloaded(album, metadata, release, try_list, data, http, error):
    try:
        if error or len(data) < 1000:
            if error:
                album.log.error(str(http.errorString()))
            coverart(album, metadata, release, try_list)
        else:
            mime = mimetype.get_from_data(data, default="image/jpeg")
            metadata.add_image(mime, data)
            for track in album._new_tracks:
                track.metadata.add_image(mime, data)
    finally:
        album._requests -= 1
        album._finalize_loading(None)
Exemplo n.º 5
0
    def _coverart_downloaded(self, coverartimage, data, http, error):
        """Handle finished download, save it to metadata"""
        self.album._requests -= 1

        if error:
            self._coverart_http_error(http)
        elif len(data) < 1000:
            log.warning("Not enough data, skipping %s" % coverartimage)
        else:
            self._message(
                N_("Cover art of type '%(type)s' downloaded for %(albumid)s from %(host)s"),
                {
                    'type': ','.join(coverartimage.types),
                    'albumid': self.album.id,
                    'host': coverartimage.host
                }
            )
            mime = mimetype.get_from_data(data, default="image/jpeg")

            try:
                self.metadata.make_and_add_image(
                    mime,
                    data,
                    types=coverartimage.types,
                    comment=coverartimage.comment,
                    is_front=coverartimage.is_front
                )
                for track in self.album._new_tracks:
                    track.metadata.make_and_add_image(
                        mime,
                        data,
                        types=coverartimage.types,
                        comment=coverartimage.comment,
                        is_front=coverartimage.is_front
                    )
                # If the image already was a front image,
                # there might still be some other non-CAA front
                # images in the queue - ignore them.
                if not self.front_image_found:
                    self.front_image_found = coverartimage.is_front_image()

            except (IOError, OSError) as e:
                self.album.error_append(e.message)
                self.album._finalize_loading(error=True)
                # It doesn't make sense to store/download more images if we can't
                # save them in the temporary folder, abort.
                return

        self._download_next_in_queue()
Exemplo n.º 6
0
def _coverart_downloaded(album, metadata, release, try_list, data, http,
                         error):
    try:
        if error or len(data) < 1000:
            if error:
                album.log.error(str(http.errorString()))
            coverart(album, metadata, release, try_list)
        else:
            mime = mimetype.get_from_data(data, default="image/jpeg")
            metadata.add_image(mime, data)
            for track in album._new_tracks:
                track.metadata.add_image(mime, data)
    finally:
        album._requests -= 1
        album._finalize_loading(None)
Exemplo n.º 7
0
 def _load(self, filename):
     self.log.debug("Loading file %r", filename)
     file = self._File(encode_filename(filename))
     metadata = Metadata()
     if file.tags:
         for origname, values in file.tags.items():
             if origname.lower().startswith(
                     "cover art") and values.kind == mutagen.apev2.BINARY:
                 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)
             # skip EXTERNAL and BINARY values
             if values.kind != mutagen.apev2.TEXT:
                 continue
             for value in values:
                 name = origname
                 if name == "Year":
                     name = "date"
                     value = sanitize_date(value)
                 elif name == "Track":
                     name = "tracknumber"
                     track = value.split("/")
                     if len(track) > 1:
                         metadata["totaltracks"] = track[1]
                         value = track[0]
                 elif name == "Disc":
                     name = "discnumber"
                     disc = value.split("/")
                     if len(disc) > 1:
                         metadata["totaldiscs"] = disc[1]
                         value = disc[0]
                 elif name == 'Performer' or name == 'Comment':
                     name = name.lower() + ':'
                     if value.endswith(')'):
                         start = value.rfind(' (')
                         if start > 0:
                             name += value[start + 2:-1]
                             value = value[:start]
                 elif name in self.__translate:
                     name = self.__translate[name]
                 else:
                     name = name.lower()
                 metadata.add(name, value)
     self._info(metadata, file)
     return metadata
Exemplo n.º 8
0
 def _load(self, filename):
     log.debug("Loading file %r", filename)
     file = self._File(encode_filename(filename))
     metadata = Metadata()
     if file.tags:
         for origname, values in file.tags.items():
             if origname.lower().startswith("cover art") and values.kind == mutagen.apev2.BINARY:
                 if '\0' in values.value:
                     descr, data = values.value.split('\0', 1)
                     mime = mimetype.get_from_data(data, descr, 'image/jpeg')
                     metadata.make_and_add_image(mime, data)
             # skip EXTERNAL and BINARY values
             if values.kind != mutagen.apev2.TEXT:
                 continue
             for value in values:
                 name = origname
                 if name == "Year":
                     name = "date"
                     value = sanitize_date(value)
                 elif name == "Track":
                     name = "tracknumber"
                     track = value.split("/")
                     if len(track) > 1:
                         metadata["totaltracks"] = track[1]
                         value = track[0]
                 elif name == "Disc":
                     name = "discnumber"
                     disc = value.split("/")
                     if len(disc) > 1:
                         metadata["totaldiscs"] = disc[1]
                         value = disc[0]
                 elif name == 'Performer' or name == 'Comment':
                     name = name.lower() + ':'
                     if value.endswith(')'):
                         start = value.rfind(' (')
                         if start > 0:
                             name += value[start + 2:-1]
                             value = value[:start]
                 elif name in self.__translate:
                     name = self.__translate[name]
                 else:
                     name = name.lower()
                 metadata.add(name, value)
     self._info(metadata, file)
     return metadata
Exemplo n.º 9
0
def _coverart_downloaded(album, metadata, release, try_list, coverinfos, data, http, error):
    album._requests -= 1

    if error or len(data) < 1000:
        if error:
            _coverart_http_error(album, http)
    else:
        QObject.tagger.window.set_statusbar_message(
            N_("Cover art of type '%(type)s' downloaded for %(albumid)s from %(host)s"),
            {
                'type': coverinfos['type'].title(),
                'albumid': album.id,
                'host': coverinfos['host']
            }
        )
        mime = mimetype.get_from_data(data, default="image/jpeg")

        try:
            metadata.make_and_add_image(mime, data,
                                        imagetype=coverinfos['type'],
                                        comment=coverinfos['desc'])
            for track in album._new_tracks:
                track.metadata.make_and_add_image(mime, data,
                                                  imagetype=coverinfos['type'],
                                                  comment=coverinfos['desc'])
        except (IOError, OSError) as e:
            album.error_append(e.message)
            album._finalize_loading(error=True)
            # It doesn't make sense to store/download more images if we can't
            # save them in the temporary folder, abort.
            return

    # If the image already was a front image, there might still be some
    # other front images in the try_list - remove them.
    if is_front_image(coverinfos):
        for item in try_list[:]:
            if is_front_image(item) and 'archive.org' not in item['host']:
                # Hosts other than archive.org only provide front images
                try_list.remove(item)
    _walk_try_list(album, metadata, release, try_list)