diff --git a/api/funkwhale_api/federation/factories.py b/api/funkwhale_api/federation/factories.py index 0754c4b2f44123e743f9df503c4457b529a17584..891609cbaa30117bbe0eccf802405a89c56b4914 100644 --- a/api/funkwhale_api/federation/factories.py +++ b/api/funkwhale_api/federation/factories.py @@ -233,6 +233,9 @@ class AudioMetadataFactory(factory.Factory): release = factory.LazyAttribute( lambda o: 'https://musicbrainz.org/release/{}'.format(uuid.uuid4()) ) + bitrate = 42 + length = 43 + size = 44 class Meta: model = dict diff --git a/api/funkwhale_api/federation/models.py b/api/funkwhale_api/federation/models.py index d91a00c8b50f5c103fc818f9dea47f6a55cbf9cf..69d0ea9254e7f28c7d54eb683b986a7b9d7b2033 100644 --- a/api/funkwhale_api/federation/models.py +++ b/api/funkwhale_api/federation/models.py @@ -216,3 +216,6 @@ class LibraryTrack(models.Model): for chunk in r.iter_content(chunk_size=512): tmp_file.write(chunk) self.audio_file.save(filename, tmp_file) + + def get_metadata(self, key): + return self.metadata.get(key) diff --git a/api/funkwhale_api/federation/serializers.py b/api/funkwhale_api/federation/serializers.py index 426aabd771b1e5caaaa683648a123ccbe00aa986..8d3dd6379b2f327cfb9b11821b02d34527518171 100644 --- a/api/funkwhale_api/federation/serializers.py +++ b/api/funkwhale_api/federation/serializers.py @@ -688,6 +688,12 @@ class AudioMetadataSerializer(serializers.Serializer): artist = ArtistMetadataSerializer() release = ReleaseMetadataSerializer() recording = RecordingMetadataSerializer() + bitrate = serializers.IntegerField( + required=False, allow_null=True, min_value=0) + size = serializers.IntegerField( + required=False, allow_null=True, min_value=0) + length = serializers.IntegerField( + required=False, allow_null=True, min_value=0) class AudioSerializer(serializers.Serializer): @@ -760,6 +766,9 @@ class AudioSerializer(serializers.Serializer): 'musicbrainz_id': str(track.mbid) if track.mbid else None, 'title': track.title, }, + 'bitrate': instance.bitrate, + 'size': instance.size, + 'length': instance.duration, }, 'url': { 'href': utils.full_url(instance.path), diff --git a/api/tests/federation/test_serializers.py b/api/tests/federation/test_serializers.py index 85208fa490b53dd52b998b24f6f743f9d465d785..f298c61f5fbd36f9516e607d00e60649c4b9b281 100644 --- a/api/tests/federation/test_serializers.py +++ b/api/tests/federation/test_serializers.py @@ -533,7 +533,12 @@ def test_activity_pub_audio_serializer_to_library_track_no_duplicate( def test_activity_pub_audio_serializer_to_ap(factories): - tf = factories['music.TrackFile'](mimetype='audio/mp3') + tf = factories['music.TrackFile']( + mimetype='audio/mp3', + bitrate=42, + duration=43, + size=44, + ) library = actors.SYSTEM_ACTORS['library'].get_actor_instance() expected = { '@context': serializers.AP_CONTEXT, @@ -555,6 +560,9 @@ def test_activity_pub_audio_serializer_to_ap(factories): 'musicbrainz_id': tf.track.mbid, 'title': tf.track.title, }, + 'size': tf.size, + 'length': tf.duration, + 'bitrate': tf.bitrate, }, 'url': { 'href': utils.full_url(tf.path), @@ -599,6 +607,9 @@ def test_activity_pub_audio_serializer_to_ap_no_mbid(factories): 'title': tf.track.title, 'musicbrainz_id': None, }, + 'size': None, + 'length': None, + 'bitrate': None, }, 'url': { 'href': utils.full_url(tf.path),