From 0d128d40d5df5e560e5243fa476ec4bc9a14b40e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
Date: Wed, 29 Aug 2018 16:57:05 +0200
Subject: [PATCH] Add support for Opus files
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This adds support for reading metadata from Opus files. The metadata config
is copied from OggVorbis with just the 'track' field name changed.

Also make sure get_audio_file_data() in music/utils.py doesn't crash if no
bitrate information is set, since mutagen doesn't add a bitrate to Opus
info objects.

Fixes #244.

Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
---
 api/funkwhale_api/music/metadata.py | 16 ++++++++++++++++
 api/funkwhale_api/music/utils.py    |  2 +-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py
index 9aa08820a..4c754ae05 100644
--- a/api/funkwhale_api/music/metadata.py
+++ b/api/funkwhale_api/music/metadata.py
@@ -114,6 +114,22 @@ VALIDATION = {
 }
 
 CONF = {
+    "OggOpus": {
+        "getter": lambda f, k: f[k][0],
+        "fields": {
+            "track_number": {
+                "field": "TRACKNUMBER",
+                "to_application": convert_track_number,
+            },
+            "title": {},
+            "artist": {},
+            "album": {},
+            "date": {"field": "date", "to_application": get_date},
+            "musicbrainz_albumid": {},
+            "musicbrainz_artistid": {},
+            "musicbrainz_recordingid": {"field": "musicbrainz_trackid"},
+        },
+    },
     "OggVorbis": {
         "getter": lambda f, k: f[k][0],
         "fields": {
diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py
index 30f62f348..92187d69a 100644
--- a/api/funkwhale_api/music/utils.py
+++ b/api/funkwhale_api/music/utils.py
@@ -54,7 +54,7 @@ def get_audio_file_data(f):
     if not data:
         return
     d = {}
-    d["bitrate"] = data.info.bitrate
+    d["bitrate"] = getattr(data.info, "bitrate", 0)
     d["length"] = data.info.length
 
     return d
-- 
GitLab