banshee r3485 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.PlaybackController src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying



Author: abock
Date: Wed Mar 19 07:01:07 2008
New Revision: 3485
URL: http://svn.gnome.org/viewvc/banshee?rev=3485&view=rev

Log:
2008-03-19  Aaron Bockover  <abock gnome org>

    * src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs:
    Added a TrackStarted event that will always be raised, even if the
    playback controller did not transition to the track, but most importantly
    it will _always_ be raised after the Transition event; this allows
    users to connect to both events to determine if the track that is
    playing was manually played or not

    * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs:
    Activate the now playing source if the user manually started playing a
    track with a video stream; uses the nice transition/track start stuff
    noted above



Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs	Wed Mar 19 07:01:07 2008
@@ -52,6 +52,8 @@
     
         private TrackInfo current_track;
         private TrackInfo changing_to_track;
+        private bool raise_started_after_transition = false;
+        private bool transition_track_started = false;
         
         private Random random = new Random ();
     
@@ -70,6 +72,7 @@
         
         public event EventHandler Stopped;
         public event EventHandler SourceChanged;
+        public event EventHandler TrackStarted;
         public event EventHandler Transition;
         
         public PlaybackControllerService ()
@@ -111,41 +114,54 @@
                     }
                     
                     changing_to_track = null;
+                    
+                    if (!raise_started_after_transition) {
+                        transition_track_started = false;
+                        OnTrackStarted ();
+                    } else {
+                        transition_track_started = true;
+                    }
                     break;
             }       
         }
         
         public void First ()
         {
-            OnTransition ();
+            raise_started_after_transition = true;
             
             if (Source is IBasicPlaybackController) {
                 ((IBasicPlaybackController)Source).First ();
             } else {
                 ((ICanonicalPlaybackController)this).First ();
             }
+            
+            OnTransition ();
         }
         
         public void Next ()
         {
-            OnTransition ();
+            raise_started_after_transition = true;
             
             if (Source is IBasicPlaybackController) {
                 ((IBasicPlaybackController)Source).Next ();
             } else {
                 ((ICanonicalPlaybackController)this).Next ();
             }
+            
+            OnTransition ();
         }
         
         public void Previous ()
         {
-            OnTransition ();
+            raise_started_after_transition = true;
             
             if (Source is IBasicPlaybackController) {
                 ((IBasicPlaybackController)Source).Previous ();
             } else {
                 ((ICanonicalPlaybackController)this).Previous ();
             }
+            
+            OnTransition ();
         }
         
         void ICanonicalPlaybackController.First ()
@@ -239,6 +255,13 @@
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
+            
+            if (raise_started_after_transition && transition_track_started) {
+                OnTrackStarted ();
+            }
+            
+            raise_started_after_transition = false;
+            transition_track_started = false;
         }
         
         protected virtual void OnSourceChanged ()
@@ -249,6 +272,14 @@
             }
         }
         
+        protected virtual void OnTrackStarted ()
+        {
+            EventHandler handler = TrackStarted;
+            if (handler != null) {
+                handler (this, EventArgs.Empty);
+            }
+        }
+        
         public TrackInfo CurrentTrack {
             get { return current_track; }
             protected set { current_track = value; }

Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs	Wed Mar 19 07:01:07 2008
@@ -31,13 +31,18 @@
 using Gtk;
 
 using Banshee.Sources;
-using Banshee.Sources.Gui;
 using Banshee.ServiceStack;
+using Banshee.MediaEngine;
+using Banshee.Collection;
+
+using Banshee.Sources.Gui;
 
 namespace Banshee.NowPlaying
 {
     public class NowPlayingSource : Source, IDisposable
-    {       
+    {
+        private TrackInfo transitioned_track;
+        
         public NowPlayingSource () : base ("now-playing", Catalog.GetString ("Now Playing"), 0)
         {
             Properties.SetString ("Icon.Name", "media-playback-start");
@@ -45,6 +50,23 @@
             Properties.Set<bool> ("Nereid.SourceContents.HeaderVisible", false);
             
             ServiceManager.SourceManager.AddSource (this);
+            
+            ServiceManager.PlaybackController.Transition += OnPlaybackControllerTransition;
+            ServiceManager.PlaybackController.TrackStarted += OnPlaybackControllerTrackStarted;
+        }
+        
+        private void OnPlaybackControllerTransition (object o, EventArgs args)
+        {
+            transitioned_track = ServiceManager.PlaybackController.CurrentTrack;
+        }
+        
+        private void OnPlaybackControllerTrackStarted (object o, EventArgs args)
+        { 
+            TrackInfo current_track = ServiceManager.PlaybackController.CurrentTrack;
+            if (current_track != null && transitioned_track != current_track && 
+                (current_track.MediaAttributes & TrackMediaAttributes.VideoStream) != 0) {
+                ServiceManager.SourceManager.SetActiveSource (this);
+            }
         }
         
         public void Dispose ()



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