From 95ba6e1b222d48ef4af1e8abdd17a6b87768e5e1 Mon Sep 17 00:00:00 2001 From: Agate Date: Thu, 6 Aug 2020 16:21:55 +0200 Subject: [PATCH] Give priority to local uploads when playing a track --- api/funkwhale_api/music/serializers.py | 6 +++++- api/tests/music/test_serializers.py | 1 + docs/api/definitions.yml | 5 ++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 1dd17b2bf..bed611c33 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -255,6 +255,7 @@ def serialize_upload(upload): "bitrate": upload.bitrate, "mimetype": upload.mimetype, "extension": upload.extension, + "is_local": federation_utils.is_local(upload.fid), } @@ -305,7 +306,10 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer): def get_uploads(self, obj): uploads = getattr(obj, "playable_uploads", []) - return [serialize_upload(u) for u in sort_uploads_for_listen(uploads)] + # we put local uploads first + uploads = [serialize_upload(u) for u in sort_uploads_for_listen(uploads)] + uploads = sorted(uploads, key=lambda u: u["is_local"], reverse=True) + return list(uploads) def get_tags(self, obj): tagged_items = getattr(obj, "_prefetched_tagged_items", []) diff --git a/api/tests/music/test_serializers.py b/api/tests/music/test_serializers.py index 802f7169c..b1d561cb1 100644 --- a/api/tests/music/test_serializers.py +++ b/api/tests/music/test_serializers.py @@ -354,6 +354,7 @@ def test_serialize_upload(factories): "mimetype": upload.mimetype, "extension": upload.extension, "duration": upload.duration, + "is_local": False, } data = serializers.serialize_upload(upload) diff --git a/docs/api/definitions.yml b/docs/api/definitions.yml index 71b9893c9..a85bff66e 100644 --- a/docs/api/definitions.yml +++ b/docs/api/definitions.yml @@ -513,7 +513,7 @@ Upload: uuid: type: string format: uuid - size:size: + size: type: "integer" format: "int64" example: 278987000 @@ -541,6 +541,9 @@ Upload: type: "string" format: "uri" description: "URL to stream the upload" + is_local: + type: "boolean" + description: "Indicates if the object was initally created locally or on another server" OwnedLibraryCreate: type: "object"