mirror of
https://github.com/beetbox/beets.git
synced 2025-12-16 05:34:47 +01:00
mediafile: Test deleting images and implement it for MP3s
This commit is contained in:
parent
7c08830113
commit
9d3729dc5e
3 changed files with 30 additions and 12 deletions
|
|
@ -821,6 +821,9 @@ class MP3ImageStorageStyle(ListStorageStyle, MP3StorageStyle):
|
|||
def store(self, mutagen_file, frames):
|
||||
mutagen_file.tags.setall(self.key, frames)
|
||||
|
||||
def delete(self, mutagen_file):
|
||||
mutagen_file.tags.delall(self.key)
|
||||
|
||||
def serialize(self, image):
|
||||
"""Return an APIC frame populated with data from ``image``.
|
||||
"""
|
||||
|
|
@ -1257,7 +1260,7 @@ class CoverArtField(MediaField):
|
|||
delattr(mediafile, 'images')
|
||||
|
||||
|
||||
class ImageListField(MediaField):
|
||||
class ImageListField(ListMediaField):
|
||||
"""Descriptor to access the list of images embedded in tags.
|
||||
|
||||
The getter returns a list of `Image` instances obtained from
|
||||
|
|
@ -1275,18 +1278,9 @@ class ImageListField(MediaField):
|
|||
VorbisImageStorageStyle(),
|
||||
FlacImageStorageStyle(),
|
||||
APEv2ImageStorageStyle(),
|
||||
out_type=Image,
|
||||
)
|
||||
|
||||
def __get__(self, mediafile, _):
|
||||
images = []
|
||||
for style in self.styles(mediafile.mgfile):
|
||||
images.extend(style.get_list(mediafile.mgfile))
|
||||
return images
|
||||
|
||||
def __set__(self, mediafile, images):
|
||||
for style in self.styles(mediafile.mgfile):
|
||||
style.set_list(mediafile.mgfile, images)
|
||||
|
||||
|
||||
# MediaFile is a collection of fields.
|
||||
|
||||
|
|
|
|||
|
|
@ -276,5 +276,5 @@ def clear(lib, query):
|
|||
displayable_path(item.path), exc
|
||||
))
|
||||
continue
|
||||
mf.art = None
|
||||
del mf.art
|
||||
mf.save()
|
||||
|
|
|
|||
|
|
@ -74,6 +74,20 @@ class ArtTestMixin(object):
|
|||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertEqual(mediafile.art, self.jpg_data)
|
||||
|
||||
def test_delete_art(self):
|
||||
mediafile = self._mediafile_fixture('empty')
|
||||
mediafile.art = self.jpg_data
|
||||
mediafile.save()
|
||||
|
||||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertIsNotNone(mediafile.art)
|
||||
|
||||
del mediafile.art
|
||||
mediafile.save()
|
||||
|
||||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertIsNone(mediafile.art)
|
||||
|
||||
|
||||
class ImageStructureTestMixin(ArtTestMixin):
|
||||
"""Test reading and writing multiple image tags.
|
||||
|
|
@ -134,6 +148,16 @@ class ImageStructureTestMixin(ArtTestMixin):
|
|||
image, desc='the composer', type=ImageType.composer
|
||||
)
|
||||
|
||||
def test_delete_image_structures(self):
|
||||
mediafile = self._mediafile_fixture('image')
|
||||
self.assertEqual(len(mediafile.images), 2)
|
||||
|
||||
del mediafile.images
|
||||
mediafile.save()
|
||||
|
||||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertEqual(len(mediafile.images), 0)
|
||||
|
||||
def assertExtendedImageAttributes(self, image, **kwargs):
|
||||
"""Ignore extended image attributes in the base tests.
|
||||
"""
|
||||
|
|
|
|||
Loading…
Reference in a new issue