const struct plugin *pl; /* plugin that's playing this track */
void *data; /* player data */
long sofar; /* how much played so far */
+ int prepared; /* true when connected to speaker */
/* For DISORDER_PLAYER_PAUSES only: */
time_t lastpaused, lastresumed; /* when last paused/resumed, or 0 */
long uptopause; /* how much played up to last pause */
memset(&sm, 0, sizeof sm);
D(("start %s %d", q->id, prepare_only));
- if(find_player_pid(q->id) > 0) {
- if(prepare_only) return START_OK;
- /* We have already prepared this track so we just need to tell the speaker
- * process to start actually playing the queued up audio data */
- strcpy(sm.id, q->id);
- sm.type = SM_PLAY;
- speaker_send(speaker_fd, &sm);
- D(("sent SM_PLAY for %s", sm.id));
+ if(q->prepared) {
+ /* The track is alraedy prepared */
+ if(!prepare_only) {
+ /* We want to run it, since it's prepared the answer is to tell the
+ * speaker to set it off */
+ strcpy(sm.id, q->id);
+ sm.type = SM_PLAY;
+ speaker_send(speaker_fd, &sm);
+ D(("sent SM_PLAY for %s", sm.id));
+ }
return START_OK;
}
/* Find the player plugin. */
return START_SOFTFAIL;
}
store_player_pid(q->id, pid);
+ q->prepared = 1;
if(lfd != -1)
xclose(lfd);
setpgid(pid, pid);
#include "disorder.h"
/* the head of the queue is played next, so normally we add to the tail */
-struct queue_entry qhead = { &qhead, &qhead, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+struct queue_entry qhead = { &qhead, &qhead, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
/* the head of the recent list is the oldest thing, the tail the most recently
* played */
-struct queue_entry phead = { &phead, &phead, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+struct queue_entry phead = { &phead, &phead, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static long pcount;