rhythmbox r6141 - in trunk: . shell



Author: jmatthew
Date: Thu Jan 29 11:24:01 2009
New Revision: 6141
URL: http://svn.gnome.org/viewvc/rhythmbox?rev=6141&view=rev

Log:
2009-01-29  Jonathan Matthew  <jonathan d14n org>

	* shell/rb-shell-player.c: (rb_shell_player_handle_eos_unlocked):
	Compare the entry against our own idea of what's playing, not what the
	play order thinks.

	(rb_shell_player_do_next_internal):
	Don't advance past the end of the regular play order if allow_stop
	is FALSE; always advance the queue play order, though.  Fixes #569386.


Modified:
   trunk/ChangeLog
   trunk/shell/rb-shell-player.c

Modified: trunk/shell/rb-shell-player.c
==============================================================================
--- trunk/shell/rb-shell-player.c	(original)
+++ trunk/shell/rb-shell-player.c	Thu Jan 29 11:24:01 2009
@@ -776,7 +776,6 @@
 static void
 rb_shell_player_handle_eos_unlocked (RBShellPlayer *player, RhythmDBEntry *entry, gboolean allow_stop)
 {
-	RhythmDBEntry *playing_entry;
 	RBSource *source;
 	gboolean update_stats;
 	gboolean dragging;
@@ -788,9 +787,8 @@
 		return;
 	}
 
-	playing_entry = rb_shell_player_get_playing_entry (player);
-	if (entry != NULL ) {
-		if (playing_entry != entry) {
+	if (entry != NULL) {
+		if (player->priv->playing_entry != entry) {
 			rb_debug ("EOS'd entry is not the current playing entry; ignoring");
 			return;
 		}
@@ -887,10 +885,6 @@
 						  player->priv->db,
 						  entry);
 	}
-
-	if (entry != NULL) {
-		rhythmdb_entry_unref (entry);
-	}
 }
 
 static void
@@ -2119,8 +2113,8 @@
 		g_object_get (player->priv->current_playing_source, "play-order", &porder, NULL);
 		if (porder != NULL) {
 			entry = rb_play_order_get_next (porder);
-			rb_play_order_go_next (porder);
 			if (entry != NULL) {
+				rb_play_order_go_next (porder);
 				new_source = player->priv->current_playing_source;
 			}
 			g_object_unref (porder);
@@ -2146,7 +2140,11 @@
 		/* if that didn't help, advance the play order */
 		if (entry == NULL) {
 			entry = rb_play_order_get_next (porder);
-			rb_play_order_go_next (porder);
+			if (entry != NULL) {
+				rb_debug ("got new entry %s from play order",
+					  rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_LOCATION));
+				rb_play_order_go_next (porder);
+			}
 		}
 
 		if (entry != NULL)
@@ -2163,13 +2161,17 @@
 		RhythmDBEntry *queue_entry;
 
 		queue_entry = rb_play_order_get_next (player->priv->queue_play_order);
+		rb_play_order_go_next (player->priv->queue_play_order);
 		if (queue_entry != NULL) {
+			rb_debug ("got new entry %s from queue play order",
+				  rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_LOCATION));
 			if (entry != NULL) {
 				rhythmdb_entry_unref (entry);
 			}
 			entry = queue_entry;
 			new_source = RB_SOURCE (player->priv->queue_source);
-			rb_play_order_go_next (player->priv->queue_play_order);
+		} else {
+			rb_debug ("didn't get a new entry from queue play order");
 		}
 	}
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]