banshee r3848 - in trunk/banshee: . src/Clients/Nereid/Nereid src/Core/Banshee.Services/Banshee.Database src/Core/Banshee.Services/Banshee.Playlist src/Core/Banshee.Services/Banshee.ServiceStack src/Core/Banshee.Services/Banshee.SmartPlaylist src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Gui src/Dap/Banshee.Dap/Banshee.Dap src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue



Author: gburt
Date: Tue Apr 29 22:09:35 2008
New Revision: 3848
URL: http://svn.gnome.org/viewvc/banshee?rev=3848&view=rev

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

	Prior to this commit, all sources (playlists, etc) were reloaded on
	startup, meaning startup got slower and slower the more playlists you had.
	This is no longer the case, playlists are reloaded the first time you
	activate (select) them.

	* src/Clients/Nereid/Nereid/Client.cs: Add information line at start of
	Main, useful to get more accurate startup timing.

	* src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs:
	Add columns for SavedCount to CorePrimarySources etc.  Trigger all the
	sources to reload when the client is started up, just one more time, to
	bootstrap the SavedCount.

	* src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs: Log when the
	client has fully started up.

	* src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs:
	Save is now an override, and got rid of NotifyUpdated since not needed now
	that Source.OnUserNotifyUpdated is public.

	* src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs:
	* src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs:
	* src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs:
	Load and save SavedCount.

	* src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Add a
	SavedCount protected property, used to be able to show a count in the
	source list on startup without having to query every soure. Implement
	IDisposable, and Save the source when disposed.  Also, implement default
	Activate method that checks if the source has been reloaded this session,
	and reloads it if not.

	* src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs: Make sure
	all sources are Disposed (if : IDisposable) when removed, including child
	sources.

	* src/Core/Banshee.Services/Banshee.Sources/Source.cs:
	* src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs: Make
	OnUserNotifyUpdated method public, and use it in SourceActions.

	* src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Call OnUserNotifyUpdated
	on new DapSources so they pulse in the source list.

	* src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs:
	Chain Dispose calls.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Clients/Nereid/Nereid/Client.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs
   trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs
   trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs

Modified: trunk/banshee/src/Clients/Nereid/Nereid/Client.cs
==============================================================================
--- trunk/banshee/src/Clients/Nereid/Nereid/Client.cs	(original)
+++ trunk/banshee/src/Clients/Nereid/Nereid/Client.cs	Tue Apr 29 22:09:35 2008
@@ -26,6 +26,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.IO;
 
 namespace Nereid
@@ -34,13 +35,14 @@
     {
         public static void Main ()
         {
+            Hyena.Log.Information (String.Format ("Running Banshee {0}", Banshee.ServiceStack.Application.Version));
             // This could go into GtkBaseClient, but it's probably something we
             // should really only support at each client level
             string user_gtkrc = Path.Combine (Banshee.Base.Paths.ApplicationData, "gtkrc"); 
             if (File.Exists (user_gtkrc) && !Banshee.Base.ApplicationContext.CommandLine.Contains ("no-gtkrc")) {
                 Gtk.Rc.AddDefaultFile (user_gtkrc);
             } 
-            
+
             // Boot the client
             Banshee.Gui.GtkBaseClient.Entry<Client> ();
         }

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	Tue Apr 29 22:09:35 2008
@@ -61,7 +61,7 @@
         // NOTE: Whenever there is a change in ANY of the database schema,
         //       this version MUST be incremented and a migration method
         //       MUST be supplied to match the new version number
-        protected const int CURRENT_VERSION = 7;
+        protected const int CURRENT_VERSION = 8;
         protected const int CURRENT_METADATA_VERSION = 1;
         
         protected class DatabaseVersionAttribute : Attribute 
@@ -320,6 +320,31 @@
             return true;
         }
 
+        [DatabaseVersion (8)]
+        private bool Migrate_8 ()
+        {
+            Execute ("ALTER TABLE CorePrimarySources ADD COLUMN CachedCount INTEGER");
+            Execute ("ALTER TABLE CorePlaylists ADD COLUMN CachedCount INTEGER");
+            Execute ("ALTER TABLE CoreSmartPlaylists ADD COLUMN CachedCount INTEGER");
+
+            // This once, we need to reload all the sources at start up. Then never again, woo!
+            bool refreshed = false;
+            Application.ActiveClient.Started += delegate {
+                if (!refreshed) {
+                    refreshed = true;
+                    ThreadPool.QueueUserWorkItem (delegate {
+                        foreach (Source source in ServiceManager.SourceManager.Sources) {
+                            if (source is ITrackModelSource) {
+                                ((ITrackModelSource)source).Reload ();
+                            }
+                        }
+                    });
+                }
+            };
+
+            return true;
+        }
+
 #pragma warning restore 0169
         
         private void InitializeFreshDatabase()
