banshee r4502 - in trunk/banshee: . build src/Backends/Banshee.GStreamer src/Backends/Banshee.Gnome src/Backends/Banshee.Hal src/Backends/Banshee.NowPlaying.X11 src/Backends/Banshee.Unix src/Clients/Beroe src/Clients/Beroe/Beroe src/Clients/Muinshee src/Clients/Nereid src/Core/Banshee.Core src/Core/Banshee.Core/Banshee.Collection src/Core/Banshee.Core/Banshee.Configuration src/Core/Banshee.Services src/Core/Banshee.Services/Banshee.Collection.Database src/Core/Banshee.Services/Banshee.Collection.Indexer src/Core/Banshee.Services/Banshee.Configuration src/Core/Banshee.Services/Banshee.Library src/Core/Banshee.Services/Banshee.ServiceStack src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Gui src/Core/Banshee.Widgets src/Dap/Banshee.Dap src/Dap/Banshee.Dap.Ipod src/Dap/Banshee.Dap.MassStorage src/Dap/Banshee.Dap.Mtp src/Extensions/Banshee.AudioCd src/Extensions/Banshee.AudioCd/Banshee.AudioCd src/Extensions/Banshee.BooScript src/Extensions/ Banshee.Bookmarks src/Extensions/Banshee.CoverArt src/Extensions/Banshee.Daap src/Extensions/Banshee.FileSystemQueue src/Extensions/Banshee.InternetRadio src/Extensions/Banshee.Lastfm src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio src/Extensions/Banshee.MediaWeb src/Extensions/Banshee.MiniMode src/Extensions/Banshee.MultimediaKeys src/Extensions/Banshee.NotificationArea src/Extensions/Banshee.NowPlaying src/Extensions/Banshee.PlayQueue src/Extensions/Banshee.Sample src/Extensions/Banshee.SqlDebugConsole src/Extensions/Banshee.Torrent src/Libraries/Hyena src/Libraries/Hyena.Gui src/Libraries/Hyena/Hyena src/Libraries/Hyena/Hyena.Data.Sqlite src/Libraries/Hyena/Hyena.Query src/Libraries/Lastfm src/Libraries/Lastfm.Gui src/Libraries/Migo src/Libraries/Migo/Migo.Syndication src/Libraries/Mono.Media src/Libraries/Mtp src/Libraries/MusicBrainz



Author: abock
Date: Tue Sep  9 22:10:05 2008
New Revision: 4502
URL: http://svn.gnome.org/viewvc/banshee?rev=4502&view=rev

Log:
2008-09-09  Aaron Bockover  <abock gnome org>

    This commit implements the first pass at providing a mechanism for
    third party applications to query and index Banshee's collection in
    a safe way - both in process and over DBus. This is for you, GNOME Do.
    Still incomplete, but soon to be there. Lots already working. Yay.

    * src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs:
    * src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs:
    Factory service for creating indexers; accessible internally or over DBus

    * src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs:
    * src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs:
    Collection indexer implementation; allows snapshotting a track model
    and iterating over it to request tracks internally or over DBus; will
    be the object for third party applications to use to query/index Banshee's
    collection (GNOME Do, Beagle, Tangerine...)

    * src/Clients/Beroe/Beroe/Client.cs: A small standalone client that
    boots only enough services to run the collection indexer service so
    applications can read the collection even if Banshee may not already
    be running

    * src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs: Finish
    implementing the exportable reflector, cache reflection results for faster
    subsequent exports; support property aggregation and set linking through
    the type hirearchy so all properties marked as exportable are handled
    regardless of the defining type; used for exporting/serializing objects
    over DBus and for merging different track objects (track editor)

    * src/Core/Banshee.Services/Banshee.Sources/ITrackModelSource.cs:
    * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs:
    * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs:
    * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs:
    * src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs:
    Implement/Added ITrackModelSource.Indexable property

    * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs:
    Split the service manager initialization/registration chunks into separate
    methods so clients can have more control over which services they will
    depend on

    * src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs:
    Call the new startup methods on the service manager in a new Initialize
    method that clients can use

    * src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs: Call
    Application.Initialize

    * src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs:
    Added GLib mainloop support for clients that may strictly do DBus (Beroe)

    * src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs:
    Implemented object unregistering

    * src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs:
    Implement a method to snapshot the origin model into a cache model

    * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs:
    Made UnfilteredQuery property public

    * src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs:
    Implemented a configuration client that stores everything to memory
    and does not persist

    * src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs:
    Small fixes/optimization

    * src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs:
    Make MemoryConfigurationClient the default client if Mono.Addins is
    not initialized, otherwise clients are loaded from extensions, and
    the XmlConfigurationClient is the fallback

    * src/Libraries/Hyena/Hyena/Timer.cs: Output the timer to stderr

    * src/Libraries/Hyena/Hyena.Query/QueryOrder.cs:
    * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs:
    * src/Libraries/Migo/Migo.Syndication/Feed.cs:
    * build/build.rules.mk: Build fixes for gmcs 2.0



Added:
   trunk/banshee/src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs   (contents, props changed)
      - copied, changed from r4466, /trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs
Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/build/build.rules.mk
   trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj
   trunk/banshee/src/Backends/Banshee.Gnome/Banshee.Gnome.csproj
   trunk/banshee/src/Backends/Banshee.Hal/Banshee.Hal.csproj
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.csproj
   trunk/banshee/src/Backends/Banshee.Unix/Banshee.Unix.csproj
   trunk/banshee/src/Clients/Beroe/Beroe.csproj
   trunk/banshee/src/Clients/Beroe/Beroe/Client.cs
   trunk/banshee/src/Clients/Muinshee/Muinshee.csproj
   trunk/banshee/src/Clients/Nereid/Nereid.csproj
   trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
   trunk/banshee/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs
   trunk/banshee/src/Core/Banshee.Core/Banshee.Core.csproj
   trunk/banshee/src/Core/Banshee.Core/Makefile.am
   trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Services.csproj
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/ITrackModelSource.cs
   trunk/banshee/src/Core/Banshee.Services/Makefile.am
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
   trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.csproj
   trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod.csproj
   trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj
   trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp.csproj
   trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap.csproj
   trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd.csproj
   trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
   trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.csproj
   trunk/banshee/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks.csproj
   trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt.csproj
   trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.csproj
   trunk/banshee/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue.csproj
   trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.csproj
   trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs
   trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj
   trunk/banshee/src/Extensions/Banshee.MediaWeb/Banshee.MediaWeb.csproj
   trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode.csproj
   trunk/banshee/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys.csproj
   trunk/banshee/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea.csproj
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj
   trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.csproj
   trunk/banshee/src/Extensions/Banshee.Sample/Banshee.Sample.csproj
   trunk/banshee/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole.csproj
   trunk/banshee/src/Extensions/Banshee.Torrent/Banshee.Torrent.csproj
   trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.csproj
   trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Query/QueryOrder.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.csproj
   trunk/banshee/src/Libraries/Hyena/Hyena/Timer.cs
   trunk/banshee/src/Libraries/Lastfm.Gui/Lastfm.Gui.csproj
   trunk/banshee/src/Libraries/Lastfm/Lastfm.csproj
   trunk/banshee/src/Libraries/Migo/Migo.Syndication/Feed.cs
   trunk/banshee/src/Libraries/Migo/Migo.csproj
   trunk/banshee/src/Libraries/Mono.Media/Mono.Media.csproj
   trunk/banshee/src/Libraries/Mtp/Mtp.csproj
   trunk/banshee/src/Libraries/MusicBrainz/MusicBrainz.csproj

