[db/queue] Support adding non-library items at a given position to the

queue
This commit is contained in:
chme
2018-10-13 08:30:41 +02:00
parent d2390933e9
commit 8d8663e93d
8 changed files with 95 additions and 39 deletions

View File

@@ -997,7 +997,7 @@ map_track_to_queueitem(struct db_queue_item *item, const struct spotify_track *t
}
static int
queue_add_track(const char *uri)
queue_add_track(const char *uri, int position, int *count, int *new_item_id)
{
json_object *response;
struct spotify_track track;
@@ -1015,11 +1015,18 @@ queue_add_track(const char *uri)
map_track_to_queueitem(&item, &track, NULL);
ret = db_queue_add_start(&queue_add_info);
ret = db_queue_add_start(&queue_add_info, position);
if (ret == 0)
{
ret = db_queue_add_item(&queue_add_info, &item);
db_queue_add_end(&queue_add_info, ret);
ret = db_queue_add_end(&queue_add_info, ret);
if (ret == 0)
{
if (count)
*count = queue_add_info.count;
if (new_item_id)
*new_item_id = queue_add_info.new_item_id;
}
}
free_queue_item(&item, 1);
@@ -1061,7 +1068,7 @@ queue_add_album_tracks(json_object *item, int index, int total, void *arg)
}
static int
queue_add_album(const char *uri)
queue_add_album(const char *uri, int position, int *count, int *new_item_id)
{
char *album_endpoint_uri = NULL;
char *endpoint_uri = NULL;
@@ -1073,7 +1080,7 @@ queue_add_album(const char *uri)
json_album = request_endpoint_with_token_refresh(album_endpoint_uri);
parse_metadata_album(json_album, &param.album);
ret = db_queue_add_start(&param.queue_add_info);
ret = db_queue_add_start(&param.queue_add_info, position);
if (ret < 0)
goto out;
@@ -1081,7 +1088,9 @@ queue_add_album(const char *uri)
ret = request_pagingobject_endpoint(endpoint_uri, queue_add_album_tracks, NULL, NULL, true, &param);
db_queue_add_end(&param.queue_add_info, ret);
ret = db_queue_add_end(&param.queue_add_info, ret);
if (ret == 0 && count)
*count = param.queue_add_info.count;
out:
free(album_endpoint_uri);
@@ -1128,13 +1137,13 @@ queue_add_playlist_tracks(json_object *item, int index, int total, void *arg)
}
static int
queue_add_playlist(const char *uri)
queue_add_playlist(const char *uri, int position, int *count, int *new_item_id)
{
char *endpoint_uri;
struct db_queue_add_info queue_add_info;
int ret;
ret = db_queue_add_start(&queue_add_info);
ret = db_queue_add_start(&queue_add_info, position);
if (ret < 0)
return -1;
@@ -1142,7 +1151,9 @@ queue_add_playlist(const char *uri)
ret = request_pagingobject_endpoint(endpoint_uri, queue_add_playlist_tracks, NULL, NULL, true, &queue_add_info);
db_queue_add_end(&queue_add_info, ret);
ret = db_queue_add_end(&queue_add_info, ret);
if (ret == 0 && count)
*count = queue_add_info.count;
free(endpoint_uri);
@@ -1150,21 +1161,21 @@ queue_add_playlist(const char *uri)
}
static int
queue_add(const char *uri)
queue_add(const char *uri, int position, int *count, int *new_item_id)
{
if (strncasecmp(uri, "spotify:track:", strlen("spotify:track:")) == 0)
{
queue_add_track(uri);
queue_add_track(uri, position, count, new_item_id);
return LIBRARY_OK;
}
else if (strncasecmp(uri, "spotify:album:", strlen("spotify:album:")) == 0)
{
queue_add_album(uri);
queue_add_album(uri, position, count, new_item_id);
return LIBRARY_OK;
}
else if (strncasecmp(uri, "spotify:", strlen("spotify:")) == 0)
{
queue_add_playlist(uri);
queue_add_playlist(uri, position, count, new_item_id);
return LIBRARY_OK;
}