chiark / gitweb /
record whether tracks are connected to speaker in a sane and working way
authorRichard Kettlewell <rjk@greenend.org.uk>
Sun, 2 Dec 2007 18:10:08 +0000 (18:10 +0000)
committerRichard Kettlewell <rjk@greenend.org.uk>
Sun, 2 Dec 2007 18:10:08 +0000 (18:10 +0000)
lib/queue.h
server/play.c
server/server-queue.c
server/speaker.c

index 3ae4c26..ce43fc5 100644 (file)
@@ -54,6 +54,7 @@ struct queue_entry {
   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 */
index bd27474..7b70799 100644 (file)
@@ -312,14 +312,16 @@ static int start(ev_source *ev,
 
   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. */
@@ -478,6 +480,7 @@ static int start(ev_source *ev,
     return START_SOFTFAIL;
   }
   store_player_pid(q->id, pid);
+  q->prepared = 1;
   if(lfd != -1)
     xclose(lfd);
   setpgid(pid, pid);
index 2b0e89e..7126288 100644 (file)
 #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;
 
index 55dde7e..fabdfc4 100644 (file)
@@ -495,7 +495,7 @@ static void mainloop(void) {
           t = findtrack(id, 1/*create*/);
           write(fd, "", 1);             /* write an ack */
           if(t->fd != -1) {
-            error(0, "got a connection for a track that already has one");
+            error(0, "%s: already got a connection", id);
             xclose(fd);
           } else {
             nonblock(fd);