diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index b8009fda3c262d0c629696da9998eeda668b4188..0c1220e408ff9c3947ca376f7a2cf49c7dd4a611 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -55,19 +55,21 @@ def update_album_cover( ) -IMAGE_TYPES = [("jpg", "image/jpeg"), ("png", "image/png")] +IMAGE_TYPES = [("jpg", "image/jpeg"), ("jpeg", "image/jpeg"), ("png", "image/png")] +FOLDER_IMAGE_NAMES = ["cover", "folder"] def get_cover_from_fs(dir_path): if os.path.exists(dir_path): - for e, m in IMAGE_TYPES: - cover_path = os.path.join(dir_path, "cover.{}".format(e)) - if not os.path.exists(cover_path): - logger.debug("Cover %s does not exists", cover_path) - continue - with open(cover_path, "rb") as c: - logger.info("Found cover at %s", cover_path) - return {"mimetype": m, "content": c.read()} + for name in FOLDER_IMAGE_NAMES: + for e, m in IMAGE_TYPES: + cover_path = os.path.join(dir_path, "{}.{}".format(name, e)) + if not os.path.exists(cover_path): + logger.debug("Cover %s does not exists", cover_path) + continue + with open(cover_path, "rb") as c: + logger.info("Found cover at %s", cover_path) + return {"mimetype": m, "content": c.read()} @celery.app.task(name="music.start_library_scan") diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 51ea71635b166307db39173e43965d4f859d8378..439c74b728320a98ab7d43ba3ea0b0e867fd12a5 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -843,3 +843,34 @@ def test_update_library_entity(factories, mocker): artist.refresh_from_db() assert artist.name == "Hello" + + +@pytest.mark.parametrize( + "name, ext, mimetype", + [ + ("cover", "png", "image/png"), + ("cover", "jpg", "image/jpeg"), + ("cover", "jpeg", "image/jpeg"), + ("folder", "png", "image/png"), + ("folder", "jpg", "image/jpeg"), + ("folder", "jpeg", "image/jpeg"), + ], +) +def test_get_cover_from_fs(name, ext, mimetype, tmpdir): + cover_path = os.path.join(tmpdir, "{}.{}".format(name, ext)) + content = "Hello" + with open(cover_path, "w") as f: + f.write(content) + + expected = {"mimetype": mimetype, "content": content.encode()} + assert tasks.get_cover_from_fs(tmpdir) == expected + + +@pytest.mark.parametrize("name", ["cover.gif", "folder.gif"]) +def test_get_cover_from_fs_ignored(name, tmpdir): + cover_path = os.path.join(tmpdir, name) + content = "Hello" + with open(cover_path, "w") as f: + f.write(content) + + assert tasks.get_cover_from_fs(tmpdir) is None diff --git a/changes/changelog.d/898.enhancement b/changes/changelog.d/898.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..80476e4a3d20a520df534cfc6178799026c079e2 --- /dev/null +++ b/changes/changelog.d/898.enhancement @@ -0,0 +1 @@ +Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898)