コード例 #1
0
 def _test_invalid_picture(self, invalid_picture_data):
     png_data = create_fake_png(b'x')
     tags = {
         'WM/Picture': [
             ASFByteArrayAttribute(invalid_picture_data),
             ASFByteArrayAttribute(asf.pack_image(
                 "image/png", png_data))
         ]
     }
     save_raw(self.filename, tags)
     metadata = load_metadata(self.filename)
     self.assertEqual(1, len(metadata.images))
     self.assertEqual(png_data, metadata.images[0].data)
コード例 #2
0
    def _save(self, filename, metadata, settings):
        self.log.debug("Saving file %r", filename)
        file = ASF(encode_filename(filename))

        if settings['clear_existing_tags']:
            file.tags.clear()
        if settings['save_images_to_tags']:
            cover = []
            for mime, data in metadata.images:
                tag_data = pack_image(mime, data, 3)
                cover.append(ASFByteArrayAttribute(tag_data))
            if cover:
                file.tags['WM/Picture'] = cover

        for name, values in metadata.rawitems():
            if name.startswith('lyrics:'):
                name = 'lyrics'
            elif name == '~rating':
                values[0] = int(
                    values[0]) * 99 / (settings['rating_steps'] - 1)
            if name not in self.__TRANS:
                continue
            name = self.__TRANS[name]
            file.tags[name] = map(unicode, values)
        file.save()
コード例 #3
0
ファイル: asf.py プロジェクト: yangsensen/picard
    def _save(self, filename, metadata):
        log.debug("Saving file %r", filename)
        file = ASF(encode_filename(filename))

        if config.setting['clear_existing_tags']:
            file.tags.clear()
        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:'):
                name = 'lyrics'
            elif name == '~rating':
                values[0] = int(
                    values[0]) * 99 / (config.setting['rating_steps'] - 1)
            elif name == 'discnumber' and 'totaldiscs' in metadata:
                values[0] = '%s/%s' % (metadata['discnumber'],
                                       metadata['totaldiscs'])
            if name not in self.__TRANS:
                continue
            name = self.__TRANS[name]
            file.tags[name] = map(unicode, values)
        file.save()
コード例 #4
0
ファイル: asf.py プロジェクト: kewpdawg/picard
    def _save(self, filename, metadata):
        log.debug("Saving file %r", filename)
        file = ASF(encode_filename(filename))

        if config.setting['clear_existing_tags']:
            file.tags.clear()
        if config.setting['save_images_to_tags']:
            cover = []
            for image in metadata.images:
                if not save_this_image_to_tags(image):
                    continue
                tag_data = pack_image(image["mime"], image["data"],
                                      image_type_as_id3_num(image['type']),
                                      image['desc'])
                cover.append(ASFByteArrayAttribute(tag_data))
            if cover:
                file.tags['WM/Picture'] = cover

        for name, values in metadata.rawitems():
            if name.startswith('lyrics:'):
                name = 'lyrics'
            elif name == '~rating':
                values[0] = int(
                    values[0]) * 99 / (config.setting['rating_steps'] - 1)
            if name not in self.__TRANS:
                continue
            name = self.__TRANS[name]
            file.tags[name] = map(unicode, values)
        file.save()
コード例 #5
0
ファイル: test_asf.py プロジェクト: offspring/mutagen
 def test_ASFByteArrayAttribute_dunder(self):
     attr = ASFByteArrayAttribute(data=b"\xff")
     self.assertEqual(bytes(attr), b"\xff")
     self.assertEqual(text_type(attr), u"[binary data (1 bytes)]")
     if PY3:
         self.assertEqual(repr(attr), r"ASFByteArrayAttribute(b'\xff')")
     else:
         self.assertEqual(repr(attr), r"ASFByteArrayAttribute('\xff')")
     self.assertRaises(TypeError, int, attr)
コード例 #6
0
    def album_art(self, art_location: str):
        with open(art_location, 'rb') as image:
            image_data = image.read()

        # https://github.com/beetbox/mediafile/blob/master/mediafile.py#L231
        value = struct.pack('<bi', 3, len(image_data))
        value += file_type(art_location).encode('utf-16-le') + b'\x00\x00'
        value += 'Cover'.encode('utf-16-le') + b'\x00\x00'
        value += image_data

        self.file['WM/Picture'] = ASFByteArrayAttribute(value=value)
        return self
コード例 #7
0
def pic_to_bin(image):
    data = image[util.DATA]
    mime = image.get(util.MIMETYPE)
    if not mime:
        mime = get_mime(data)
        if not mime:
            return
    type = image.get(util.IMAGETYPE, 3)
    description = image.get(util.DESCRIPTION, u'')
    tag_data = struct.pack("<bi", type, len(data))
    tag_data += mime.encode("utf-16-le") + "\x00\x00"
    tag_data += description.encode("utf-16-le") + "\x00\x00"
    tag_data += data
    return ASFByteArrayAttribute(tag_data)
コード例 #8
0
ファイル: asf.py プロジェクト: kellnerd/picard
    def _save(self, filename, metadata):
        log.debug("Saving file %r", filename)
        config = get_config()
        file = ASF(encode_filename(filename))
        tags = file.tags

        if config.setting['clear_existing_tags']:
            cover = tags['WM/Picture'] if config.setting[
                'preserve_images'] else None
            tags.clear()
            if cover:
                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:
            tags['WM/Picture'] = cover
        for name, values in metadata.rawitems():
            if name.startswith('lyrics:'):
                name = 'lyrics'
            elif name == '~rating':
                values = [
                    int(values[0]) * 99 // (config.setting['rating_steps'] - 1)
                ]
            elif name == 'discnumber' and 'totaldiscs' in metadata:
                values = [
                    '%s/%s' % (metadata['discnumber'], metadata['totaldiscs'])
                ]
            if name in self.__TRANS:
                name = self.__TRANS[name]
            elif name in self.__TRANS_CI:
                if name in self.__casemap:
                    name = self.__casemap[name]
                else:
                    name = self.__TRANS_CI[name]
                delall_ci(tags, name)
            else:
                continue
            tags[name] = values

        self._remove_deleted_tags(metadata, tags)

        file.save()
コード例 #9
0
ファイル: test_asf.py プロジェクト: offspring/mutagen
 def test_ASFByteArrayAttribute_compat(self):
     ba = ASFByteArrayAttribute()
     ba.value = b"\xff"
     self.assertEqual(ba._render(), b"\xff")
コード例 #10
0
ファイル: test_asf.py プロジェクト: offspring/mutagen
 def test_ASFByteArrayAttribute(self):
     self.assertRaises(TypeError, ASFByteArrayAttribute, u"foo")
     self.assertEqual(ASFByteArrayAttribute(data=b"\xff").value, b"\xff")