[banshee/gapless-ng: 325/836] Fix player_engine.SetNextTrack(null). Use this to disable the next-track-starting callback, because
- From: Christopher James Halse Rogers <chrishr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee/gapless-ng: 325/836] Fix player_engine.SetNextTrack(null). Use this to disable the next-track-starting callback, because
- Date: Thu, 25 Feb 2010 22:44:03 +0000 (UTC)
commit 50255bed7ec84d1c5ba4bca3703065998f7b5a67
Author: Christopher James Halse Rogers <raof ubuntu com>
Date: Fri Oct 30 17:38:42 2009 +1100
Fix player_engine.SetNextTrack(null).
Use this to disable the next-track-starting callback, because there won't be a next track
libbanshee/banshee-player.c | 5 +++++
.../Banshee.GStreamer/PlayerEngine.cs | 1 +
.../Banshee.MediaEngine/PlayerEngine.cs | 2 +-
.../Banshee.MediaEngine/PlayerEngineService.cs | 4 ++--
.../PlaybackControllerService.cs | 15 +++++++--------
5 files changed, 16 insertions(+), 11 deletions(-)
---
diff --git a/libbanshee/banshee-player.c b/libbanshee/banshee-player.c
index 019cdb3..32efc68 100644
--- a/libbanshee/banshee-player.c
+++ b/libbanshee/banshee-player.c
@@ -213,6 +213,11 @@ bp_set_next_track (BansheePlayer *player, const gchar *uri)
{
g_return_val_if_fail (IS_BANSHEE_PLAYER (player), FALSE);
g_return_val_if_fail (player->playbin != NULL, FALSE);
+ if (uri == NULL && player->timeout_id != 0) {
+ g_source_remove (player->timeout_id);
+ player->timeout_id = 0;
+ return TRUE;
+ }
g_object_set (G_OBJECT (player->playbin), "uri", uri, NULL);
return TRUE;
}
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
index d67ebab..476a81a 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
@@ -229,6 +229,7 @@ namespace Banshee.GStreamer
// If there isn't a next track for us, release the block on the about-to-finish callback.
if (uri == null) {
next_track_set.Set ();
+ bp_set_next_track (handle, IntPtr.Zero);
return;
}
IntPtr uri_ptr = GLib.Marshaller.StringToPtrGStrdup (uri.AbsoluteUri);
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
index 834fa08..435b594 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
@@ -103,7 +103,7 @@ namespace Banshee.MediaEngine
public void SetNextTrack (TrackInfo track)
{
pending_track = track;
- pending_uri = track.Uri;
+ pending_uri = track != null ? track.Uri : null;
HandleNextTrack (pending_uri);
}
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
index 15b4aa8..3ace877 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
@@ -310,7 +310,7 @@ namespace Banshee.MediaEngine
public void SetNextTrack (TrackInfo track)
{
- if (active_engine != FindSupportingEngine (track.Uri)) {
+ if (track != null && active_engine != FindSupportingEngine (track.Uri)) {
if (active_engine.CurrentState == PlayerState.Playing) {
// If we're playing and the current engine can't handle the next track then treat this as setting
// no next track for the engine, since it's not going to receive this next track.
@@ -326,7 +326,7 @@ namespace Banshee.MediaEngine
public void SetNextTrack (SafeUri uri)
{
- if (active_engine != FindSupportingEngine (uri)) {
+ if (uri != null && active_engine != FindSupportingEngine (uri)) {
if (active_engine.CurrentState == PlayerState.Playing) {
// If we're playing and the current engine can't handle the next track then treat this as setting
// no next track for the engine, since it's not going to receive this next track.
diff --git a/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs b/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
index 5a8ed81..4e454bc 100644
--- a/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
+++ b/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
@@ -192,7 +192,7 @@ namespace Banshee.PlaybackController
QueuePlayTrack ();
} else {
last_was_skipped = false;
- Next (RepeatMode == PlaybackRepeatMode.RepeatSingle, false);
+ Next (RepeatMode == PlaybackRepeatMode.RepeatAll, false);
}
} else {
OnStopped ();
@@ -285,12 +285,11 @@ namespace Banshee.PlaybackController
}
CurrentTrack = CalcNextTrack (Direction.Next, restart);
- if (CurrentTrack != null) {
- if (userRequested) {
- QueuePlayTrack ();
- } else {
- player_engine.SetNextTrack (CurrentTrack);
- }
+ if (!userRequested) {
+ // A RequestNextTrack event should always result in SetNextTrack being called. null is acceptable.
+ player_engine.SetNextTrack (CurrentTrack);
+ } else if (CurrentTrack != null) {
+ QueuePlayTrack ();
}
return true;
}
@@ -302,7 +301,7 @@ namespace Banshee.PlaybackController
}
CurrentTrack = CalcNextTrack (Direction.Previous, restart);
- if (CurrentTrack == null) {
+ if (CurrentTrack != null) {
QueuePlayTrack ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]