Modified: trunk/banshee/build/build.rules.mk
==============================================================================
--- trunk/banshee/build/build.rules.mk	(original)
+++ trunk/banshee/build/build.rules.mk	Tue Sep  9 22:10:05 2008
@@ -53,7 +53,7 @@
 	test "x$$colors" = "xyes" && \
 		echo -e "\033[1mCompiling $(notdir $@)...\033[0m" || \
 		echo "Compiling $(notdir $@)...";
-	@test "x$(DEVEL_BUILD)" = "xyes" && warn="-warnaserror"; $(BUILD) -target:$(TARGET) -out:$@ $$warn -define:HAVE_GTK_2_10 -define:NET_2_0 $(ENABLE_TESTS_FLAG) $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD) 
+	@test "x$(DEVEL_BUILD)" = "xyes" && warn="-warnaserror"; $(BUILD) -nowarn:0078 -target:$(TARGET) -out:$@ $$warn -define:HAVE_GTK_2_10 -define:NET_2_0 $(ENABLE_TESTS_FLAG) $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD) 
 	@if [ -e $(notdir $  config) ]; then \
 		cp $(notdir $  config) $(top_builddir)/bin; \
 	fi;

Modified: trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj
==============================================================================
--- trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj	(original)
+++ trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.MediaEngine.GStreamer</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Backends/Banshee.Gnome/Banshee.Gnome.csproj
==============================================================================
--- trunk/banshee/src/Backends/Banshee.Gnome/Banshee.Gnome.csproj	(original)
+++ trunk/banshee/src/Backends/Banshee.Gnome/Banshee.Gnome.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Gnome</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Backends/Banshee.Hal/Banshee.Hal.csproj
==============================================================================
--- trunk/banshee/src/Backends/Banshee.Hal/Banshee.Hal.csproj	(original)
+++ trunk/banshee/src/Backends/Banshee.Hal/Banshee.Hal.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Hal</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.csproj
==============================================================================
--- trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.csproj	(original)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.NowPlaying.X11</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Backends/Banshee.Unix/Banshee.Unix.csproj
==============================================================================
--- trunk/banshee/src/Backends/Banshee.Unix/Banshee.Unix.csproj	(original)
+++ trunk/banshee/src/Backends/Banshee.Unix/Banshee.Unix.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Unix</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Clients/Beroe/Beroe.csproj
==============================================================================
--- trunk/banshee/src/Clients/Beroe/Beroe.csproj	(original)
+++ trunk/banshee/src/Clients/Beroe/Beroe.csproj	Tue Sep  9 22:10:05 2008
@@ -25,6 +25,7 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
+    <Reference Include="NDesk.DBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f6716e4f9b2ed099" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\Core\Banshee.Services\Banshee.Services.csproj">

Modified: trunk/banshee/src/Clients/Beroe/Beroe/Client.cs
==============================================================================
--- trunk/banshee/src/Clients/Beroe/Beroe/Client.cs	(original)
+++ trunk/banshee/src/Clients/Beroe/Beroe/Client.cs	Tue Sep  9 22:10:05 2008
@@ -29,11 +29,13 @@
 using System;
 
 using NDesk.DBus;
-
 using Hyena;
+
 using Banshee.Base;
+using Banshee.Database;
 using Banshee.ServiceStack;
-using Banshee.Library;
+using Banshee.Sources;
+using Banshee.Collection.Indexer;
 
 namespace Beroe
 {
@@ -46,10 +48,10 @@
             }
             
             if (!DBusConnection.Enabled) {
-                Error ("All commands ignored, DBus support is disabled");
+                Log.Error ("All commands ignored, DBus support is disabled");
                 return;
             } else if (DBusConnection.InstanceAlreadyRunning) {
-                Error ("Banshee is already running");
+                Log.Error ("Banshee is already running");
                 return;
             }
             
@@ -58,24 +60,19 @@
         
         private static void Startup ()
         {
-            /*ThreadAssist.InitializeMainThread ();
+            ThreadAssist.InitializeMainThread ();
             
             ServiceManager.Initialize ();
-            ServiceManager.RegisterService<Banshee.Database.BansheeDbConnection> ();
-            ServiceManager.RegisterService<Banshee.Sources.SourceManager> ();
+            ServiceManager.RegisterService<DBusServiceManager> ();
+            ServiceManager.RegisterService<BansheeDbConnection> ();
+            ServiceManager.RegisterService<SourceManager> ();
+            ServiceManager.RegisterService<CollectionIndexerService> ();
             ServiceManager.Run ();
             
-            ServiceManager.SourceManager.AddSource (new MusicLibrarySource (), true);
-            ServiceManager.SourceManager.AddSource (new VideoLibrarySource (), false);
+            ServiceManager.SourceManager.AddSource (new Banshee.Library.MusicLibrarySource ());
+            ServiceManager.SourceManager.AddSource (new Banshee.Library.VideoLibrarySource ());
             
-            while (true) {
-                System.Threading.Thread.Sleep (100);
-            }*/
-        }
-        
-        private static void Error (string error, params object [] args)
-        {
-            Console.WriteLine ("Error: {0}", String.Format (error, args));
+            DBusConnection.RunMainLoop ();
         }
     }
 }

