[banshee] [ScreensaverManager] Moved from Banshee.NowPlaying to Banshee.Services



commit e67078173a9ab5303cb1babc003277a25bfe26bc
Author: Aaron Bockover <abockover novell com>
Date:   Sat May 30 15:45:30 2009 -0400

    [ScreensaverManager] Moved from Banshee.NowPlaying to Banshee.Services
    
    This code is not specific to the Now Playing extensions, is useful
    elsewhere, especially when the new Now Playing extension that will
    be merged from Cubano is on its way.
    
    The real problem was the hard dependency the GNOME backend had on
    the legacy Now Playing extension. It made it not possible to remove
    the legacy Now Playing from a build while still retaining GNOME
    features, like GConf support.
---
 build/build.environment.mk                         |    2 +-
 src/Backends/Banshee.Gnome/Banshee.Gnome.addin.xml |    2 +-
 .../GnomeScreensaverManager.cs                     |   76 ++++++++-----------
 .../IScreensaverManager.cs                         |    2 +-
 .../ScreensaverManager.cs                          |    4 +-
 .../Banshee.Services/Banshee.Services.addin.xml    |    4 +
 src/Core/Banshee.Services/Banshee.Services.csproj  |    2 +
 src/Core/Banshee.Services/Makefile.am              |    2 +
 .../Banshee.NowPlaying.addin.xml                   |    4 -
 .../Banshee.NowPlaying/Banshee.NowPlaying.csproj   |    2 -
 .../Banshee.NowPlaying/NowPlayingInterface.cs      |    1 +
 src/Extensions/Banshee.NowPlaying/Makefile.am      |    2 -
 12 files changed, 46 insertions(+), 57 deletions(-)

diff --git a/build/build.environment.mk b/build/build.environment.mk
index 6d7d0c0..6bce1c1 100644
--- a/build/build.environment.mk
+++ b/build/build.environment.mk
@@ -143,7 +143,7 @@ REF_EXTENSION_SAMPLE = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 REF_EXTENSION_REMOTE_AUDIO = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_MONO_ZEROCONF)
 
 # Backends
-REF_BACKEND_GNOME = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_GCONF) $(LINK_GNOME) $(LINK_EXTENSION_NOWPLAYING_DEPS)
+REF_BACKEND_GNOME = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_GCONF) $(LINK_GNOME)
 REF_BACKEND_GSTREAMER = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_GLIB)
 REF_BACKEND_UNIX = $(LINK_BANSHEE_CORE_DEPS) $(LINK_MONO_POSIX)
 REF_BACKEND_HAL = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_DBUS)
diff --git a/src/Backends/Banshee.Gnome/Banshee.Gnome.addin.xml b/src/Backends/Banshee.Gnome/Banshee.Gnome.addin.xml
index f117ab4..47ad5c6 100644
--- a/src/Backends/Banshee.Gnome/Banshee.Gnome.addin.xml
+++ b/src/Backends/Banshee.Gnome/Banshee.Gnome.addin.xml
@@ -30,7 +30,7 @@
     <Helper class="Banshee.GnomeBackend.DefaultApplicationHelper"/>
 </Extension>-->
   
-  <Extension path="/Banshee/NowPlaying/ScreensaverManager">
+  <Extension path="/Banshee/PlatformServices/ScreensaverManager">
     <ScreensaverManager class="Banshee.GnomeBackend.GnomeScreensaverManager"/>
   </Extension>
 </Addin>
diff --git a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs
index a3d4bc6..55c9758 100644
--- a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs
+++ b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs
@@ -1,5 +1,5 @@
 //
-// GnomeScreensaverManager.cs
+// ScreensaverManager.cs
 //
 // Author:
 //   Christopher James Halse Rogers <raof ubuntu com>
@@ -25,65 +25,53 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
+
 using System;
-using NDesk.DBus;
-using Mono.Unix;
-using Banshee.NowPlaying;
+using Mono.Addins;
 
