diff --git a/beets/mediafile.py b/beets/mediafile.py index 106e0afc6..ae97e46cb 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -691,7 +691,6 @@ class ASFImageStorageStyle(ListStorageStyle): def __init__(self): super(ASFImageStorageStyle, self).__init__(key='WM/Picture') - self.as_type = str def fetch(self, mutagen_file): if 'WM/Picture' not in mutagen_file: @@ -700,19 +699,18 @@ class ASFImageStorageStyle(ListStorageStyle): pictures = [] for picture in mutagen_file['WM/Picture']: try: - pictures.append(_unpack_asf_image(picture.value)[1]) + mime, data, type, desc = _unpack_asf_image(picture.value) except: - pass + continue + pictures.append(TagImage(data, desc=desc, type=type)) return pictures - def store(self, mutagen_file, images): - if 'WM/Picture' in mutagen_file: - del mutagen_file['WM/Picture'] - - for image in images: - pic = mutagen.asf.ASFByteArrayAttribute() - pic.value = _pack_asf_image(_image_mime_type(image), image) - mutagen_file['WM/Picture'] = [pic] + def serialize(self, image): + pic = mutagen.asf.ASFByteArrayAttribute() + pic.value = _pack_asf_image(image.mime_type, image.data, + type=image.type_index or 3, + description=image.desc or u'') + return pic class VorbisImageStorageStyle(ListStorageStyle): @@ -971,7 +969,7 @@ class CoverArtField(MediaField): ) def __get__(self, mediafile, _): - if mediafile.type in ['mp3', 'flac'] + VorbisImageStorageStyle.formats: + if mediafile.type in ['mp3', 'flac', 'asf'] + VorbisImageStorageStyle.formats: try: return mediafile.images[0].data except IndexError: @@ -980,7 +978,7 @@ class CoverArtField(MediaField): return style.get(mediafile.mgfile) def __set__(self, mediafile, data): - if mediafile.type in ['mp3', 'flac'] + VorbisImageStorageStyle.formats: + if mediafile.type in ['mp3', 'flac', 'asf'] + VorbisImageStorageStyle.formats: if data: mediafile.images = [TagImage(data=data)] else: diff --git a/test/rsrc/image.wma b/test/rsrc/image.wma new file mode 100644 index 000000000..2158978f3 Binary files /dev/null and b/test/rsrc/image.wma differ diff --git a/test/test_mediafile.py b/test/test_mediafile.py index 8e51ab954..4cfb9cdbf 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -115,7 +115,11 @@ class ImageStructureTestMixin(object): mediafile = MediaFile(mediafile.path) self.assertEqual(len(mediafile.images), 3) - self.assertExtendedImageAttributes(mediafile.images[2], + + # WMA does not preserve the order, so we have to work around this + image = filter(lambda i: i.desc == 'the composer', + mediafile.images)[0] + self.assertExtendedImageAttributes(image, desc='the composer', type=TagImage.TYPES.composer) @unittest.skip('editing list by reference is not implemented yet') @@ -590,7 +594,8 @@ class MusepackTest(ReadWriteTestBase, GenreListTestMixin, unittest.TestCase): 'bitdepth': 0, 'channels': 2, } -class WMATest(ReadWriteTestBase, unittest.TestCase): +class WMATest(ReadWriteTestBase, ExtendedImageStructureTestMixin, + unittest.TestCase): extension = 'wma' audio_properties = { 'length': 1.0,