banshee r3851 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.Database src/Core/Banshee.Services/Banshee.ServiceStack



Author: gburt
Date: Wed Apr 30 17:48:03 2008
New Revision: 3851
URL: http://svn.gnome.org/viewvc/banshee?rev=3851&view=rev

Log:
2008-04-30  Gabriel Burt  <gabriel burt gmail com>

	* src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs: Add a
	ClientStarted event, which is raised for clients that are already started
	and for new ones.

	* src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs: Add a
	IsStarted property, and change the Started event to use a Action<> handler.

	* src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs:
	* src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: Use
	new Application.ClientStarted event, and handle in method, not anonymous
	delegate.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs	Wed Apr 30 17:48:03 2008
@@ -328,7 +328,7 @@
             Execute ("ALTER TABLE CoreSmartPlaylists ADD COLUMN CachedCount INTEGER");
 
             // This once, we need to reload all the sources at start up. Then never again, woo!
-            Application.ActiveClient.Started += ReloadAllSources;
+            Application.ClientStarted += ReloadAllSources;
             return true;
         }
 
@@ -688,15 +688,12 @@
             ServiceManager.SourceManager.MusicLibrary.NotifyTracksChanged ();
         }
 
-        private static bool refreshed = false;
-        private void ReloadAllSources (object o, EventArgs args)
+        private void ReloadAllSources (Client client)
         {
-            if (!refreshed) {
-                refreshed = true;
-                foreach (Source source in ServiceManager.SourceManager.Sources) {
-                    if (source is ITrackModelSource) {
-                        ((ITrackModelSource)source).Reload ();
-                    }
+            Application.ClientStarted -= ReloadAllSources;
+            foreach (Source source in ServiceManager.SourceManager.Sources) {
+                if (source is ITrackModelSource) {
+                    ((ITrackModelSource)source).Reload ();
                 }
             }
         }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs	Wed Apr 30 17:48:03 2008
@@ -53,6 +53,21 @@
         public static event ShutdownRequestHandler ShutdownRequested;
         public static event Action<Client> ClientAdded;
 
+        private static event Action<Client> client_started;
+        public static event Action<Client> ClientStarted {
+            add {
+                lock (running_clients) {
+                    foreach (Client client in running_clients) {
+                        if (client.IsStarted) {
+                            OnClientStarted (client);
+                        }
+                    }
+                }
+                client_started += value;
+            }
+            remove { client_started -= value; }
+        }
+
         private static Stack<Client> running_clients = new Stack<Client> ();
         private static bool shutting_down;
 
@@ -99,6 +114,7 @@
         {
             lock (running_clients) {
                 running_clients.Push (client);
+                client.Started += OnClientStarted;
             }
 
             Action<Client> handler = ClientAdded;
@@ -117,6 +133,15 @@
         public static Client ActiveClient {
             get { lock (running_clients) { return running_clients.Peek (); } } 
         }
+
+        private static void OnClientStarted (Client client)
+        {
+            client.Started -= OnClientStarted;
+            Action<Client> handler = client_started;
+            if (handler != null) {
+                handler (client);
+            }
+        }
         
         private static bool OnShutdownRequested ()
         {

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs	Wed Apr 30 17:48:03 2008
@@ -32,7 +32,7 @@
 {
     public abstract class Client : IDisposable
     {
-        public event EventHandler Started;
+        public event Action<Client> Started;
 
         public Client ()
         {
@@ -46,12 +46,18 @@
             get; 
         }
 
+        private bool is_started;
+        public bool IsStarted {
+            get { return is_started; }
+        }
+
         protected void OnStarted ()
         {
+            is_started = true;
             Hyena.Log.InformationFormat ("{0} Client Started", ClientId);
-            EventHandler handler = Started;
+            Action<Client> handler = Started;
             if (handler != null) {
-                handler (this, EventArgs.Empty);
+                handler (this);
             }
         }
     }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs	Wed Apr 30 17:48:03 2008
@@ -90,11 +90,12 @@
             Banshee.Configuration.ConfigurationClient.Initialize ();
             extension_nodes = AddinManager.GetExtensionNodes ("/Banshee/ServiceManager/Service");
 
-            Application.ClientAdded += delegate (Client client) {
-                client.Started += delegate {
-                    DelayedInitialize ();
-                };
-            };
+            Application.ClientStarted += OnClientStarted;
+        }
+
+        private static void OnClientStarted (Client client)
+        {
+            DelayedInitialize ();
         }
         
         public static void Run()



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