[banshee] [Banshee.Moblin] Go to NowPlaying if video starts



commit 91396992257e45d7428eb930713a25220839dcc2
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Thu Oct 22 17:23:13 2009 -0700

    [Banshee.Moblin] Go to NowPlaying if video starts

 .../Banshee.Moblin/Banshee.Moblin/MoblinService.cs |   48 +++++++++++++++++++-
 1 files changed, 47 insertions(+), 1 deletions(-)
---
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs
index 37b652d..f51ebd5 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs
@@ -32,7 +32,10 @@ using Gtk;
 using Hyena;
 
 using Banshee.Base;
+using Banshee.Collection;
+using Banshee.Sources;
 using Banshee.ServiceStack;
+using Banshee.MediaEngine;
 using Banshee.Gui;
 
 using Mutter;
@@ -43,6 +46,9 @@ namespace Banshee.Moblin
     {
         private GtkElementsService elements_service;
         private InterfaceActionService interface_action_service;
+        private SourceManager source_manager;
+        private PlayerEngineService player;
+        private Banshee.Sources.Source now_playing;
         
         public MoblinService ()
         {
@@ -52,6 +58,8 @@ namespace Banshee.Moblin
         {
             elements_service = ServiceManager.Get<GtkElementsService> ();
             interface_action_service = ServiceManager.Get<InterfaceActionService> ();
+            source_manager = ServiceManager.SourceManager;
+            player = ServiceManager.PlayerEngine;
         
             if (!ServiceStartup ()) {
                 ServiceManager.ServiceStarted += OnServiceStarted;
@@ -64,6 +72,10 @@ namespace Banshee.Moblin
                 interface_action_service = (InterfaceActionService)args.Service;
             } else if (args.Service is GtkElementsService) {
                 elements_service = (GtkElementsService)args.Service;
+            } else if (args.Service is SourceManager) {
+                source_manager = ServiceManager.SourceManager;
+            } else if (args.Service is PlayerEngineService) {
+                player = ServiceManager.PlayerEngine;
             }
                     
             ServiceStartup ();
@@ -71,7 +83,7 @@ namespace Banshee.Moblin
         
         private bool ServiceStartup ()
         {
-            if (elements_service == null || interface_action_service == null) {
+            if (elements_service == null || interface_action_service == null || source_manager == null || player == null) {
                 return false;
             }
             
@@ -108,6 +120,9 @@ namespace Banshee.Moblin
                 elements_service.PrimaryWindow.Hide ();
                 return false;
             };
+
+            FindNowPlaying ();
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerStateChanged, PlayerEvent.StateChange | PlayerEvent.StartOfStream);
         }
         
         private void ReflectionHackeryUpTheNereid ()
@@ -174,6 +189,37 @@ namespace Banshee.Moblin
             // FIXME: We should have something like PlayerEngine.InternalVolumeEnabled = false
             ServiceManager.PlayerEngine.Volume = 100;
         }
+
+        private void OnPlayerStateChanged (PlayerEventArgs args)
+        {
+            var player = ServiceManager.PlayerEngine;
+            if (player.CurrentState == PlayerState.Playing && player.CurrentTrack.HasAttribute (TrackMediaAttributes.VideoStream)) {
+                if (now_playing != null) {
+                    ServiceManager.SourceManager.SetActiveSource (now_playing);
+                }
+
+                PresentPrimaryInterface ();
+            }
+        }
+
+        private void FindNowPlaying ()
+        {
+            foreach (var src in ServiceManager.SourceManager.Sources) {
+                if (src.UniqueId.Contains ("now-playing")) {
+                    now_playing = src;
+                    break;
+                }
+            }
+
+            if (now_playing != null)
+                return;
+
+            Banshee.ServiceStack.ServiceManager.SourceManager.SourceAdded += (args) => {
+                if (now_playing == null && args.Source.UniqueId.Contains ("now-playing")) {
+                    now_playing = args.Source;
+                }
+            };
+        }
         
         public void PresentPrimaryInterface ()
         {



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