From 5e631440f8f46a654808d8d6fb0c3b48a9445327 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Fri, 28 Sep 2018 20:46:04 +0200 Subject: [PATCH 1/4] Fixed display error with menu on top of modal background --- front/src/App.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/App.vue b/front/src/App.vue index d96e91d92..f4ec3b3f8 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -306,7 +306,7 @@ html, body { left: 350px; right: 0px; top: 0px; - z-index: 2000; + z-index: 99; } background-color: white; .item { From 54972e489b539906fc706f9bbada1c4095f592fa Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Fri, 28 Sep 2018 20:46:18 +0200 Subject: [PATCH 2/4] Fixed unplayable playlists (bis repetita) --- api/funkwhale_api/playlists/models.py | 12 ++++-------- api/funkwhale_api/playlists/serializers.py | 14 ++++++-------- api/funkwhale_api/playlists/views.py | 10 ++++++---- front/src/views/playlists/Detail.vue | 2 +- 4 files changed, 17 insertions(+), 21 deletions(-) diff --git a/api/funkwhale_api/playlists/models.py b/api/funkwhale_api/playlists/models.py index 510620334..313b0cfc8 100644 --- a/api/funkwhale_api/playlists/models.py +++ b/api/funkwhale_api/playlists/models.py @@ -147,14 +147,10 @@ class Playlist(models.Model): class PlaylistTrackQuerySet(models.QuerySet): - def for_nested_serialization(self): - return ( - self.select_related() - .select_related("track__album__artist") - .prefetch_related( - "track__tags", "track__uploads", "track__artist__albums__tracks__tags" - ) - ) + def for_nested_serialization(self, actor=None): + tracks = music_models.Track.objects.annotate_playable_by_actor(actor) + tracks = tracks.select_related("artist", "album__artist") + return self.prefetch_related(models.Prefetch("track", queryset=tracks, to_attr='_prefetched_track')) def annotate_playable_by_actor(self, actor): tracks = ( diff --git a/api/funkwhale_api/playlists/serializers.py b/api/funkwhale_api/playlists/serializers.py index 40a1c62b5..c1ca84e15 100644 --- a/api/funkwhale_api/playlists/serializers.py +++ b/api/funkwhale_api/playlists/serializers.py @@ -10,18 +10,16 @@ from . import models class PlaylistTrackSerializer(serializers.ModelSerializer): - track = TrackSerializer() - is_playable = serializers.SerializerMethodField() + # track = TrackSerializer() + track = serializers.SerializerMethodField() class Meta: model = models.PlaylistTrack - fields = ("id", "track", "playlist", "index", "creation_date", "is_playable") + fields = ("id", "track", "playlist", "index", "creation_date") - def get_is_playable(self, obj): - try: - return bool(obj.is_playable_by_actor) - except AttributeError: - return None + def get_track(self, o): + track = o._prefetched_track if hasattr(o, "_prefetched_track") else o.track + return TrackSerializer(track).data class PlaylistTrackWriteSerializer(serializers.ModelSerializer): diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py index 0c90335a9..4934b92a0 100644 --- a/api/funkwhale_api/playlists/views.py +++ b/api/funkwhale_api/playlists/views.py @@ -39,7 +39,9 @@ class PlaylistViewSet( @detail_route(methods=["get"]) def tracks(self, request, *args, **kwargs): playlist = self.get_object() - plts = playlist.playlist_tracks.all().for_nested_serialization() + plts = playlist.playlist_tracks.all().for_nested_serialization( + music_utils.get_actor_from_request(request) + ) serializer = serializers.PlaylistTrackSerializer(plts, many=True) data = {"count": len(plts), "results": serializer.data} return Response(data, status=200) @@ -59,7 +61,7 @@ class PlaylistViewSet( plts = ( models.PlaylistTrack.objects.filter(pk__in=ids) .order_by("index") - .for_nested_serialization() + .for_nested_serialization(music_utils.get_actor_from_request(request)) ) serializer = serializers.PlaylistTrackSerializer(plts, many=True) data = {"count": len(plts), "results": serializer.data} @@ -97,7 +99,7 @@ class PlaylistTrackViewSet( ): serializer_class = serializers.PlaylistTrackSerializer - queryset = models.PlaylistTrack.objects.all().for_nested_serialization() + queryset = models.PlaylistTrack.objects.all() permission_classes = [ permissions.ConditionalAuthentication, permissions.OwnerPermission, @@ -118,7 +120,7 @@ class PlaylistTrackViewSet( lookup_field="playlist__privacy_level", user_field="playlist__user", ) - ).annotate_playable_by_actor(music_utils.get_actor_from_request(self.request)) + ).for_nested_serialization(music_utils.get_actor_from_request(self.request)) def perform_destroy(self, instance): instance.delete(update_indexes=True) diff --git a/front/src/views/playlists/Detail.vue b/front/src/views/playlists/Detail.vue index 5e69f4dd1..c1a08a7d1 100644 --- a/front/src/views/playlists/Detail.vue +++ b/front/src/views/playlists/Detail.vue @@ -21,7 +21,7 @@ - Play all + Play all