diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py index ea914b89a..ffce86943 100644 --- a/api/funkwhale_api/music/metadata.py +++ b/api/funkwhale_api/music/metadata.py @@ -253,7 +253,7 @@ CONF = { "comment": {"field": "comment"}, }, }, - "MP3": { + "ID3": { "getter": get_id3_tag, "clean_pictures": clean_id3_pictures, "fields": { @@ -331,6 +331,9 @@ CONF = { }, } +CONF["MP3"] = CONF["ID3"] +CONF["AIFF"] = CONF["ID3"] + ALL_FIELDS = [ "position", "disc_number", diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index 17b5b7292..b863f416d 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -59,6 +59,10 @@ AUDIO_EXTENSIONS_AND_MIMETYPE = [ ("m4a", "audio/x-m4a"), ("flac", "audio/x-flac"), ("flac", "audio/flac"), + ("aif", "audio/aiff"), + ("aif", "audio/x-aiff"), + ("aiff", "audio/aiff"), + ("aiff", "audio/x-aiff"), ] EXTENSION_TO_MIMETYPE = {ext: mt for ext, mt in AUDIO_EXTENSIONS_AND_MIMETYPE} diff --git a/api/tests/music/test.aiff b/api/tests/music/test.aiff new file mode 100644 index 000000000..2bf66fdad Binary files /dev/null and b/api/tests/music/test.aiff differ diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index 28c39dd59..061840456 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -150,10 +150,38 @@ def test_can_get_metadata_from_id3_mp3_file(field, value): assert str(data.get(field)) == value +@pytest.mark.parametrize( + "field,value", + [ + ("title", "Bend"), + ("artist", "Binärpilot"), + ("album_artist", "Binärpilot"), + # ("artists", "Binärpilot; Another artist"), # FW does not properly extract multi-value artists from ID3 + ("album", "You Can't Stop Da Funk"), + ("date", "2006-02-07"), + ("position", "2/4"), + ("disc_number", "1/1"), + ("musicbrainz_albumid", "ce40cdb1-a562-4fd8-a269-9269f98d4124"), + ("mbid", "f269d497-1cc0-4ae4-a0c4-157ec7d73fcb"), + ("musicbrainz_artistid", "9c6bddde-6228-4d9f-ad0d-03f6fcb19e13"), + ("musicbrainz_albumartistid", "9c6bddde-6228-4d9f-ad0d-03f6fcb19e13"), + ("license", "https://creativecommons.org/licenses/by-nc-nd/2.5/"), + ("copyright", "Someone"), + ("comment", "Hello there"), + ], +) +def test_can_get_metadata_from_id3_aiff_file(field, value): + path = os.path.join(DATA_DIR, "test.aiff") + data = metadata.Metadata(path) + + assert str(data.get(field)) == value + + @pytest.mark.parametrize( "name", [ "test.mp3", + "test.aiff", "with_other_picture.mp3", "sample.flac", "with_cover.ogg", diff --git a/changes/changelog.d/1243.enhancement b/changes/changelog.d/1243.enhancement new file mode 100644 index 000000000..65d47c7fc --- /dev/null +++ b/changes/changelog.d/1243.enhancement @@ -0,0 +1 @@ +Support AIFF file format (#1243) \ No newline at end of file diff --git a/front/src/store/ui.js b/front/src/store/ui.js index ac679efff..f7717685d 100644 --- a/front/src/store/ui.js +++ b/front/src/store/ui.js @@ -11,7 +11,7 @@ export default { lastDate: new Date(), maxMessages: 100, messageDisplayDuration: 5 * 1000, - supportedExtensions: ["flac", "ogg", "mp3", "opus", "aac", "m4a"], + supportedExtensions: ["flac", "ogg", "mp3", "opus", "aac", "m4a", "aiff", "aif"], messages: [], theme: 'light', window: {