Modified: trunk/banshee/src/Clients/Muinshee/Muinshee.csproj
==============================================================================
--- trunk/banshee/src/Clients/Muinshee/Muinshee.csproj	(original)
+++ trunk/banshee/src/Clients/Muinshee/Muinshee.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Exe</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Muinshee</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Clients/Nereid/Nereid.csproj
==============================================================================
--- trunk/banshee/src/Clients/Nereid/Nereid.csproj	(original)
+++ trunk/banshee/src/Clients/Nereid/Nereid.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Exe</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Nereid</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	Tue Sep  9 22:10:05 2008
@@ -459,12 +459,20 @@
             }
         }
         
+#region Exportable Properties
+        
         public static void ExportableMerge (TrackInfo source, TrackInfo dest)
         {
-            foreach (PropertyInfo property in typeof (TrackInfo).GetProperties (BindingFlags.Public | BindingFlags.Instance)) {
+            // Use the high level TrackInfo type if the source and dest types differ
+            Type type = dest.GetType ();
+            if (source.GetType () != type) {
+                type = typeof (TrackInfo);
+            }
+            
+            foreach (KeyValuePair<string, PropertyInfo> iter in GetExportableProperties (type)) {
                 try {
-                    object [] exportable_attrs = property.GetCustomAttributes (typeof (TrackInfo.ExportableAttribute), true);
-                    if (exportable_attrs != null && exportable_attrs.Length > 0 && property.CanWrite) {
+                    PropertyInfo property = iter.Value;
+                    if (property.CanWrite && property.CanRead) {
                         property.SetValue (dest, property.GetValue (source, null), null);
                     }
                 } catch (Exception e) {
@@ -472,23 +480,14 @@
                 }
             }
         }
-
-        // Generates a{sv} of self according to http://wiki.xmms2.xmms.se/index.php/Media_Player_Interfaces#.22Metadata.22
+        
         public IDictionary<string, object> GenerateExportable ()
         {
             Dictionary<string, object> dict = new Dictionary<string, object> ();
-            
-            foreach (PropertyInfo property in GetType ().GetProperties (BindingFlags.Public | BindingFlags.Instance)) {
-                object [] exportable_attrs = property.GetCustomAttributes (typeof (TrackInfo.ExportableAttribute), true);
-                if (exportable_attrs == null || exportable_attrs.Length == 0) {
-                    continue;
-                }
-                
-                string export_name = ((ExportableAttribute)exportable_attrs[0]).ExportName
-                    ?? StringUtil.CamelCaseToUnderCase (property.Name, '-');
-                
-                object value = property.GetValue (this, null);
-                if (String.IsNullOrEmpty (export_name) || value == null) {
+
+            foreach (KeyValuePair<string, PropertyInfo> property in GetExportableProperties (GetType ())) {
+                object value = property.Value.GetValue (this, null);
+                if (value == null) {
                     continue;
                 }
                 
@@ -508,14 +507,115 @@
                     value is float || value is double ||
                     value is bool || value is string)) {
                     Log.WarningFormat ("Invalid property in {0} marked as [Exportable]: ({1} is a {2})", 
-                        property.DeclaringType, property.Name, value.GetType ());
+                        property.Value.DeclaringType, property.Value.Name, value.GetType ());
                     continue;
                 }
                 
-                dict.Add (export_name, value);
+                dict.Add (property.Key, value);
             }
             
             return dict;
         }
+        
+        private static Dictionary<Type, Dictionary<string, PropertyInfo>> exportable_properties;
+        private static object exportable_properties_mutex = new object ();
+        
+        private static void FindExportableProperties (Type type)
+        {
+            lock (exportable_properties_mutex) {
+                if (exportable_properties == null) {
+                    exportable_properties = new Dictionary<Type, Dictionary<string, PropertyInfo>> ();
+                } else if (exportable_properties.ContainsKey (type)) {
+                    return;
+                }
+                
+                // Build a stack of types to reflect
+                Stack<Type> probe_types = new Stack<Type> ();
+                Type probe_type = type;
+                while (probe_type != null) {
+                    probe_types.Push (probe_type);
+                    if (probe_type == typeof (TrackInfo)) {
+                        break;
+                    }
+                    probe_type = probe_type.BaseType;
+                }
+            
+                // Iterate through all types
+                while (probe_types.Count > 0) {
+                    probe_type = probe_types.Pop ();
+                    if (exportable_properties.ContainsKey (probe_type)) {
+                        continue;
+                    }
+                    
+                    Dictionary<string, PropertyInfo> properties = null;
+                    
+                    // Reflect the type for exportable properties
+                    foreach (PropertyInfo property in probe_type.GetProperties (BindingFlags.Public | BindingFlags.Instance)) {
+                        if (property.DeclaringType != probe_type) {
+                            continue;
+                        }
+                        
+                        object [] exportable_attrs = property.GetCustomAttributes (typeof (ExportableAttribute), true);
+                        if (exportable_attrs == null || exportable_attrs.Length == 0) {
+                            continue;
+                        }
+                        
+                        string export_name = ((ExportableAttribute)exportable_attrs[0]).ExportName
+                            ?? StringUtil.CamelCaseToUnderCase (property.Name, '-');
+                        
+                        if (String.IsNullOrEmpty (export_name) || (properties != null && properties.ContainsKey (export_name))) {
+                            continue;
+                        }
+                        
+                        if (properties == null) {
+                            properties = new Dictionary<string, PropertyInfo> ();
+                            exportable_properties.Add (probe_type, properties);
+                        }
+                        
+                        properties.Add (export_name, property);
+                    }
+                    
+                    // Merge properties in the type hierarchy through linking or aggregation
+                    Type parent_type = probe_type.BaseType;
+                    bool link = !exportable_properties.ContainsKey (probe_type);
+                    
+                    while (parent_type != null) {
+                        Dictionary<string, PropertyInfo> parent_properties = null;
+                        if (!exportable_properties.TryGetValue (parent_type, out parent_properties)) {
+                            parent_type = parent_type.BaseType;
+                            continue;
+                        }
+                        
+                        if (link) {
+                            // Link entire property set between types
+                            exportable_properties.Add (probe_type, parent_properties);
+                            return;
+                        } else {
+                            // Aggregate properties in parent sets
+                            foreach (KeyValuePair<string, PropertyInfo> parent_property in parent_properties) {
+                                properties.Add (parent_property.Key, parent_property.Value);
+                            }
+                        }
+                        
+                        parent_type = parent_type.BaseType;
+                    }
+                }
+            }
+        }
+        
+        private static IEnumerable<KeyValuePair<string, PropertyInfo>> GetExportableProperties (Type type)
+        {
+            FindExportableProperties (type);
+            
+            Dictionary<string, PropertyInfo> properties = null;
+            if (exportable_properties.TryGetValue (type, out properties)) {
+                foreach (KeyValuePair<string, PropertyInfo> property in properties) {
+                    yield return property;
+                }
+            }
+        }
+        
+#endregion
+
     }
 }

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs	Tue Sep  9 22:10:05 2008
@@ -45,20 +45,24 @@
                     return;
                 }
                 
-                foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes (
-                    "/Banshee/Platform/ConfigurationClient")) {
-                    try {
-                        client = (IConfigurationClient)node.CreateInstance (typeof (IConfigurationClient));
-                        if (client != null) {
-                            break;
+                if (AddinManager.IsInitialized) {
+                    foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes (
+                        "/Banshee/Platform/ConfigurationClient")) {
+                        try {
+                            client = (IConfigurationClient)node.CreateInstance (typeof (IConfigurationClient));
+                            if (client != null) {
+                                break;
+                            }
+                        } catch (Exception e) {
+                            Log.Warning ("Configuration client extension failed to load", e.Message);
                         }
-                    } catch (Exception e) {
-                        Log.Warning ("Configuration client extension failed to load", e.Message);
                     }
-                }
-                
-                if (client == null) {
-                    client = new XmlConfigurationClient ();
+                    
+                    if (client == null) {
+                        client = new XmlConfigurationClient ();
+                    }
+                } else {
+                    client = new MemoryConfigurationClient ();
                 }
                 
                 Log.DebugFormat ("Configuration client extension loaded ({0})", client.GetType ().FullName);

Added: trunk/banshee/src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs	Tue Sep  9 22:10:05 2008
@@ -0,0 +1,107 @@
+//
+// MemoryConfigurationClient.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// 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 System.Collections.Generic;
+
+namespace Banshee.Configuration
+{
+    public class MemoryConfigurationClient : IConfigurationClient
+    {
+        private Dictionary<string, object> config = new Dictionary<string, object> ();
+
+#region Helper Overrides
+
+        public T Get<T> (SchemaEntry<T> entry)
+        {
+            return Get (entry.Namespace, entry.Key, entry.DefaultValue);
+        }
+
+        public T Get<T> (SchemaEntry<T> entry, T fallback)
+        {
+            return Get (entry.Namespace, entry.Key, fallback);
+        }
+
+        public T Get<T> (string key, T fallback)
+        {
+            return Get (null, key, fallback);
+        }
+
+        public void Set<T> (SchemaEntry<T> entry, T value)
+        {
+            Set (entry.Namespace, entry.Key, value);
+        }
+
+        public void Set<T> (string key, T value)
+        {
+            Set (null, key, value);
+        }
+
+#endregion
+
+#region Implementation
+
+        public T Get<T> (string namespce, string key, T fallback)
+        {
+            lock (this) {
+                string fq_key = MakeKey (namespce, key);
+                object value;
+                
+                if (config.TryGetValue (fq_key, out value)) {
+                    if (value == null) {
+                        return default (T);
+                    } else if (value.GetType () == typeof (T)) {
+                        return (T)value;
+                    }
+                }
+                
+                return fallback;
+            }
+        }
+
+        public void Set<T> (string namespce, string key, T value)
+        {
+            lock (this) {
+                string fq_key = MakeKey (namespce, key);
+                if (config.ContainsKey (fq_key)) {
+                    config[fq_key] = value;
+                } else {
+                    config.Add (fq_key, value);
+                }
+            }
+        }
+                
+        public static string MakeKey (string namespce, string key)
+        {
+            return String.Format ("{0}{1}{2}", namespce, String.IsNullOrEmpty (namespce) ? String.Empty : ".", key);
+        }
+        
+#endregion
+
+    }
+}

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Core.csproj
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Core.csproj	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Core.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Core</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -97,6 +98,7 @@
     <Compile Include="Banshee.Kernel\DelegateJob.cs" />
     <Compile Include="Banshee.Collection\CacheableItem.cs" />
     <Compile Include="Banshee.IO\DirectoryScannerPipelineElement.cs" />
+    <Compile Include="Banshee.Configuration\MemoryConfigurationClient.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Resources\contributors.xml">

Modified: trunk/banshee/src/Core/Banshee.Core/Makefile.am
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Makefile.am	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Makefile.am	Tue Sep  9 22:10:05 2008
@@ -32,6 +32,7 @@
 	Banshee.Configuration.Schema/LibrarySchema.cs \
 	Banshee.Configuration/ConfigurationClient.cs \
 	Banshee.Configuration/IConfigurationClient.cs \
+	Banshee.Configuration/MemoryConfigurationClient.cs \
 	Banshee.Configuration/SchemaEntry.cs \
 	Banshee.Configuration/XmlConfigurationClient.cs \
 	Banshee.I18n/AssemblyCatalogAttribute.cs \

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs	Tue Sep  9 22:10:05 2008
@@ -54,6 +54,24 @@
 
         private BansheeModelCache<T> cache;
         
+        public static CachedList<DatabaseTrackInfo> CreateFromSourceModel (DatabaseTrackListModel model)
+        {
+            CachedList<DatabaseTrackInfo> list = new CachedList<DatabaseTrackInfo> (DatabaseTrackInfo.Provider);
+
+            HyenaSqliteCommand model_cache_command = new HyenaSqliteCommand (String.Format (@"
+                INSERT INTO CoreCache (ModelID, ItemID)
+                    SELECT ?, CoreTracks.TrackID {0}", model.UnfilteredQuery
+            ));
+            
+            lock (model) {
+                ServiceManager.DbConnection.Execute (model_cache_command, list.CacheId);
+            }
+
+            list.cache.UpdateAggregates ();
+
+            return list;  
+        }
+        
         public static CachedList<DatabaseTrackInfo> CreateFromModel (DatabaseTrackListModel model)
         {
             Selection selection = new Selection ();
@@ -83,7 +101,6 @@
             }
 
             list.cache.UpdateAggregates ();
-
             return list;
         }
 
@@ -91,10 +108,10 @@
         {
             string uuid = NextCacheId ();
             cache = new BansheeModelCache <T> (ServiceManager.DbConnection, uuid, CacheableDatabaseModel.Instance, provider);
-            Clear ();
+            Dispose ();
         }
 
-        public void Clear ()
+        public void Dispose ()
         {
             ServiceManager.DbConnection.Execute ("DELETE FROM CoreCache WHERE ModelId = ?", CacheId);
         }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs	Tue Sep  9 22:10:05 2008
@@ -188,7 +188,7 @@
         }
 
         private string unfiltered_query;
-        protected string UnfilteredQuery {
+        public string UnfilteredQuery {
             get {
                 return unfiltered_query ?? unfiltered_query = String.Format (
                     "FROM {0}{1} WHERE {2} {3}",

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs	Tue Sep  9 22:10:05 2008
@@ -27,13 +27,135 @@
 //
 
 using System;
+using System.Collections.Generic;
+
+using Hyena;
+
+using Banshee.Sources;
+using Banshee.Library;
+using Banshee.ServiceStack;
+using Banshee.Collection;
+using Banshee.Collection.Database;
 
 namespace Banshee.Collection.Indexer
 {
-    public class CollectionIndexer
+    public class CollectionIndexer : ICollectionIndexer, IDisposable
     {
-        public CollectionIndexer ()
+        private static int instance_count = 0;
+        
+        private CollectionIndexerService service;
+        private List<CachedList<DatabaseTrackInfo>> model_caches = new List<CachedList<DatabaseTrackInfo>> ();
+        
+        private event IndexingFinishedHandler indexing_finished;
+        event IndexingFinishedHandler ICollectionIndexer.IndexingFinished {
+            add { indexing_finished += value; }
+            remove { indexing_finished -= value; }
+        }
+        
+        public event EventHandler IndexingFinished;
+        
+        internal CollectionIndexer (CollectionIndexerService service)
+        {
+            this.service = service;
+        }
+        
+        public void Dispose ()
+        {
+            DisposeModels ();
+            
+            if (service != null) {
+                service.DisposeIndexer (this);
+            }
+        }
+        
+        private void DisposeModels ()
+        {
+            foreach (CachedList<DatabaseTrackInfo> model in model_caches) {
+                model.Dispose ();
+            }
+            
+            model_caches.Clear ();
+        }
+        
+        public void Start ()
+        {
+            lock (this) {
+                DisposeModels ();
+                
+                foreach (Source source in ServiceManager.SourceManager.Sources) {
+                    DatabaseSource db_source = source as DatabaseSource;
+                    if (db_source != null && db_source.Indexable) {
+                        model_caches.Add (CachedList<DatabaseTrackInfo>.CreateFromSourceModel (
+                            (DatabaseTrackListModel)db_source.TrackModel));
+                    }
+                }
+            }
+            
+            OnIndexingFinished ();
+        }
+        
+        public bool SaveToXml (string path)
         {
+            lock (this) {
+                return false;
+            }
+        }
+        
+        public IDictionary<string, object> GetResult (int modelIndex, int itemIndex)
+        {
+            lock (this) {
+                if (modelIndex < 0 || modelIndex >= model_caches.Count) {
+                    throw new IndexOutOfRangeException ("modelIndex");
+                }
+                
+                CachedList<DatabaseTrackInfo> model = model_caches[modelIndex];
+                
+                if (itemIndex < 0 || itemIndex >= model.Count) {
+                    throw new IndexOutOfRangeException ("itemIndex");
+                }
+                
+                return model[modelIndex].GenerateExportable ();
+            }
+        }
+        
+        public int GetModelCounts ()
+        {
+            lock (this) {
+                return model_caches.Count;
+            }
+        }
+        
+        public int GetModelResultsCount (int modelIndex)
+        {
+            lock (this) {
+                if (modelIndex < 0 || modelIndex >= model_caches.Count) {
+                    return -1;
+                }
+                
+                return model_caches[modelIndex].Count;
+            }
+        }
+        
+        protected virtual void OnIndexingFinished ()
+        {
+            EventHandler handler = IndexingFinished;
+            if (handler != null) {
+                handler (this, EventArgs.Empty);
+            }
+        
+            IndexingFinishedHandler dbus_handler = indexing_finished;
+            if (dbus_handler != null) {
+                dbus_handler ();
+            }
+        }
+        
+        private string service_name = String.Format ("CollectionIndexer_{0}", instance_count++);
+        string IService.ServiceName {
+            get { return service_name; }
+        }
+        
+        IDBusExportable IDBusExportable.Parent {
+            get { return service; }
         }
     }
 }

Copied: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs (from r4466, /trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs)
==============================================================================
--- /trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs	Tue Sep  9 22:10:05 2008
@@ -27,13 +27,59 @@
 //
 
 using System;
+using System.Collections.Generic;
+
+using NDesk.DBus;
+
+using Banshee.ServiceStack;
 
 namespace Banshee.Collection.Indexer
 {
-    public class CollectionIndexer
+    public class CollectionIndexerService : ICollectionIndexerService
     {
-        public CollectionIndexer ()
+        private List<TrackListModel> models = new List<TrackListModel> ();
+        
+        public void AddModel (TrackListModel model)
+        {
+            models.Add (model);
+        }
+        
+        public IEnumerable<IDictionary<string, object>> CreateIndex ()
+        {
+            yield break;
+        }
+        
+        public IEnumerable<IDictionary<string, object>> GenerateExportable ()
+        {
+            foreach (TrackListModel model in models) {
+                model.Reload ();
+                for (int i = 0, n = model.Count; i < n; i++) {
+                    yield return model[i].GenerateExportable ();
+                }
+            }
+        }
+        
+        public ICollectionIndexer CreateIndexer ()
+        {
+            return new CollectionIndexer (null);
+        }
+        
+        internal void DisposeIndexer (CollectionIndexer indexer)
         {
+            ServiceManager.DBusServiceManager.UnregisterObject (indexer);
+        }
+        
+        ObjectPath ICollectionIndexerService.CreateIndexer ()
+        {
+            return ServiceManager.DBusServiceManager.RegisterObject (new CollectionIndexer (this));
+        }
+        
+        IDBusExportable IDBusExportable.Parent { 
+            get { return null; }
+        }
+        
+        string IService.ServiceName {
+            get { return "CollectionIndexerService"; }
         }
     }
 }

Added: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs	Tue Sep  9 22:10:05 2008
@@ -0,0 +1,53 @@
+//
+// ICollectionIndexer.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// 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 System.Collections.Generic;
+using NDesk.DBus;
+
+using Banshee.ServiceStack;
+
+namespace Banshee.Collection.Indexer
+{
+    public delegate void IndexingFinishedHandler ();
+    
+    [Interface ("org.bansheeproject.Banshee.CollectionIndexer")]
+    public interface ICollectionIndexer : IService, IDBusExportable
+    {
+        event IndexingFinishedHandler IndexingFinished;
+            
+        void Start ();
+        void Dispose ();
+        
+        int GetModelCounts ();
+        int GetModelResultsCount (int modelIndex);
+        IDictionary<string, object> GetResult (int modelIndex, int itemIndex);
+        
+        bool SaveToXml (string path);
+    }
+}

Added: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs	Tue Sep  9 22:10:05 2008
@@ -0,0 +1,43 @@
+//
+// ICollectionIndexer.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// 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 Banshee.ServiceStack;
+
+namespace Banshee.Collection.Indexer
+{
+    public delegate void CollectionChangedHandler ();
+
+    [Interface ("org.bansheeproject.Banshee.CollectionIndexerService")]
+    public interface ICollectionIndexerService : IService, IDBusExportable
+    {
+        ObjectPath CreateIndexer ();
+    }
+}

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs	Tue Sep  9 22:10:05 2008
@@ -95,7 +95,8 @@
         
         private IDataReader Get (string namespce, string key)
         {
-            return connection.Query (select_value_command, MakeKey (namespce, key));
+            return connection.Query (select_value_command, 
+                Banshee.Configuration.MemoryConfigurationClient.MakeKey (namespce, key));
         }
 
         public void Set <T> (SchemaEntry<T> entry, T value)
@@ -110,21 +111,14 @@
 
         public void Set <T> (string namespce, string key, T value)
         {
-            if (connection.Query<int> (select_id_command, MakeKey (namespce, key)) > 0) {
-                connection.Execute (update_command, value.ToString (), MakeKey (namespce, key));
+            string fq_key = Banshee.Configuration.MemoryConfigurationClient.MakeKey (namespce, key);
+            if (connection.Query<int> (select_id_command, fq_key) > 0) {
+                connection.Execute (update_command, value.ToString (), fq_key);
             } else {
-                connection.Execute (insert_command, MakeKey (namespce, key), value.ToString ());
+                connection.Execute (insert_command, fq_key, value.ToString ());
             }
         }
-        
-        private static string MakeKey (string namespce, string key)
-        {
-            return String.Format (
-                "{0}{1}{2}",
-                namespce, String.IsNullOrEmpty (namespce) ? String.Empty : ".", key
-            );
-        }
-        
+
         protected virtual string TableName {
             get { return "CoreConfiguration"; }
         }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs	Tue Sep  9 22:10:05 2008
@@ -79,6 +79,10 @@
         public override string BaseDirectory {
             get { return Paths.CachedLibraryLocation; }
         }
+        
+        public override bool Indexable {
+            get { return true; }
+        }
 
         /*public override void CopyTrackTo (DatabaseTrackInfo track, SafeUri uri, UserJob job)
         {

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	Tue Sep  9 22:10:05 2008
@@ -71,6 +71,11 @@
         private static Stack<Client> running_clients = new Stack<Client> ();
         private static bool shutting_down;
 
+        public static void Initialize ()
+        {
+            ServiceManager.DefaultInitialize ();
+        }
+
         public static void Run ()
         {
             Banshee.Base.PlatformHacks.TrapMonoJitSegv ();

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs	Tue Sep  9 22:10:05 2008
@@ -84,5 +84,25 @@
             Log.DebugFormat ("NDesk.DBus.Bus.Session.RequestName ('{0}') => {1}", BusName, name_reply);
             return name_reply;
         }
+        
+        private static GLib.MainLoop mainloop;
+        
+        public static void RunMainLoop ()
+        {
+            if (mainloop == null) {
+                mainloop = new GLib.MainLoop ();
+            }
+            
+            if (!mainloop.IsRunning) {
+                mainloop.Run ();
+            }
+        }
+        
+        public static void QuitMainLoop ()
+        {
+            if (mainloop != null && mainloop.IsRunning) {
+                mainloop.Quit ();
+            }
+        }
     }
 }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs	Tue Sep  9 22:10:05 2008
@@ -42,6 +42,7 @@
     public class DBusServiceManager : IService
     {
         public const string ObjectRoot = "/org/bansheeproject/Banshee";
+        private Dictionary<object, ObjectPath> registered_objects = new Dictionary<object, ObjectPath> ();
         
         public DBusServiceManager ()
         {
@@ -96,23 +97,41 @@
             return paths.ToArray ();
         }
         
-        public void RegisterObject (IDBusExportable o)
+        public ObjectPath RegisterObject (IDBusExportable o)
         {
-            RegisterObject (o, MakeObjectPath (o));
+            return RegisterObject (o, MakeObjectPath (o));
         }
         
-        public void RegisterObject (object o, string objectName)
+        public ObjectPath RegisterObject (object o, string objectName)
         {
+            ObjectPath path = null;
+            
             if (DBusConnection.Enabled && Bus.Session != null) {
+                lock (registered_objects) {
+                    registered_objects.Add (o, path = new ObjectPath (objectName));
+                }
                 #pragma warning disable 0618
-                Bus.Session.Register (DBusConnection.BusName, new ObjectPath (objectName), o);
+                Bus.Session.Register (DBusConnection.BusName, path, o);
                 #pragma warning restore 0618
             }
+            
+            return path;
         }
 
         public void UnregisterObject (object o)
         {
-            //TODO: unregistering objects with managed dbus
+            ObjectPath path = null;
+            lock (registered_objects) {
+                if (!registered_objects.TryGetValue (o, out path)) {
+                    Log.WarningFormat ("Unable to unregister DBus object {0}, does not appear to be registered", 
+                        o.GetType ());
+                    return;
+                }
+                
+                registered_objects.Remove (o);
+            }
+        
+            Bus.Session.Unregister (path);
         }
         
         public static T FindInstance<T> (string objectPath) where T : class

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	Tue Sep  9 22:10:05 2008
@@ -59,7 +59,33 @@
         public static event EventHandler StartupFinished;
         public static event ServiceStartedHandler ServiceStarted;
         
-        static ServiceManager ()
+        public static void Initialize ()
+        {
+            Application.ClientStarted += OnClientStarted;
+        }
+        
+        public static void InitializeAddins ()
+        {
+            AddinManager.Initialize (ApplicationContext.CommandLine.Contains ("uninstalled") 
+                ? "." : Paths.ApplicationData);
+            
+            IProgressStatus monitor = ApplicationContext.CommandLine.Contains ("debug-addins")
+                ? new ConsoleProgressStatus (true)
+                : null;
+        
+            if (ApplicationContext.Debugging) {
+                AddinManager.Registry.Rebuild (monitor);
+            } else {
+                AddinManager.Registry.Update (monitor);
+            }
+        }
+           
+        public static void RegisterAddinServices ()
+        {
+            extension_nodes = AddinManager.GetExtensionNodes ("/Banshee/ServiceManager/Service");
+        }
+        
+        public static void RegisterDefaultServices ()
         {
             RegisterService<DBusServiceManager> ();
             RegisterService<DBusCommandService> ();
@@ -74,23 +100,15 @@
             RegisterService<LibraryImportManager> ();
             RegisterService<UserJobManager> ();
             RegisterService<Banshee.Hardware.HardwareManager> ();
-            
-            AddinManager.Initialize (ApplicationContext.CommandLine.Contains ("uninstalled") 
-                ? "." : Paths.ApplicationData);
-            
-            IProgressStatus monitor = ApplicationContext.CommandLine.Contains ("debug-addins")
-                ? new ConsoleProgressStatus (true)
-                : null;
+            RegisterService<Banshee.Collection.Indexer.CollectionIndexerService> ();
+        }
         
-            if (ApplicationContext.Debugging) {
-                AddinManager.Registry.Rebuild (monitor);
-            } else {
-                AddinManager.Registry.Update (monitor);
-            }
-            
-            extension_nodes = AddinManager.GetExtensionNodes ("/Banshee/ServiceManager/Service");
-
-            Application.ClientStarted += OnClientStarted;
+        public static void DefaultInitialize ()
+        {
+            Initialize ();
+            InitializeAddins ();
+            RegisterDefaultServices ();
+            RegisterAddinServices ();
         }
 
         private static void OnClientStarted (Client client)
@@ -109,11 +127,15 @@
                     RegisterService (type);
                 }
                 
-                foreach (TypeExtensionNode node in extension_nodes) {
-                    StartExtension (node);
+                if (extension_nodes != null) {
+                    foreach (TypeExtensionNode node in extension_nodes) {
+                        StartExtension (node);
+                    }
                 }
                 
-                AddinManager.AddExtensionNodeHandler ("/Banshee/ServiceManager/Service", OnExtensionChanged);
+                if (AddinManager.IsInitialized) {
+                    AddinManager.AddExtensionNodeHandler ("/Banshee/ServiceManager/Service", OnExtensionChanged);
+                }
                 
                 is_initialized = true;
                 
@@ -351,7 +373,7 @@
         }
         
         public static DBusServiceManager DBusServiceManager {
-            get { return (DBusServiceManager)Get ("DBusServiceManager"); }
+            get { return Get<DBusServiceManager> (); }
         }
                 
         public static BansheeDbConnection DbConnection {

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Services.csproj
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Services.csproj	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Services.csproj	Tue Sep  9 22:10:05 2008
@@ -226,6 +226,9 @@
     <Compile Include="Banshee.Collection\MoveOnInfoSaveJob.cs" />
     <Compile Include="Banshee.ServiceStack\IRegisterOnDemandService.cs" />
     <Compile Include="Banshee.Web\HttpRequest.cs" />
+    <Compile Include="Banshee.Collection.Indexer\CollectionIndexerService.cs" />
+    <Compile Include="Banshee.Collection.Indexer\ICollectionIndexerService.cs" />
+    <Compile Include="Banshee.Collection.Indexer\ICollectionIndexer.cs" />
     <Compile Include="Banshee.Collection.Indexer\CollectionIndexer.cs" />
     <Compile Include="Banshee.Configuration\DefaultApplicationHelper.cs" />
   </ItemGroup>

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 Sep  9 22:10:05 2008
@@ -255,6 +255,10 @@
             get { return true; }
         }
 
+        public virtual bool Indexable {
+            get { return false; }
+        }
+
         private int saved_count;
         protected int SavedCount {
             get { return saved_count; }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/ITrackModelSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/ITrackModelSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/ITrackModelSource.cs	Tue Sep  9 22:10:05 2008
@@ -51,5 +51,6 @@
         bool ConfirmRemoveTracks { get; }
         
         bool ShowBrowser { get; }
+        bool Indexable { get; }
     }
 }

Modified: trunk/banshee/src/Core/Banshee.Services/Makefile.am
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Makefile.am	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Makefile.am	Tue Sep  9 22:10:05 2008
@@ -23,6 +23,9 @@
 	Banshee.Collection.Database/IDatabaseTrackModelProvider.cs \
 	Banshee.Collection.Database/QueryFilterInfo.cs \
 	Banshee.Collection.Indexer/CollectionIndexer.cs \
+	Banshee.Collection.Indexer/CollectionIndexerService.cs \
+	Banshee.Collection.Indexer/ICollectionIndexer.cs \
+	Banshee.Collection.Indexer/ICollectionIndexerService.cs \
 	Banshee.Collection/AlbumListModel.cs \
 	Banshee.Collection/ArtistListModel.cs \
 	Banshee.Collection/BansheeListModel.cs \

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs	Tue Sep  9 22:10:05 2008
@@ -48,6 +48,7 @@
         private static Type client_type;
 
         private static string user_gtkrc = Path.Combine (Paths.ApplicationData, "gtkrc"); 
+        
         public static void Startup<T> (string [] args) where T : GtkBaseClient
         {
             if (CheckHelpVersion ()) {
@@ -236,6 +237,8 @@
             // Set the process name so system process listings and commands are pretty
             PlatformHacks.TrySetProcessName (Application.InternalName);
             
+            Application.Initialize ();
+            
             // Initialize GTK
             Gtk.Application.Init ();
             Gtk.Window.DefaultIconName = default_icon_name;

Modified: trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.csproj
==============================================================================
--- trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.csproj	(original)
+++ trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Widgets</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod.csproj
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod.csproj	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod.csproj	Tue Sep  9 22:10:05 2008
@@ -7,6 +7,7 @@
     <ProjectGuid>{371ECE68-8D0F-4AFE-AC8F-147167AE3674}</ProjectGuid>
     <OutputType>Library</OutputType>
     <AssemblyName>Banshee.Dap.Ipod</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj	Tue Sep  9 22:10:05 2008
@@ -7,6 +7,7 @@
     <ProjectGuid>{6B73E278-23FB-4A59-9B44-AB7F0212B936}</ProjectGuid>
     <OutputType>Library</OutputType>
     <AssemblyName>Banshee.AudioCd</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp.csproj
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp.csproj	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp.csproj	Tue Sep  9 22:10:05 2008
@@ -7,6 +7,7 @@
     <ProjectGuid>{3935AE8A-E283-4C0D-9094-7435A937DC90}</ProjectGuid>
     <OutputType>Library</OutputType>
     <AssemblyName>Banshee.AudioCd</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap.csproj
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap.csproj	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap.csproj	Tue Sep  9 22:10:05 2008
@@ -7,6 +7,7 @@
     <ProjectGuid>{BC2E94DF-7A82-461E-BE7C-60E41ADC3562}</ProjectGuid>
     <OutputType>Library</OutputType>
     <AssemblyName>Banshee.AudioCd</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.AudioCd</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs	Tue Sep  9 22:10:05 2008
@@ -312,6 +312,10 @@
             get { return false; }
         }
 
+        public bool Indexable {
+            get { return false; }
+        }
+
 #endregion
 
 #region IUnmapableSource Implementation

Modified: trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.BooScript</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Bookmarks</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.CoverArt</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Daap</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.FileSystemQueue</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.InternetRadio</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs	Tue Sep  9 22:10:05 2008
@@ -491,6 +491,10 @@
         public bool ShowBrowser {
             get { return false; }
         }
+        
+        public bool Indexable {
+            get { return false; }
+        }
 
 #endregion
 

Modified: trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Plugins.LastFM</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.MediaWeb/Banshee.MediaWeb.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.MediaWeb/Banshee.MediaWeb.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.MediaWeb/Banshee.MediaWeb.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.MediaWeb</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.MiniMode</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.MultimediaKeys</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.NotificationArea</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.NowPlaying</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.PlayQueue</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.Sample/Banshee.Sample.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Sample/Banshee.Sample.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.Sample/Banshee.Sample.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Sample</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.SqlDebugConsole</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Extensions/Banshee.Torrent/Banshee.Torrent.csproj
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Torrent/Banshee.Torrent.csproj	(original)
+++ trunk/banshee/src/Extensions/Banshee.Torrent/Banshee.Torrent.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Banshee.Torrent</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.csproj
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.csproj	(original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Hyena.Gui</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs	Tue Sep  9 22:10:05 2008
@@ -574,7 +574,7 @@
         protected virtual HyenaSqliteCommand SelectRangeCommand {
             get {
                 if (select_range_command == null) {
-                    select_command = new HyenaSqliteCommand (
+                    select_range_command = new HyenaSqliteCommand (
                         String.Format (
                             "SELECT {0} FROM {1}{2}{3} LIMIT ?, ?",
                             Select, From,

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Query/QueryOrder.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Query/QueryOrder.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Query/QueryOrder.cs	Tue Sep  9 22:10:05 2008
@@ -61,6 +61,7 @@
             this.name = name;
             this.label = label;
             this.order_sql = order_sql;
+            this.field = field;
         }
 
         public string ToSql ()

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.csproj
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.csproj	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Hyena</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/Hyena/Hyena/Timer.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena/Timer.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena/Timer.cs	Tue Sep  9 22:10:05 2008
@@ -47,7 +47,7 @@
 
         public void WriteElapsed (string message)
         {
-            Console.WriteLine ("{0} {1} {2}", label, message, ElapsedTime);
+            Console.Error.WriteLine ("{0} {1} {2}", label, message, ElapsedTime);
         }
 
         public void Dispose ()

Modified: trunk/banshee/src/Libraries/Lastfm.Gui/Lastfm.Gui.csproj
==============================================================================
--- trunk/banshee/src/Libraries/Lastfm.Gui/Lastfm.Gui.csproj	(original)
+++ trunk/banshee/src/Libraries/Lastfm.Gui/Lastfm.Gui.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Lastfm</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/Lastfm/Lastfm.csproj
==============================================================================
--- trunk/banshee/src/Libraries/Lastfm/Lastfm.csproj	(original)
+++ trunk/banshee/src/Libraries/Lastfm/Lastfm.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Lastfm</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/Migo/Migo.Syndication/Feed.cs
==============================================================================
--- trunk/banshee/src/Libraries/Migo/Migo.Syndication/Feed.cs	(original)
+++ trunk/banshee/src/Libraries/Migo/Migo.Syndication/Feed.cs	Tue Sep  9 22:10:05 2008
@@ -111,8 +111,8 @@
         }
 
         //private bool canceled;
-        private bool deleted; 
-        private bool updating;
+        //private bool deleted; 
+        //private bool updating;
         
         //private ManualResetEvent updatingHandle = new ManualResetEvent (true);
         
@@ -510,12 +510,12 @@
         public void Delete (bool deleteEnclosures)
         {
             lock (sync) {
-                if (deleted)
-                    return;
+                //if (deleted)
+                //    return;
                 
-                if (updating) {
-                    Manager.CancelUpdate (this);                 
-                }
+                //if (updating) {
+                //    Manager.CancelUpdate (this);                 
+                //}
 
                 foreach (FeedItem item in Items) {
                     item.Delete (deleteEnclosures);

Modified: trunk/banshee/src/Libraries/Migo/Migo.csproj
==============================================================================
--- trunk/banshee/src/Libraries/Migo/Migo.csproj	(original)
+++ trunk/banshee/src/Libraries/Migo/Migo.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Migo</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/Mono.Media/Mono.Media.csproj
==============================================================================
--- trunk/banshee/src/Libraries/Mono.Media/Mono.Media.csproj	(original)
+++ trunk/banshee/src/Libraries/Mono.Media/Mono.Media.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Mono.Media</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/Mtp/Mtp.csproj
==============================================================================
--- trunk/banshee/src/Libraries/Mtp/Mtp.csproj	(original)
+++ trunk/banshee/src/Libraries/Mtp/Mtp.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>Mtp</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>

Modified: trunk/banshee/src/Libraries/MusicBrainz/MusicBrainz.csproj
==============================================================================
--- trunk/banshee/src/Libraries/MusicBrainz/MusicBrainz.csproj	(original)
+++ trunk/banshee/src/Libraries/MusicBrainz/MusicBrainz.csproj	Tue Sep  9 22:10:05 2008
@@ -8,6 +8,7 @@
     <OutputType>Library</OutputType>
     <UseParentDirectoryAsNamespace>true</UseParentDirectoryAsNamespace>
     <AssemblyName>MusicBrainz</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>



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