[dacp] Fix playing of radio streams after queue refactoring

This commit is contained in:
chme 2015-09-12 08:22:52 +02:00
parent f4faac3cc8
commit c8a61015fc
4 changed files with 50 additions and 6 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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_ */