@@ -349,7 +374,8 @@
             Execute(@"
                 CREATE TABLE CorePrimarySources (
                     PrimarySourceID     INTEGER PRIMARY KEY,
-                    StringID            TEXT UNIQUE
+                    StringID            TEXT UNIQUE,
+                    CachedCount         INTEGER
                 )
             ");
             Execute ("INSERT INTO CorePrimarySources (StringID) VALUES ('MusicLibrarySource-Library')");
@@ -437,7 +463,8 @@
                     Name                TEXT,
                     SortColumn          INTEGER NOT NULL DEFAULT -1,
                     SortType            INTEGER NOT NULL DEFAULT 0,
-                    Special             INTEGER NOT NULL DEFAULT 0
+                    Special             INTEGER NOT NULL DEFAULT 0,
+                    CachedCount         INTEGER
                 )
             ");
             
@@ -459,7 +486,8 @@
                     Condition           TEXT,
                     OrderBy             TEXT,
                     LimitNumber         TEXT,
-                    LimitCriterion      TEXT
+                    LimitCriterion      TEXT,
+                    CachedCount         INTEGER
                 )
             ");
                 

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs	Tue Apr 29 22:09:35 2008
@@ -156,7 +156,7 @@
             get { return true; }
         }
 
-        public virtual void Save ()
+        public override void Save ()
         {
             if (dbid == null || dbid <= 0)
                 Create ();
@@ -168,11 +168,6 @@
             get { return (Parent is DatabaseSource) ? (Parent as DatabaseSource).ShowBrowser : base.ShowBrowser; }
         }
 
-        public void NotifyUpdated ()
-        {
-            OnUserNotifyUpdated ();
-        }
-
         protected abstract void Create ();
         protected abstract void Update ();
     }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs	Tue Apr 29 22:09:35 2008
@@ -104,17 +104,18 @@
         {
         }
 
-        public PlaylistSource (string name, int? dbid, int primarySourceId) : this (name, dbid, -1, 0, primarySourceId)
+        protected PlaylistSource (string name, int? dbid, int primarySourceId) : this (name, dbid, -1, 0, primarySourceId, 0)
         {
         }
 
-        public PlaylistSource (string name, int? dbid, int sortColumn, int sortType, int primarySourceId)
+        protected PlaylistSource (string name, int? dbid, int sortColumn, int sortType, int primarySourceId, int count)
             : base (generic_name, name, dbid, sortColumn, sortType, primarySourceId)
         {
             Properties.SetString ("Icon.Name", "source-playlist");
             Properties.SetString ("RemoveTracksActionLabel", Catalog.GetString ("Remove From Playlist"));
             Properties.SetString ("UnmapSourceActionLabel", Catalog.GetString ("Delete Playlist"));
             DbId = dbid;
+            SavedCount = count;
         }
 
 #endregion
@@ -141,10 +142,11 @@
                     @"UPDATE {0}
                         SET Name = ?,
                             SortColumn = ?,
-                            SortType = ?
+                            SortType = ?,
+                            CachedCount = ?
                         WHERE PlaylistID = ?",
                     SourceTable
-                ), Name, -1, 0, dbid
+                ), Name, -1, 0, Count, dbid
             ));
         }
 
