diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py index 519dd8b5eb1aefe04c01c51d2d859452c02c316a..3aa643e56f4f3774b00d9aa2b2eb1905ace28fef 100644 --- a/api/funkwhale_api/music/metadata.py +++ b/api/funkwhale_api/music/metadata.py @@ -97,6 +97,37 @@ CONF = { }, } }, + 'OggTheora': { + 'getter': lambda f, k: f[k][0], + 'fields': { + 'track_number': { + 'field': 'TRACKNUMBER', + 'to_application': convert_track_number + }, + 'title': { + 'field': 'title' + }, + 'artist': { + 'field': 'artist' + }, + 'album': { + 'field': 'album' + }, + 'date': { + 'field': 'date', + 'to_application': lambda v: arrow.get(v).date() + }, + 'musicbrainz_albumid': { + 'field': 'MusicBrainz Album Id' + }, + 'musicbrainz_artistid': { + 'field': 'MusicBrainz Artist Id' + }, + 'musicbrainz_recordingid': { + 'field': 'MusicBrainz Track Id' + }, + } + }, 'MP3': { 'getter': get_id3_tag, 'fields': { diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index e7b9012b609232f890e96092b0bc0d8331722063..bacec07fb55da8695411437e9e6b08133512d5b4 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -24,6 +24,22 @@ def test_can_get_metadata_from_ogg_file(field, value): assert data.get(field) == value +@pytest.mark.parametrize('field,value', [ + ('title', 'Drei Kreuze (dass wir hier sind)'), + ('artist', 'Die Toten Hosen'), + ('album', 'Ballast der Republik'), + ('date', datetime.date(2012, 5, 4)), + ('track_number', 1), + ('musicbrainz_albumid', uuid.UUID('1f0441ad-e609-446d-b355-809c445773cf')), + ('musicbrainz_recordingid', uuid.UUID('124d0150-8627-46bc-bc14-789a3bc960c8')), + ('musicbrainz_artistid', uuid.UUID('c3bc80a6-1f4a-4e17-8cf0-6b1efe8302f1')), +]) +def test_can_get_metadata_from_ogg_theora_file(field, value): + path = os.path.join(DATA_DIR, 'test_theora.ogg') + data = metadata.Metadata(path) + + assert data.get(field) == value + @pytest.mark.parametrize('field,value', [ ('title', 'Bend'), diff --git a/api/tests/music/test_theora.ogg b/api/tests/music/test_theora.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3aa7117387a87115d9316f9d34205254381c95ec Binary files /dev/null and b/api/tests/music/test_theora.ogg differ diff --git a/changes/changelog.d/216.enhancement b/changes/changelog.d/216.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..0ed9dec4860fd71ce2652fa6721e191eeca41b1c --- /dev/null +++ b/changes/changelog.d/216.enhancement @@ -0,0 +1 @@ +Added Support for OggTheora in import.