[banshee/gapless-ng: 14/836] [Banshee.PlayQueue] Handle userRequested=False in Next(). This makes gapless playback from the play



commit bb55095f08430516d7953d6dc5ffe34cf5d02c18
Author: Christopher James Halse Rogers <raof ubuntu com>
Date:   Sun Jul 19 17:16:34 2009 +1000

    [Banshee.PlayQueue] Handle userRequested=False in Next().
    This makes gapless playback from the play queue work

 .../Banshee.PlayQueue/PlayQueueSource.cs           |   27 +++++++++++++++++---
 1 files changed, 23 insertions(+), 4 deletions(-)
---
diff --git a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
index de2b889..ade81ee 100644
--- a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
+++ b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
@@ -243,19 +243,38 @@ namespace Banshee.PlayQueue
             if (userRequested) {
                 RemovePlayingTrack ();
             }
-            
-            if (Count == 0) {
+
+            bool stillPlaying = false;
+            if (ServiceManager.PlayerEngine.CurrentTrack != null) {
+                // AbsoluteUri seems a reasonable way of determining when two TrackInfos are the same
+                // I'm not sure if it's both necessary and sufficient, though.
+                stillPlaying = 
+                    ServiceManager.PlayerEngine.CurrentTrack.Uri.AbsoluteUri == TrackModel[0].Uri.AbsoluteUri;
+            }
+
+            if (Count == 0 || (stillPlaying && Count == 1)) {
                 ServiceManager.PlaybackController.Source = PriorSource;
                 if (was_playing) {
                     ServiceManager.PlaybackController.PriorTrack = prior_playback_track;
-                    ServiceManager.PlaybackController.Next (restart);
+                    ServiceManager.PlaybackController.Next (restart, userRequested);
                 } else {
                     ServiceManager.PlayerEngine.Close ();
                 }
                 return true;
             }
+
+            DatabaseTrackInfo next;
+            if (userRequested || !stillPlaying) {
+                next = (DatabaseTrackInfo)TrackModel[0];
+            } else {
+                next = (DatabaseTrackInfo)TrackModel[1];
+            }
             
-            ServiceManager.PlayerEngine.OpenPlay ((DatabaseTrackInfo)TrackModel[0]);
+            if (userRequested) {
+                ServiceManager.PlayerEngine.OpenPlay (next);
+            } else {
+                ServiceManager.PlayerEngine.SetNextTrack (next);
+            }
             return true;
         }
         



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