See #75: can now add multiple tracks to a playlist on creation and update
This commit is contained in:
parent
1674ad919f
commit
7c85d1ca81
|
@ -365,15 +365,24 @@ class SubsonicViewSet(viewsets.GenericViewSet):
|
||||||
else:
|
else:
|
||||||
plt.delete(update_indexes=True)
|
plt.delete(update_indexes=True)
|
||||||
|
|
||||||
try:
|
ids = []
|
||||||
to_add = int(data['songIdToAdd'])
|
for i in data.getlist('songIdToAdd'):
|
||||||
track = music_models.Track.objects.get(pk=to_add)
|
try:
|
||||||
except (TypeError, ValueError, KeyError):
|
ids.append(int(i))
|
||||||
pass
|
except (TypeError, ValueError):
|
||||||
except music_models.Track.DoesNotExist:
|
pass
|
||||||
pass
|
if ids:
|
||||||
else:
|
tracks = music_models.Track.objects.filter(pk__in=ids)
|
||||||
playlist.insert_many([track])
|
by_id = {t.id: t for t in tracks}
|
||||||
|
sorted_tracks = []
|
||||||
|
for i in ids:
|
||||||
|
try:
|
||||||
|
sorted_tracks.append(by_id[i])
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
if sorted_tracks:
|
||||||
|
playlist.insert_many(sorted_tracks)
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'status': 'ok'
|
'status': 'ok'
|
||||||
}
|
}
|
||||||
|
@ -409,15 +418,24 @@ class SubsonicViewSet(viewsets.GenericViewSet):
|
||||||
playlist = request.user.playlists.create(
|
playlist = request.user.playlists.create(
|
||||||
name=name
|
name=name
|
||||||
)
|
)
|
||||||
try:
|
ids = []
|
||||||
to_add = int(data['songId'])
|
for i in data.getlist('songId'):
|
||||||
track = music_models.Track.objects.get(pk=to_add)
|
try:
|
||||||
except (TypeError, ValueError, KeyError):
|
ids.append(int(i))
|
||||||
pass
|
except (TypeError, ValueError):
|
||||||
except music_models.Track.DoesNotExist:
|
pass
|
||||||
pass
|
|
||||||
else:
|
if ids:
|
||||||
playlist.insert_many([track])
|
tracks = music_models.Track.objects.filter(pk__in=ids)
|
||||||
|
by_id = {t.id: t for t in tracks}
|
||||||
|
sorted_tracks = []
|
||||||
|
for i in ids:
|
||||||
|
try:
|
||||||
|
sorted_tracks.append(by_id[i])
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
if sorted_tracks:
|
||||||
|
playlist.insert_many(sorted_tracks)
|
||||||
playlist = request.user.playlists.with_tracks_count().get(
|
playlist = request.user.playlists.with_tracks_count().get(
|
||||||
pk=playlist.pk)
|
pk=playlist.pk)
|
||||||
data = {
|
data = {
|
||||||
|
|
|
@ -318,15 +318,17 @@ def test_delete_playlist(f, db, logged_in_api_client, factories):
|
||||||
def test_create_playlist(f, db, logged_in_api_client, factories):
|
def test_create_playlist(f, db, logged_in_api_client, factories):
|
||||||
url = reverse('api:subsonic-create-playlist')
|
url = reverse('api:subsonic-create-playlist')
|
||||||
assert url.endswith('createPlaylist') is True
|
assert url.endswith('createPlaylist') is True
|
||||||
track = factories['music.Track']()
|
track1 = factories['music.Track']()
|
||||||
|
track2 = factories['music.Track']()
|
||||||
response = logged_in_api_client.get(
|
response = logged_in_api_client.get(
|
||||||
url, {'f': f, 'name': 'hello', 'songId': track.pk})
|
url, {'f': f, 'name': 'hello', 'songId': [track1.pk, track2.pk]})
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
playlist = logged_in_api_client.user.playlists.latest('id')
|
playlist = logged_in_api_client.user.playlists.latest('id')
|
||||||
plt = playlist.playlist_tracks.latest('id')
|
assert playlist.playlist_tracks.count() == 2
|
||||||
|
for i, t in enumerate([track1, track2]):
|
||||||
|
plt = playlist.playlist_tracks.get(track=t)
|
||||||
|
assert plt.index == i
|
||||||
assert playlist.name == 'hello'
|
assert playlist.name == 'hello'
|
||||||
assert plt.index == 0
|
|
||||||
assert plt.track == track
|
|
||||||
qs = playlist.__class__.objects.with_tracks_count()
|
qs = playlist.__class__.objects.with_tracks_count()
|
||||||
assert response.data == {
|
assert response.data == {
|
||||||
'playlist': serializers.get_playlist_detail_data(qs.first())
|
'playlist': serializers.get_playlist_detail_data(qs.first())
|
||||||
|
|
Loading…
Reference in New Issue