-namespace Banshee.GnomeBackend
-{    
-    [Interface("org.gnome.ScreenSaver")]
-    internal interface IGnomeScreensaver
-    {
-        uint Inhibit (string application_name, string reason);
-        void UnInhibit (uint cookie);
-    }
+using Hyena;
+using Banshee.PlatformServices;
 
-    class GnomeScreensaverManager : IScreensaverManager
+namespace Banshee.NowPlaying
+{
+    public class ScreensaverManager : IScreensaverManager, IDisposable
     {
-        const string DBUS_INTERFACE = "org.gnome.ScreenSaver";
-        const string DBUS_PATH = "/org/gnome/ScreenSaver";
+        private IScreensaverManager manager;
+        bool inhibited = false;
         
-        IGnomeScreensaver manager;
-        uint? cookie;
-
-        public GnomeScreensaverManager ()
+        public ScreensaverManager ()
         {
-            if (Manager == null) {
-                Hyena.Log.Information ("GNOME screensaver service not found");
-            }
-        }
-
-        private IGnomeScreensaver Manager {
-            get {
-                if (manager == null) {
-                    if (!Bus.Session.NameHasOwner (DBUS_INTERFACE)) {
-                        return null;
-                    }
-                    
-                    manager = Bus.Session.GetObject<IGnomeScreensaver> (DBUS_INTERFACE, new ObjectPath (DBUS_PATH));
-                    
-                    if (manager == null) {
-                        Hyena.Log.ErrorFormat ("The {0} object could not be located on the DBus interface {1}",
-                            DBUS_PATH, DBUS_INTERFACE);
-                    }
+            foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/NowPlaying/ScreensaverManager")) {
+                try {
+                    manager = (IScreensaverManager)node.CreateInstance (typeof (IScreensaverManager));
+                    Log.DebugFormat ("Loaded IScreensaverManager: {0}", manager.GetType ().FullName);
+                    break;
+                } catch (Exception e) {
+                    Log.Exception ("IScreensaverManager extension failed to load", e);    
                 }
-                return manager;
             }
         }
         
+        public void Dispose ()
+        {
+            UnInhibit ();
+        }
+        
         public void Inhibit ()
         {
-            if (!cookie.HasValue && Manager != null) {
-                cookie = Manager.Inhibit ("Banshee", Catalog.GetString ("Fullscreen video playback active"));
+            if (manager != null && !inhibited) {
+                Log.Information ("Inhibiting screensaver during fullscreen playback");
+                manager.Inhibit ();
+                inhibited = true;
             }
         }
-
+        
         public void UnInhibit ()
         {
-            if (cookie.HasValue && Manager != null) {
-                Manager.UnInhibit (cookie.Value);
-                cookie = null;
+            if (manager != null && inhibited) {
+                Log.Information ("Uninhibiting screensaver");
+                manager.UnInhibit ();
+                inhibited = false;
             }
         }
     }
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/IScreensaverManager.cs b/src/Core/Banshee.Services/Banshee.PlatformServices/IScreensaverManager.cs
similarity index 97%
rename from src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/IScreensaverManager.cs
rename to src/Core/Banshee.Services/Banshee.PlatformServices/IScreensaverManager.cs
index 7c46899..2c50b7d 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/IScreensaverManager.cs
+++ b/src/Core/Banshee.Services/Banshee.PlatformServices/IScreensaverManager.cs
@@ -26,7 +26,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-namespace Banshee.NowPlaying
+namespace Banshee.PlatformServices
 {
     public interface IScreensaverManager
     {
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/ScreensaverManager.cs b/src/Core/Banshee.Services/Banshee.PlatformServices/ScreensaverManager.cs
similarity index 96%
rename from src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/ScreensaverManager.cs
rename to src/Core/Banshee.Services/Banshee.PlatformServices/ScreensaverManager.cs
index 5f0b977..7d22dcb 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/ScreensaverManager.cs
+++ b/src/Core/Banshee.Services/Banshee.PlatformServices/ScreensaverManager.cs
@@ -30,7 +30,7 @@ using System;
 using Hyena;
 using Mono.Addins;
 
-namespace Banshee.NowPlaying
+namespace Banshee.PlatformServices
 {
     public class ScreensaverManager : IScreensaverManager, IDisposable
     {
@@ -39,7 +39,7 @@ namespace Banshee.NowPlaying
         
         public ScreensaverManager ()
         {
-            foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/NowPlaying/ScreensaverManager")) {
+            foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/PlatformServices/ScreensaverManager")) {
                 try {
                     manager = (IScreensaverManager)node.CreateInstance (typeof (IScreensaverManager));
                     Log.DebugFormat ("Loaded IScreensaverManager: {0}", manager.GetType ().FullName);
diff --git a/src/Core/Banshee.Services/Banshee.Services.addin.xml b/src/Core/Banshee.Services/Banshee.Services.addin.xml
index adbd06b..5dbf22f 100644
--- a/src/Core/Banshee.Services/Banshee.Services.addin.xml
+++ b/src/Core/Banshee.Services/Banshee.Services.addin.xml
@@ -52,5 +52,9 @@
   <ExtensionPoint path="/Banshee/Platform/DiscDuplicator">
     <ExtensionNode name="DiscDuplicator"/>
   </ExtensionPoint>
+  
+  <ExtensionPoint path="/Banshee/PlatformServices/ScreensaverManager">
+    <ExtensionNode name="ScreensaverManager"/>
+  </ExtensionPoint>
 
 </Addin>
diff --git a/src/Core/Banshee.Services/Banshee.Services.csproj b/src/Core/Banshee.Services/Banshee.Services.csproj
index 78b1ca7..c69346f 100644
--- a/src/Core/Banshee.Services/Banshee.Services.csproj
+++ b/src/Core/Banshee.Services/Banshee.Services.csproj
@@ -287,6 +287,8 @@
     <Compile Include="Banshee.Sources\SourceSortType.cs" />
     <Compile Include="Banshee.Playlists.Formats\AsfReferencePlaylistFormat.cs" />
     <Compile Include="Banshee.ServiceStack\JobScheduler.cs" />
+    <Compile Include="Banshee.PlatformServices\ScreensaverManager.cs" />
+    <Compile Include="Banshee.PlatformServices\IScreensaverManager.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Banshee.Services.addin.xml" />
diff --git a/src/Core/Banshee.Services/Makefile.am b/src/Core/Banshee.Services/Makefile.am
index 3f6adb0..a903a91 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -114,6 +114,8 @@ SOURCES =  \
 	Banshee.Metadata/SaveTrackMetadataService.cs \
 	Banshee.Networking/Network.cs \
 	Banshee.Networking/NetworkManager.cs \
+	Banshee.PlatformServices/IScreensaverManager.cs \
+	Banshee.PlatformServices/ScreensaverManager.cs \
 	Banshee.PlaybackController/IBasicPlaybackController.cs \
 	Banshee.PlaybackController/ICanonicalPlaybackController.cs \
 	Banshee.PlaybackController/IPlaybackController.cs \
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml
index 46c55b3..3f8d091 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml
@@ -27,9 +27,5 @@
   <ExtensionPoint path="/Banshee/NowPlaying/FullscreenAdapter">
     <ExtensionNode name="FullscreenAdapter"/>
   </ExtensionPoint>
-  
-  <ExtensionPoint path="/Banshee/NowPlaying/ScreensaverManager">
-    <ExtensionNode name="ScreensaverManager"/>
-  </ExtensionPoint>
 
 </Addin>
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj
index c859fc4..e130237 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj
@@ -90,8 +90,6 @@
     <Compile Include="Banshee.NowPlaying\FullscreenControls.cs" />
     <Compile Include="Banshee.NowPlaying\IFullscreenAdapter.cs" />
     <Compile Include="Banshee.NowPlaying\FullscreenAdapter.cs" />
-    <Compile Include="Banshee.NowPlaying\IScreensaverManager.cs" />
-    <Compile Include="Banshee.NowPlaying\ScreensaverManager.cs" />
     <Compile Include="Banshee.NowPlaying\NowPlayingContents.cs" />
     <Compile Include="Banshee.NowPlaying\NowPlayingTrackInfoDisplay.cs" />
     <Compile Include="Banshee.NowPlaying\IVideoDisplay.cs" />
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
index 7f8a823..2deaeac 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
@@ -32,6 +32,7 @@ using Mono.Unix;
 using Gtk;
 
 using Banshee.ServiceStack;
+using Banshee.PlatformServices;
 using Banshee.Sources;
 using Banshee.Gui;
 using Banshee.Sources.Gui;
diff --git a/src/Extensions/Banshee.NowPlaying/Makefile.am b/src/Extensions/Banshee.NowPlaying/Makefile.am
index 8f4a015..d5b0a7d 100644
--- a/src/Extensions/Banshee.NowPlaying/Makefile.am
+++ b/src/Extensions/Banshee.NowPlaying/Makefile.am
@@ -8,14 +8,12 @@ SOURCES =  \
 	Banshee.NowPlaying/FullscreenControls.cs \
 	Banshee.NowPlaying/FullscreenWindow.cs \
 	Banshee.NowPlaying/IFullscreenAdapter.cs \
-	Banshee.NowPlaying/IScreensaverManager.cs \
 	Banshee.NowPlaying/IVideoDisplay.cs \
 	Banshee.NowPlaying/NowPlayingContents.cs \
 	Banshee.NowPlaying/NowPlayingInterface.cs \
 	Banshee.NowPlaying/NowPlayingSource.cs \
 	Banshee.NowPlaying/NowPlayingTrackInfoDisplay.cs \
 	Banshee.NowPlaying/OverlayWindow.cs \
-	Banshee.NowPlaying/ScreensaverManager.cs \
 	Banshee.NowPlaying/VideoDisplay.cs \
 	Banshee.NowPlaying/XOverlayVideoDisplay.cs
 



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