mirror of
https://github.com/owntone/owntone-server.git
synced 2025-02-10 05:08:11 -05:00
Add support for query-modifier=containers in DACP playqueue-edit
This commit is contained in:
parent
8740249e05
commit
9efc97d702
@ -55,6 +55,12 @@ daap_query_parse_sql(const char *daap_query)
|
|||||||
|
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
|
if (!daap_query)
|
||||||
|
{
|
||||||
|
DPRINTF(E_LOG, L_DAAP, "DAAP query is null\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
DPRINTF(E_DBG, L_DAAP, "Trying DAAP query -%s-\n", daap_query);
|
DPRINTF(E_DBG, L_DAAP, "Trying DAAP query -%s-\n", daap_query);
|
||||||
|
|
||||||
#if ANTLR3C_NEW_INPUT
|
#if ANTLR3C_NEW_INPUT
|
||||||
|
@ -1314,10 +1314,13 @@ dacp_reply_playqueueedit_add(struct evhttp_request *req, struct evbuffer *evbuf,
|
|||||||
struct player_source *ps;
|
struct player_source *ps;
|
||||||
const char *editquery;
|
const char *editquery;
|
||||||
const char *queuefilter;
|
const char *queuefilter;
|
||||||
|
const char *querymodifier;
|
||||||
const char *sort;
|
const char *sort;
|
||||||
const char *param;
|
const char *param;
|
||||||
|
char modifiedquery[32];
|
||||||
uint32_t idx;
|
uint32_t idx;
|
||||||
int mode;
|
int mode;
|
||||||
|
int plid;
|
||||||
int ret;
|
int ret;
|
||||||
int quirkyquery;
|
int quirkyquery;
|
||||||
|
|
||||||
@ -1347,10 +1350,28 @@ dacp_reply_playqueueedit_add(struct evhttp_request *req, struct evbuffer *evbuf,
|
|||||||
|
|
||||||
queuefilter = evhttp_find_header(query, "queuefilter");
|
queuefilter = evhttp_find_header(query, "queuefilter");
|
||||||
|
|
||||||
/* Detect the quirky query - a query that needs special treatment */
|
querymodifier = evhttp_find_header(query, "query-modifier");
|
||||||
quirkyquery = (mode == 1) && strstr(editquery, "dmap.itemid:") && ((!queuefilter) || strstr(queuefilter, "(null)"));
|
if (!querymodifier || (strcmp(querymodifier, "containers") != 0))
|
||||||
|
{
|
||||||
|
quirkyquery = (mode == 1) && strstr(editquery, "dmap.itemid:") && ((!queuefilter) || strstr(queuefilter, "(null)"));
|
||||||
|
ret = player_queue_make_daap(&ps, editquery, queuefilter, sort, quirkyquery);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Modify the query: Take the id from the editquery and use it as a queuefilter playlist id
|
||||||
|
ret = safe_atoi32(strchr(editquery, ':') + 1, &plid);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
DPRINTF(E_LOG, L_DACP, "Invalid playlist id in request: %s\n", editquery);
|
||||||
|
|
||||||
|
dmap_send_error(req, "cacr", "Invalid request");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(modifiedquery, sizeof(modifiedquery), "playlist:%d", plid);
|
||||||
|
ret = player_queue_make_daap(&ps, NULL, modifiedquery, sort, 0);
|
||||||
|
}
|
||||||
|
|
||||||
ret = player_queue_make_daap(&ps, editquery, queuefilter, sort, quirkyquery);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
DPRINTF(E_LOG, L_DACP, "Could not build song queue\n");
|
DPRINTF(E_LOG, L_DACP, "Could not build song queue\n");
|
||||||
@ -1401,6 +1422,9 @@ dacp_reply_playqueueedit(struct evhttp_request *req, struct evbuffer *evbuf, cha
|
|||||||
User selected play (album or artist tab):
|
User selected play (album or artist tab):
|
||||||
?command=add&query='...'&sort=album&mode=1&session-id=...
|
?command=add&query='...'&sort=album&mode=1&session-id=...
|
||||||
-> clear queue, play query results
|
-> clear queue, play query results
|
||||||
|
User selected play (playlist):
|
||||||
|
?command=add&query='dmap.itemid:...'&query-modifier=containers&mode=1&session-id=...
|
||||||
|
-> clear queue, play playlist with the id specified by itemid
|
||||||
User selected track (album tab):
|
User selected track (album tab):
|
||||||
?command=add&query='dmap.itemid:...'&queuefilter=album:...&sort=album&mode=1&session-id=...
|
?command=add&query='dmap.itemid:...'&queuefilter=album:...&sort=album&mode=1&session-id=...
|
||||||
-> clear queue, play itemid and the rest of album
|
-> clear queue, play itemid and the rest of album
|
||||||
|
11
src/player.c
11
src/player.c
@ -736,9 +736,14 @@ player_queue_make_daap(struct player_source **head, const char *query, const cha
|
|||||||
char *s;
|
char *s;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
|
||||||
id = find_first_song_id(query);
|
if (query)
|
||||||
if (id < 0)
|
{
|
||||||
return -1;
|
id = find_first_song_id(query);
|
||||||
|
if (id < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
id = 0;
|
||||||
|
|
||||||
memset(&qp, 0, sizeof(struct query_params));
|
memset(&qp, 0, sizeof(struct query_params));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user