@@ -293,12 +295,13 @@
         public static IEnumerable<PlaylistSource> LoadAll (int primary_id)
         {
             using (IDataReader reader = ServiceManager.DbConnection.Query (
-                @"SELECT PlaylistID, Name, SortColumn, SortType, PrimarySourceID FROM CorePlaylists 
+                @"SELECT PlaylistID, Name, SortColumn, SortType, PrimarySourceID, CachedCount FROM CorePlaylists 
                     WHERE Special = 0 AND PrimarySourceID = ?", primary_id)) {
                 while (reader.Read ()) {
                     yield return new PlaylistSource (
                         reader[1] as string, Convert.ToInt32 (reader[0]),
-                        Convert.ToInt32 (reader[2]), Convert.ToInt32 (reader[3]), Convert.ToInt32 (reader[4])
+                        Convert.ToInt32 (reader[2]), Convert.ToInt32 (reader[3]), Convert.ToInt32 (reader[4]),
+                        Convert.ToInt32 (reader[5])
                     );
                 }
             }

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	Tue Apr 29 22:09:35 2008
@@ -48,6 +48,7 @@
 
         protected void OnStarted ()
         {
+            Hyena.Log.Information (String.Format ("{0} Client Started", ClientId));
             EventHandler handler = Started;
             if (handler != null) {
                 handler (this, EventArgs.Empty);

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs	Tue Apr 29 22:09:35 2008
@@ -175,7 +175,7 @@
 
 #region Constructors
 
-        public SmartPlaylistSource (string name, int primarySourceId) : this (null, name, String.Empty, String.Empty, String.Empty, String.Empty, primarySourceId)
+        public SmartPlaylistSource (string name, int primarySourceId) : this (null, name, String.Empty, String.Empty, String.Empty, String.Empty, primarySourceId, 0)
         {
         }
 
@@ -192,7 +192,7 @@
         }
 
         // For existing smart playlists that we're loading from the database
-        public SmartPlaylistSource (int? dbid, string name, string condition_xml, string order_by, string limit_number, string limit_criterion, int primarySourceId) :
+        protected SmartPlaylistSource (int? dbid, string name, string condition_xml, string order_by, string limit_number, string limit_criterion, int primarySourceId, int count) :
             base (generic_name, name, dbid, -1, 0, primarySourceId)
         {
             ConditionXml = condition_xml;
@@ -204,6 +204,7 @@
             LimitValue.ParseUserQuery (limit_number);
 
             DbId = dbid;
+            SavedCount = count;
 
             InstallProperties ();
 
@@ -286,13 +287,14 @@
                         Condition = ?,
                         OrderBy = ?,
                         LimitNumber = ?,
-                        LimitCriterion = ?
+                        LimitCriterion = ?,
+                        CachedCount = ?
                     WHERE SmartPlaylistID = ?",
                 Name, ConditionXml,
                 IsLimited ? QueryOrder.Name : null,
                 IsLimited ? LimitValue.ToSql () : null,
                 IsLimited ? Limit.Name : null,
-                DbId
+                Count, DbId
             ));
             UpdateDependencies ();
         }
@@ -454,7 +456,7 @@
         public static IEnumerable<SmartPlaylistSource> LoadAll (int primary_id)
         {
             using (IDataReader reader = ServiceManager.DbConnection.Query (
-                @"SELECT SmartPlaylistID, Name, Condition, OrderBy, LimitNumber, LimitCriterion, PrimarySourceID 
+                @"SELECT SmartPlaylistID, Name, Condition, OrderBy, LimitNumber, LimitCriterion, PrimarySourceID, CachedCount
                     FROM CoreSmartPlaylists WHERE PrimarySourceID = ?", primary_id)) {
                 while (reader.Read ()) {
                     SmartPlaylistSource playlist = null;
@@ -462,7 +464,8 @@
                         playlist = new SmartPlaylistSource (
                             Convert.ToInt32 (reader[0]), reader[1] as string,
                             reader[2] as string, reader[3] as string,
-                            reader[4] as string, reader[5] as string, Convert.ToInt32 (reader[6])
+                            reader[4] as string, reader[5] as string,
+                            Convert.ToInt32 (reader[6]), Convert.ToInt32 (reader[7])
                         );
                     } catch (Exception e) {
                         Log.Warning ("Ignoring Smart Playlist", String.Format ("Caught error: {0}", e), false);

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs	Tue Apr 29 22:09:35 2008
@@ -47,7 +47,7 @@
 
 namespace Banshee.Sources
 {
-    public abstract class DatabaseSource : Source, ITrackModelSource, IDurationAggregator, IFileSizeAggregator
+    public abstract class DatabaseSource : Source, ITrackModelSource, IDurationAggregator, IFileSizeAggregator, IDisposable
     {
         protected delegate void TrackRangeHandler (DatabaseTrackListModel model, RangeCollection.Range range);
 
@@ -72,6 +72,13 @@
         {
         }
 
+        public abstract void Save ();
+
+        public virtual void Dispose ()
+        {
+            Save ();
+        }
+
         protected override void Initialize ()
         {
             base.Initialize ();
@@ -127,7 +134,7 @@
 #region Public Properties
 
         public override int Count {
-            get { return DatabaseTrackModel.UnfilteredCount; }
+            get { return ever_reloaded ? DatabaseTrackModel.UnfilteredCount : SavedCount; }
         }
 
         public override int FilteredCount {
@@ -188,6 +195,12 @@
             get { return true; }
         }
 
+        private int saved_count;
+        protected int SavedCount {
+            get { return saved_count; }
+            set { saved_count = value; }
+        }
+
         public override bool AcceptsInputFromSource (Source source)
         {
             return CanAddTracks && source != this;
@@ -199,6 +212,7 @@
 
         public virtual void Reload ()
         {
+            ever_reloaded = true;
             reload_limiter.Execute ();
         }
 
@@ -394,12 +408,14 @@
         protected virtual void AfterInitialized ()
         {
             DatabaseTrackModel.Initialize (TrackCache, artist_model, album_model);
+            OnSetupComplete ();
+        }
 
-            ThreadAssist.SpawnFromMain (delegate {
-                // TODO delay or get rid of this reload altogether
+        private bool ever_reloaded = false;
+        public override void Activate ()
+        {
+            if (!ever_reloaded)
                 Reload ();
-                OnSetupComplete ();
-            });
         }
 
         protected virtual void RemoveTrackRange (DatabaseTrackListModel model, RangeCollection.Range range)

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs	Tue Apr 29 22:09:35 2008
@@ -152,8 +152,10 @@
         {
         }
 
-        public virtual void Dispose ()
+        public override void Dispose ()
         {
+            base.Dispose ();
+
             if (Application.ShuttingDown)
                 return;
 
@@ -177,8 +179,11 @@
             dbid = ServiceManager.DbConnection.Query<int> ("SELECT PrimarySourceID FROM CorePrimarySources WHERE StringID = ?", UniqueId);
             if (dbid == 0) {
                 dbid = ServiceManager.DbConnection.Execute ("INSERT INTO CorePrimarySources (StringID) VALUES (?)", UniqueId);
+            } else {
+                SavedCount = ServiceManager.DbConnection.Query<int> ("SELECT CachedCount FROM CorePrimarySources WHERE PrimarySourceID = ?", dbid);
             }
 
+            // Scope the tracks to this primary source
             track_model.Condition = String.Format ("CoreTracks.PrimarySourceID = {0}", dbid);
 
             primary_sources[dbid] = this;
@@ -192,6 +197,14 @@
                     AddChildSource (pl);
         }
 
+        public override void Save ()
+        {
+            ServiceManager.DbConnection.Execute (
+                "UPDATE CorePrimarySources SET CachedCount = ? WHERE PrimarySourceID = ?",
+                Count, DbId
+            );
+        }
+
         internal void NotifyTracksAdded ()
         {
             OnTracksAdded ();

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs	Tue Apr 29 22:09:35 2008
@@ -402,8 +402,8 @@
                 handler (this, EventArgs.Empty);
             }
         }
-        
-        protected virtual void OnUserNotifyUpdated ()
+
+        public virtual void OnUserNotifyUpdated ()
         {
             if (this != ServiceManager.SourceManager.ActiveSource) {
                 EventHandler handler = UserNotifyUpdated;

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs	Tue Apr 29 22:09:35 2008
@@ -63,7 +63,7 @@
         public event SourceAddedHandler SourceAdded;
         public event SourceEventHandler SourceRemoved;
         public event SourceEventHandler ActiveSourceChanged;
-        
+
         internal void LoadExtensionSources ()
         {
             lock (this) {
@@ -76,13 +76,7 @@
             lock (this) {
                 while (sources.Count > 0) {
                     Source source = sources[0];
-                    IDisposable disposable = source as IDisposable;
-                    
                     RemoveSource (source);
-                    
-                    if (disposable != null) {
-                        disposable.Dispose ();
-                    }
                 }
                 
                 sources.Clear ();
@@ -105,11 +99,6 @@
                     Source source = extension_sources[node.Id];
                     extension_sources.Remove (node.Id);
                     RemoveSource (source);
-                    
-                    IDisposable disposable = source as IDisposable;
-                    if (disposable != null) {
-                        disposable.Dispose ();
-                    }
                 }
             }
         }
@@ -181,6 +170,11 @@
                 RemoveSource(child_source);
             }
 
+            IDisposable disposable = source as IDisposable;
+            if (disposable != null) {
+                disposable.Dispose ();
+            }
+
             if(source == active_source) {
                 SetActiveSource(default_source);
             }

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs	Tue Apr 29 22:09:35 2008
@@ -165,7 +165,7 @@
             PlaylistSource playlist = new PlaylistSource ("New Playlist", ActivePrimarySource.DbId);
             playlist.Save ();
             playlist.PrimarySource.AddChildSource (playlist);
-            playlist.NotifyUpdated ();
+            playlist.OnUserNotifyUpdated ();
             //SourceView.BeginRenameSource (playlist);
         }
 

Modified: trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs	Tue Apr 29 22:09:35 2008
@@ -163,6 +163,7 @@
                     Log.DebugFormat ("Found DAP support ({0}) for device {1}", source.GetType ().FullName, source.Name);
                     sources.Add (device.Uuid, source);
                     ServiceManager.SourceManager.AddSource (source);
+                    source.OnUserNotifyUpdated ();
                 }
             }
         }

Modified: trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs	Tue Apr 29 22:09:35 2008
@@ -121,8 +121,10 @@
             }
         }
 
-        public void Dispose ()
+        public override void Dispose ()
         {
+            base.Dispose ();
+
             if (ClearOnQuitSchema.Get ()) {
                 OnClearPlayQueue (this, EventArgs.Empty);
             }



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