chiark / gitweb /
Leave a bit of headroom above test port number, since we go at least
[disorder] / disobedience / queue.c
index f4e92a1731dfd7cc34ba72644cd5b7ce2e4b5107..6dac960c6da05e927347aec92f6fea7cc6f40eb1 100644 (file)
@@ -29,7 +29,10 @@ static struct queue_entry *actual_playing_track;
 /** @brief The playing track */
 struct queue_entry *playing_track;
 
-/** @brief When we last got the playing track */
+/** @brief When we last got the playing track
+ *
+ * Set to 0 if the timings are currently off due to having just unpaused.
+ */
 time_t last_playing;
 
 static void queue_completed(void *v,
@@ -41,8 +44,6 @@ static void playing_completed(void *v,
 
 /** @brief Called when either the actual queue or the playing track change */
 static void queue_playing_changed(void) {
-  const char *old_id = playing_track ? playing_track->id : 0;
-  
   /* Check that the playing track isn't in the queue.  There's a race here due
    * to the fact that we issue the two commands at slightly different times.
    * If it goes wrong we re-issue and try again, so that we never offer up an
@@ -68,8 +69,6 @@ static void queue_playing_changed(void) {
     playing_track = NULL;
     q = actual_queue;
   }
-  if(!old_id || !playing_track || strcmp(old_id, playing_track->id))
-    time(&last_playing);                /* for column_length() */
   ql_new_queue(&ql_queue, q);
   /* Tell anyone who cares */
   event_raise("queue-list-changed", q);
@@ -98,6 +97,7 @@ static void playing_completed(void attribute((unused)) *v,
   }
   actual_playing_track = q;
   queue_playing_changed();
+  time(&last_playing);
 }
 
 /** @brief Schedule an update to the queue
@@ -121,6 +121,9 @@ static void playing_changed(const char attribute((unused)) *event,
                             void  attribute((unused)) *callbackdata) {
   D(("playing_changed"));
   gtk_label_set_text(GTK_LABEL(report_label), "updating playing track");
+  /* Setting last_playing=0 means that we don't know what the correct value
+   * is right now, e.g. because things have been deranged by a pause. */
+  last_playing = 0;
   disorder_eclient_playing(client, playing_completed, 0);
 }