Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present

This commit is contained in:
Eliot Berriot 2019-01-15 17:14:11 +01:00
parent 11728bbbc4
commit 4a3c21a094
No known key found for this signature in database
GPG Key ID: DD6965E2476E5C27
5 changed files with 20 additions and 8 deletions

View File

@ -409,8 +409,14 @@ class Metadata(object):
return data
def get_picture(self, picture_type="cover_front"):
ptype = getattr(mutagen.id3.PictureType, picture_type.upper())
def get_picture(self, *picture_types):
if not picture_types:
raise ValueError("You need to request at least one picture type")
ptypes = [
getattr(mutagen.id3.PictureType, picture_type.upper())
for picture_type in picture_types
]
try:
pictures = self.get("pictures")
except (UnsupportedTag, TagNotFound):
@ -418,6 +424,9 @@ class Metadata(object):
cleaner = self._conf.get("clean_pictures", lambda v: v)
pictures = cleaner(pictures)
for p in pictures:
if p["type"] == ptype:
return p
if not pictures:
return
for ptype in ptypes:
for p in pictures:
if p["type"] == ptype:
return p

View File

@ -191,7 +191,7 @@ def process_upload(upload):
final_metadata = collections.ChainMap(
additional_data, import_metadata, file_metadata
)
additional_data["cover_data"] = m.get_picture("cover_front")
additional_data["cover_data"] = m.get_picture("cover_front", "other")
additional_data["upload_source"] = upload.source
track = get_track_from_import_metadata(final_metadata)
except UploadImportError as e:

View File

@ -147,14 +147,16 @@ def test_can_get_metadata_from_id3_mp3_file(field, value):
assert data.get(field) == value
@pytest.mark.parametrize("name", ["test.mp3", "sample.flac", "with_cover.ogg"])
@pytest.mark.parametrize(
"name", ["test.mp3", "with_other_picture.mp3", "sample.flac", "with_cover.ogg"]
)
def test_can_get_pictures(name):
path = os.path.join(DATA_DIR, name)
data = metadata.Metadata(path)
pictures = data.get("pictures")
assert len(pictures) == 1
cover_data = data.get_picture("cover_front")
cover_data = data.get_picture("cover_front", "other")
assert cover_data["mimetype"].startswith("image/")
assert len(cover_data["content"]) > 0
assert type(cover_data["content"]) == bytes

Binary file not shown.

View File

@ -0,0 +1 @@
Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present