[dacp] Fix playing of radio streams after queue refactoring
This commit is contained in:
parent
f4faac3cc8
commit
c8a61015fc
|
@ -758,7 +758,6 @@ dacp_reply_ctrlint(struct evhttp_request *req, struct evbuffer *evbuf, char **ur
|
||||||
static int
|
static int
|
||||||
find_first_song_id(const char *query)
|
find_first_song_id(const char *query)
|
||||||
{
|
{
|
||||||
//TODO [refactor][performance] Unnecessary query, it is enough to extract the item id from the query string. Accessing the db to verify the item exists is not needed.
|
|
||||||
struct db_media_file_info dbmfi;
|
struct db_media_file_info dbmfi;
|
||||||
struct query_params qp;
|
struct query_params qp;
|
||||||
int id;
|
int id;
|
||||||
|
@ -1214,7 +1213,12 @@ dacp_reply_playspec(struct evhttp_request *req, struct evbuffer *evbuf, char **u
|
||||||
|
|
||||||
DPRINTF(E_DBG, L_DACP, "Playspec request for playlist %d, start song id %d%s\n", plid, pos, (shuffle) ? ", shuffle" : "");
|
DPRINTF(E_DBG, L_DACP, "Playspec request for playlist %d, start song id %d%s\n", plid, pos, (shuffle) ? ", shuffle" : "");
|
||||||
|
|
||||||
items = queue_make_pl(plid); //TODO [queue] get queue-item-id or pos for first song to play (dacp) --- , &pos);
|
items = NULL;
|
||||||
|
if (plid > 0)
|
||||||
|
items = queue_make_pl(plid);
|
||||||
|
else if (pos > 0)
|
||||||
|
items = queue_make_item(pos);
|
||||||
|
|
||||||
if (!items)
|
if (!items)
|
||||||
{
|
{
|
||||||
DPRINTF(E_LOG, L_DACP, "Could not build song queue from playlist %d\n", plid);
|
DPRINTF(E_LOG, L_DACP, "Could not build song queue from playlist %d\n", plid);
|
||||||
|
|
|
@ -1527,7 +1527,6 @@ source_read(uint8_t *buf, int len, uint64_t rtptime)
|
||||||
if (item)
|
if (item)
|
||||||
{
|
{
|
||||||
ret = source_open(item, cur_streaming->end + 1, 0);
|
ret = source_open(item, cur_streaming->end + 1, 0);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
42
src/queue.c
42
src/queue.c
|
@ -16,14 +16,16 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "queue.h"
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "db.h"
|
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "queue.h"
|
|
||||||
#include "rng.h"
|
#include "rng.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -1070,11 +1072,17 @@ queue_make(struct query_params *qp)
|
||||||
return item_head;
|
return item_head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Makes a list of queue-items for the given playlist id (plid)
|
||||||
|
*
|
||||||
|
* @param plid Id of the playlist
|
||||||
|
* @return List of items for all playlist items
|
||||||
|
*/
|
||||||
struct queue_item *
|
struct queue_item *
|
||||||
queue_make_pl(int plid)
|
queue_make_pl(int plid)
|
||||||
{
|
{
|
||||||
struct query_params qp;
|
struct query_params qp;
|
||||||
struct queue_item *item;;
|
struct queue_item *item;
|
||||||
|
|
||||||
memset(&qp, 0, sizeof(struct query_params));
|
memset(&qp, 0, sizeof(struct query_params));
|
||||||
|
|
||||||
|
@ -1089,3 +1097,31 @@ queue_make_pl(int plid)
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Makes a queue-item for the item/file with the given id (dbmfi_id)
|
||||||
|
*
|
||||||
|
* @param dbmfi_id Id of the item/file
|
||||||
|
* @return List of items containing only the item with the given id
|
||||||
|
*/
|
||||||
|
struct queue_item *
|
||||||
|
queue_make_item(uint32_t dbmfi_id)
|
||||||
|
{
|
||||||
|
struct query_params qp;
|
||||||
|
struct queue_item *item;
|
||||||
|
char buf[124];
|
||||||
|
|
||||||
|
memset(&qp, 0, sizeof(struct query_params));
|
||||||
|
|
||||||
|
qp.id = 0;
|
||||||
|
qp.type = Q_ITEMS;
|
||||||
|
qp.offset = 0;
|
||||||
|
qp.limit = 0;
|
||||||
|
qp.sort = S_NONE;
|
||||||
|
snprintf(buf, sizeof(buf), "f.id = %" PRIu32, dbmfi_id);
|
||||||
|
qp.filter = strdup(buf);
|
||||||
|
|
||||||
|
item = queue_make(&qp);
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#define SRC_QUEUE_H_
|
#define SRC_QUEUE_H_
|
||||||
|
|
||||||
|
|
||||||
|
#include "db.h"
|
||||||
|
|
||||||
enum repeat_mode {
|
enum repeat_mode {
|
||||||
REPEAT_OFF = 0,
|
REPEAT_OFF = 0,
|
||||||
REPEAT_SONG = 1,
|
REPEAT_SONG = 1,
|
||||||
|
@ -126,4 +128,7 @@ queue_make(struct query_params *qp);
|
||||||
struct queue_item *
|
struct queue_item *
|
||||||
queue_make_pl(int plid);
|
queue_make_pl(int plid);
|
||||||
|
|
||||||
|
struct queue_item *
|
||||||
|
queue_make_item(uint32_t dbmfi_id);
|
||||||
|
|
||||||
#endif /* SRC_QUEUE_H_ */
|
#endif /* SRC_QUEUE_H_ */
|
||||||
|
|
Loading…
Reference in New Issue