Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
funkwhale
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
svfusion
funkwhale
Commits
54972e48
Verified
Commit
54972e48
authored
Sep 28, 2018
by
Agate
💬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed unplayable playlists (bis repetita)
parent
5e631440
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
17 additions
and
21 deletions
+17
-21
api/funkwhale_api/playlists/models.py
api/funkwhale_api/playlists/models.py
+4
-8
api/funkwhale_api/playlists/serializers.py
api/funkwhale_api/playlists/serializers.py
+6
-8
api/funkwhale_api/playlists/views.py
api/funkwhale_api/playlists/views.py
+6
-4
front/src/views/playlists/Detail.vue
front/src/views/playlists/Detail.vue
+1
-1
No files found.
api/funkwhale_api/playlists/models.py
View file @
54972e48
...
...
@@ -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
=
(
...
...
api/funkwhale_api/playlists/serializers.py
View file @
54972e48
...
...
@@ -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
):
...
...
api/funkwhale_api/playlists/views.py
View file @
54972e48
...
...
@@ -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
)
front/src/views/playlists/Detail.vue
View file @
54972e48
...
...
@@ -21,7 +21,7 @@
</div>
</h2>
<div
class=
"ui hidden divider"
></div>
<play-button
class=
"orange"
:tracks=
"tracks"
><translate>
Play all
</translate></play-button>
<play-button
class=
"orange"
:
is-playable=
"playlist.is_playable"
:
tracks=
"tracks"
><translate>
Play all
</translate></play-button>
<button
class=
"ui icon button"
v-if=
"$store.state.auth.profile && playlist.user.id === $store.state.auth.profile.id"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment