mirror of
https://github.com/beetbox/beets.git
synced 2026-01-08 00:45:55 +01:00
Merge branch 'master' of github.com:sampsyo/beets
This commit is contained in:
commit
d97b90d363
4 changed files with 36 additions and 14 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.
|
||||
|
||||
|
|
|
|||
|
|
@ -321,9 +321,10 @@ class EchonestMetadataPlugin(plugins.BeetsPlugin):
|
|||
# Get the file to upload (either by using the file directly or by
|
||||
# transcoding it first).
|
||||
source = item.path
|
||||
tmp = None
|
||||
if item.format not in ALLOWED_FORMATS:
|
||||
if config['echonest']['convert']:
|
||||
source = self.convert(item)
|
||||
tmp = source = self.convert(item)
|
||||
if not source:
|
||||
log.debug(u'echonest: failed to convert file')
|
||||
return
|
||||
|
|
@ -332,7 +333,7 @@ class EchonestMetadataPlugin(plugins.BeetsPlugin):
|
|||
|
||||
if os.stat(item.path).st_size > UPLOAD_MAX_SIZE:
|
||||
if config['echonest']['truncate']:
|
||||
source = self.truncate(item)
|
||||
tmp = source = self.truncate(item)
|
||||
if not source:
|
||||
log.debug(u'echonest: failed to truncate file')
|
||||
return
|
||||
|
|
@ -343,6 +344,9 @@ class EchonestMetadataPlugin(plugins.BeetsPlugin):
|
|||
log.info(u'echonest: uploading file, please be patient')
|
||||
track = self._echofun(pyechonest.track.track_from_filename,
|
||||
filename=source)
|
||||
if tmp is not None:
|
||||
util.remove(tmp)
|
||||
|
||||
if not track:
|
||||
log.debug(u'echonest: failed to upload file')
|
||||
return
|
||||
|
|
|
|||
|
|
@ -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