kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
rodzic
142008cbed
commit
91f9b3af9f
|
@ -214,7 +214,10 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
def get_is_playable(self, obj):
|
def get_is_playable(self, obj):
|
||||||
try:
|
try:
|
||||||
return any(
|
return any(
|
||||||
[bool(getattr(t, "playable_uploads", [])) for t in obj.tracks.all()]
|
[
|
||||||
|
bool(getattr(t, "is_playable_by_actor", None))
|
||||||
|
for t in obj.tracks.all()
|
||||||
|
]
|
||||||
)
|
)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -185,9 +185,7 @@ class AlbumViewSet(
|
||||||
queryset = (
|
queryset = (
|
||||||
models.Album.objects.all()
|
models.Album.objects.all()
|
||||||
.order_by("-creation_date")
|
.order_by("-creation_date")
|
||||||
.prefetch_related(
|
.prefetch_related("artist__channel", "attributed_to", "attachment_cover")
|
||||||
"artist__channel", "attributed_to", "attachment_cover", "tracks"
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
serializer_class = serializers.AlbumSerializer
|
serializer_class = serializers.AlbumSerializer
|
||||||
permission_classes = [oauth_permissions.ScopePermission]
|
permission_classes = [oauth_permissions.ScopePermission]
|
||||||
|
@ -223,8 +221,14 @@ class AlbumViewSet(
|
||||||
queryset = queryset.exclude(artist__channel=None).filter(
|
queryset = queryset.exclude(artist__channel=None).filter(
|
||||||
artist__attributed_to=self.request.user.actor
|
artist__attributed_to=self.request.user.actor
|
||||||
)
|
)
|
||||||
qs = queryset.prefetch_related(TAG_PREFETCH)
|
|
||||||
return qs
|
tracks = models.Track.objects.all().prefetch_related("album")
|
||||||
|
tracks = tracks.annotate_playable_by_actor(
|
||||||
|
utils.get_actor_from_request(self.request)
|
||||||
|
)
|
||||||
|
return queryset.prefetch_related(
|
||||||
|
Prefetch("tracks", queryset=tracks), TAG_PREFETCH
|
||||||
|
)
|
||||||
|
|
||||||
libraries = action(methods=["get"], detail=True)(
|
libraries = action(methods=["get"], detail=True)(
|
||||||
get_libraries(filter_uploads=lambda o, uploads: uploads.filter(track__album=o))
|
get_libraries(filter_uploads=lambda o, uploads: uploads.filter(track__album=o))
|
||||||
|
|
|
@ -58,7 +58,12 @@ def test_album_list_serializer(api_request, factories, logged_in_api_client):
|
||||||
).track
|
).track
|
||||||
album = track.album
|
album = track.album
|
||||||
request = api_request.get("/")
|
request = api_request.get("/")
|
||||||
qs = album.__class__.objects.with_tracks_count()
|
|
||||||
|
tracks = models.Track.objects.all().prefetch_related("album")
|
||||||
|
tracks = tracks.annotate_playable_by_actor(None)
|
||||||
|
|
||||||
|
qs = album.__class__.objects.with_tracks_count().annotate_playable_by_actor(None)
|
||||||
|
qs = qs.prefetch_related(Prefetch("tracks", queryset=tracks))
|
||||||
serializer = serializers.AlbumSerializer(
|
serializer = serializers.AlbumSerializer(
|
||||||
qs, many=True, context={"request": request}
|
qs, many=True, context={"request": request}
|
||||||
)
|
)
|
||||||
|
|
Ładowanie…
Reference in New Issue