tracker r1719 - in branches/xesam-support: . data data/dbus src/libtracker src/libtracker-common src/libtracker-db src/tracker-indexer src/trackerd tests/scripts



Author: pvanhoof
Date: Fri Jun 20 09:19:39 2008
New Revision: 1719
URL: http://svn.gnome.org/viewvc/tracker?rev=1719&view=rev

Log:
2008-06-20  Philip Van Hoof  <pvanhoof gnome org>

	* svn merge -r 1710:1718 ../indexer-split
w


Added:
   branches/xesam-support/tests/scripts/testing.txt
Modified:
   branches/xesam-support/ChangeLog
   branches/xesam-support/data/dbus/tracker-files.xml
   branches/xesam-support/data/dbus/tracker-indexer.xml
   branches/xesam-support/data/dbus/tracker-keywords.xml
   branches/xesam-support/data/dbus/tracker-metadata.xml
   branches/xesam-support/data/dbus/tracker-search.xml
   branches/xesam-support/data/sqlite-cache.sql
   branches/xesam-support/data/sqlite-stored-procs.sql
   branches/xesam-support/data/sqlite-tracker.sql
   branches/xesam-support/src/libtracker-common/tracker-config.c
   branches/xesam-support/src/libtracker-db/tracker-db-manager.c
   branches/xesam-support/src/libtracker-db/tracker-db-manager.h
   branches/xesam-support/src/libtracker/tracker.c
   branches/xesam-support/src/tracker-indexer/tracker-indexer.c
   branches/xesam-support/src/tracker-indexer/tracker-indexer.h
   branches/xesam-support/src/tracker-indexer/tracker-main.c
   branches/xesam-support/src/tracker-indexer/tracker-metadata.c
   branches/xesam-support/src/trackerd/tracker-crawler.c
   branches/xesam-support/src/trackerd/tracker-db.c
   branches/xesam-support/src/trackerd/tracker-db.h
   branches/xesam-support/src/trackerd/tracker-dbus.c
   branches/xesam-support/src/trackerd/tracker-dbus.h
   branches/xesam-support/src/trackerd/tracker-files.c
   branches/xesam-support/src/trackerd/tracker-files.h
   branches/xesam-support/src/trackerd/tracker-main.c
   branches/xesam-support/src/trackerd/tracker-metadata.c
   branches/xesam-support/src/trackerd/tracker-monitor.c
   branches/xesam-support/src/trackerd/tracker-xesam-live-search.c
   branches/xesam-support/src/trackerd/tracker-xesam-query.c

Modified: branches/xesam-support/data/dbus/tracker-files.xml
==============================================================================
--- branches/xesam-support/data/dbus/tracker-files.xml	(original)
+++ branches/xesam-support/data/dbus/tracker-files.xml	Fri Jun 20 09:19:39 2008
@@ -41,6 +41,7 @@
 	 specify the offset and amount of text to retrieve.
       -->
     <method name="GetTextContents">
+      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="s" name="uri" direction="in" />
       <arg type="i" name="offset"  direction="in" />
       <arg type="i" name="max_length"  direction="in" />				
@@ -51,6 +52,7 @@
 	 contains the search text in the File.Content field.
       -->
     <method name="SearchTextContents">
+      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="s" name="uri" direction="in" />
       <arg type="s" name="text"  direction="in" />
       <arg type="i" name="length"  direction="in" />
@@ -86,6 +88,7 @@
 
     <!-- returns mtime of file in seconds since epoch -->
     <method name="GetMTime">
+      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="s" name="uri" direction="in" />
       <arg type="i" name="result" direction="out" />
     </method>
@@ -101,27 +104,23 @@
       <arg type="aas" name="values" direction="out" />
     </method>
 
-    <!-- Deprecated file specific calls.
-	 (mostly used by Nautilus search). 
-      -->
-      
-<!--
+    <!-- Specific calls for Nautilus, mostly used by Nautilus search. -->
     <method name="SearchByTextAndMime">
       <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="s" name="text" direction="in" />
       <arg type="as" name="mimes" direction="in" />
       <arg type="as" name="result" direction="out" />
     </method>
-    <method name="SearchByTextAndMimeAndLocation">
+    <method name="SearchByTextAndLocation">
       <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="s" name="text" direction="in" />
-      <arg type="as" name="mimes" direction="in" />
       <arg type="s" name="location" direction="in" />
       <arg type="as" name="result" direction="out" />
     </method>
-    <method name="SearchByTextAndLocation">
+    <method name="SearchByTextAndMimeAndLocation">
       <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="s" name="text" direction="in" />
+      <arg type="as" name="mimes" direction="in" />
       <arg type="s" name="location" direction="in" />
       <arg type="as" name="result" direction="out" />
     </method>

Modified: branches/xesam-support/data/dbus/tracker-indexer.xml
==============================================================================
--- branches/xesam-support/data/dbus/tracker-indexer.xml	(original)
+++ branches/xesam-support/data/dbus/tracker-indexer.xml	Fri Jun 20 09:19:39 2008
@@ -10,22 +10,29 @@
 
 <node name="/">
   <interface name="org.freedesktop.Tracker.Indexer">  
+    <method name="DatabaseCheck">
+      <arg type="b" name="force_reindex" direction="in" />
+      <arg type="b" name="first_time_index" direction="out" />
+    </method>
+
+    <method name="DatabaseReindex"/>
+
     <method name="GetRunning">
       <arg type="b" name="is_running" direction="out" />
     </method>
     <method name="SetRunning">
       <arg type="b" name="should_be_running" direction="in" />
     </method>
-    <method name="CheckFiles">
+
+    <method name="FilesCheck">
       <arg type="as" name="files" direction="in" />
     </method>
-    <method name="UpdateFiles">
+    <method name="FilesUpdate">
       <arg type="as" name="files" direction="in" />
     </method>
-    <method name="DeleteFiles">
+    <method name="FilesDelete">
       <arg type="as" name="files" direction="in" />
     </method>
-    <method name="Reindex"/>
     
     <!-- The old signal in the daemon used to send the time taken, we
 	 can add this later

Modified: branches/xesam-support/data/dbus/tracker-keywords.xml
==============================================================================
--- branches/xesam-support/data/dbus/tracker-keywords.xml	(original)
+++ branches/xesam-support/data/dbus/tracker-keywords.xml	Fri Jun 20 09:19:39 2008
@@ -47,6 +47,7 @@
 	 returns an array of matching id values for the service.
       --> 
     <method name="Search">
+      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="i" name="live_query_id" direction="in" />
       <arg type="s" name="service" direction="in" />
       <arg type="as" name="keywords" direction="in" />

Modified: branches/xesam-support/data/dbus/tracker-metadata.xml
==============================================================================
--- branches/xesam-support/data/dbus/tracker-metadata.xml	(original)
+++ branches/xesam-support/data/dbus/tracker-metadata.xml	Fri Jun 20 09:19:39 2008
@@ -21,26 +21,7 @@
       <arg type="as" name="keys" direction="in" />
       <arg type="as" name="values" direction="in" />
     </method>
-    
-    <!--
-       Registers a new metadata type. The metadata name must be
-       namespaced with an appropriate class in the format
-       "class.name".
-       
-       The datatype argument for RegisterType should be one of the
-       following: 
-       "index"   (a string which is stored in a full text index for searching)
-       "string"  (a non-indexable string which will not show up in searches)
-       "numeric" (a signed number which can be either an integer or a float)
-       "date"    (format should be "yyyy-mm-dd hh:mm:ss")
        
-       Metadata defined here is considered non-embeddable and writable.
-      -->
-    <method name="RegisterType">
-      <arg type="s" name="name" direction="in" />
-      <arg type="s" name="datatype" direction="in" />
-    </method>
-    
     <!-- Gets all details of a named metadata type. -->		
     <method name="GetTypeDetails">
       <arg type="s" name="name" direction="in" />
@@ -57,16 +38,7 @@
       <arg type="s" name="metadata_class" direction="in" />
       <arg type="as" name="result" direction="out" />
     </method>
-    
-    <!-- Returns an array of all metadata types that are writeable and
-	 registered for a certain class. You can enter "*" as the class
-	 to get all metadat types for all classes that are writeable.
-      -->
-    <method name="GetWritableTypes">
-      <arg type="s" name="metadata_class" direction="in" />
-      <arg type="as" name="result" direction="out" />
-    </method>
-    
+       
     <!-- Returns an array of all metadata type classes that are
 	 registered.
       -->

Modified: branches/xesam-support/data/dbus/tracker-search.xml
==============================================================================
--- branches/xesam-support/data/dbus/tracker-search.xml	(original)
+++ branches/xesam-support/data/dbus/tracker-search.xml	Fri Jun 20 09:19:39 2008
@@ -57,6 +57,7 @@
 	 search term (search_text). The result is an array of uri/id's.
       -->
     <method name="Metadata">
+      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
       <arg type="s" name="service" direction="in" />
       <arg type="s" name="field" direction="in" />
       <arg type="s" name="search_text"  direction="in" />

Modified: branches/xesam-support/data/sqlite-cache.sql
==============================================================================
--- branches/xesam-support/data/sqlite-cache.sql	(original)
+++ branches/xesam-support/data/sqlite-cache.sql	Fri Jun 20 09:19:39 2008
@@ -68,6 +68,7 @@
 	unique (URI)
 );
 
+
 CREATE TABLE Events
 (
 	ID		Integer primary key not null,

Modified: branches/xesam-support/data/sqlite-stored-procs.sql
==============================================================================
--- branches/xesam-support/data/sqlite-stored-procs.sql	(original)
+++ branches/xesam-support/data/sqlite-stored-procs.sql	Fri Jun 20 09:19:39 2008
@@ -29,12 +29,12 @@
 GetEvents SELECT ID, ServiceID, EventType FROM Events WHERE BeingHandled = 1;
 SetEventsBeingHandled UPDATE Events SET BeingHandled = 1;
 
-GetLiveSearchAllIDs SELECT X.ServiceID FROM LiveSearches AS X WHERE X.SearchID = ?
-GetLiveSearchDeletedIDs SELECT E.ServiceID FROM Events as E, LiveSearches as X WHERE E.ServiceID = X.ServiceID AND X.SearchID = ? AND E.EventType = 'Delete';
-DeleteLiveSearchDeletedIDs DELETE FROM LiveSearches AS Y WHERE Y.ServiceID IN SELECT ServiceID FROM Events as E, LiveSearches as X WHERE E.ServiceID = X.ServiceID AND X.SearchID = ? AND E.EventType = 'Delete'
+GetLiveSearchAllIDs SELECT X.ServiceID FROM cache.LiveSearches AS X WHERE X.SearchID = ?
+GetLiveSearchDeletedIDs SELECT E.ServiceID FROM Events as E, cache.LiveSearches as X WHERE E.ServiceID = X.ServiceID AND X.SearchID = ? AND E.EventType = 'Delete';
+DeleteLiveSearchDeletedIDs DELETE FROM cache.LiveSearches AS Y WHERE Y.ServiceID IN SELECT ServiceID FROM Events as E, cache.LiveSearches as X WHERE E.ServiceID = X.ServiceID AND X.SearchID = ? AND E.EventType = 'Delete'
 
-GetLiveSearchHitCount SELECT count(*) FROM LiveSearches WHERE SearchID = ?;
-LiveSearchStopSearch DELETE FROM LiveSearches WHERE SearchID = ?
+GetLiveSearchHitCount SELECT count(*) FROM cache.LiveSearches WHERE SearchID = ?;
+LiveSearchStopSearch DELETE FROM cache.LiveSearches WHERE SearchID = ?
 
 GetNewEventID SELECT OptionValue FROM Options WHERE OptionKey = 'EventSequence';
 UpdateNewEventID UPDATE Options set OptionValue = ? WHERE OptionKey = 'EventSequence';
@@ -212,4 +212,4 @@
 GetXesamMetaDataLookups SELECT DISTINCT MetaName FROM XesamMetaDataLookup WHERE XesamMetaName = ?;
 
 GetXesamMetaDataTypes SELECT ID, MetaName, DataTypeID, FieldName, Weight, Embedded, MultipleValues, Delimited, Filtered, Abstract FROM XesamMetaDataTypes;
-GetXesamServiceTypes SELECT TypeID, TypeName, Parents, Enabled, Embedded, HasMetadata, HasFullText, HasThumbs, ContentMetadata, Database, ShowServiceFiles, ShowServiceDirectories, KeyMetadata1, KeyMetadata2, KeyMetadata3, KeyMetadata4, KeyMetadata5, KeyMetadata6, KeyMetadata7, KeyMetadata8, KeyMetadata9, KeyMetadata10, KeyMetadata11  FROM XesamServiceTypes;
\ No newline at end of file
+GetXesamServiceTypes SELECT TypeID, TypeName, Parents, Enabled, Embedded, HasMetadata, HasFullText, HasThumbs, ContentMetadata, Database, ShowServiceFiles, ShowServiceDirectories, KeyMetadata1, KeyMetadata2, KeyMetadata3, KeyMetadata4, KeyMetadata5, KeyMetadata6, KeyMetadata7, KeyMetadata8, KeyMetadata9, KeyMetadata10, KeyMetadata11  FROM XesamServiceTypes;

Modified: branches/xesam-support/data/sqlite-tracker.sql
==============================================================================
--- branches/xesam-support/data/sqlite-tracker.sql	(original)
+++ branches/xesam-support/data/sqlite-tracker.sql	Fri Jun 20 09:19:39 2008
@@ -9,23 +9,6 @@
 insert Into Options (OptionKey, OptionValue) values ('EventSequence', '1');
 insert Into Options (OptionKey, OptionValue) values ('UpdateCount', '0');
 
-/* This should become a TEMPORARY table */
-CREATE TABLE Events
-(
-	ID		Integer primary key not null,
-	ServiceID	Integer not null,
-	BeingHandled	Integer default 0,
-	EventType	Text
-);
-
-/* This should become a TEMPORARY table */
-CREATE TABLE LiveSearches
-(
-	ServiceID	Integer not null,
-	SearchID	Text,
-
-	Unique (ServiceID, SearchID)
-);
 
 /* store volume and HAL info here for files */
 CREATE TABLE  Volumes
@@ -99,3 +82,4 @@
 
 );
 
+ANALYZE;

Modified: branches/xesam-support/src/libtracker-common/tracker-config.c
==============================================================================
--- branches/xesam-support/src/libtracker-common/tracker-config.c	(original)
+++ branches/xesam-support/src/libtracker-common/tracker-config.c	Fri Jun 20 09:19:39 2008
@@ -160,7 +160,7 @@
 	gint	  thread_stack_size;
 
 	/* Services*/
-	gboolean enable_xesam;
+	gboolean  enable_xesam;
 };
 
 static void config_finalize	(GObject      *object);

Modified: branches/xesam-support/src/libtracker-db/tracker-db-manager.c
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-manager.c	(original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-manager.c	Fri Jun 20 09:19:39 2008
@@ -124,8 +124,7 @@
 static gboolean            db_exec_no_reply    (TrackerDBInterface *iface,
 						const gchar        *query,
 						...);
-static TrackerDBInterface *db_interface_create (TrackerDB           db,
-						gboolean            attach_all);
+static TrackerDBInterface *db_interface_create (TrackerDB           db);
 
 static gboolean            initialized;
 static gboolean            attach_all;
@@ -1635,7 +1634,6 @@
 
 static TrackerDBInterface *
 db_interface_get (TrackerDB  type,
-		  gboolean   attach_all,
 		  gboolean  *create)
 {
 	TrackerDBInterface *iface;
@@ -1689,14 +1687,12 @@
 }
 
 static TrackerDBInterface *
-db_interface_get_common (gboolean attach_all)
+db_interface_get_common (void)
 {
 	TrackerDBInterface *iface;
 	gboolean            create;
 
-	iface = db_interface_get (TRACKER_DB_COMMON, 
-				  attach_all, 
-				  &create);
+	iface = db_interface_get (TRACKER_DB_COMMON, &create);
 
 	if (create) {
 		/* Create tables */
@@ -1725,14 +1721,12 @@
 }
 
 static TrackerDBInterface *
-db_interface_get_cache (gboolean attach_all)
+db_interface_get_cache (void)
 {
 	TrackerDBInterface *iface;
 	gboolean            create;
 
-	iface = db_interface_get (TRACKER_DB_CACHE, 
-				  attach_all, 
-				  &create);
+	iface = db_interface_get (TRACKER_DB_CACHE, &create);
 
 	if (create) {
 		load_sql_file (iface, "sqlite-cache.sql", NULL);
@@ -1742,14 +1736,12 @@
 }
 
 static TrackerDBInterface *
-db_interface_get_file_metadata (gboolean attach_all)
+db_interface_get_file_metadata (void)
 {
 	TrackerDBInterface *iface;
 	gboolean            create;
 
-	iface = db_interface_get (TRACKER_DB_FILE_METADATA, 
-				  attach_all, 
-				  &create);
+	iface = db_interface_get (TRACKER_DB_FILE_METADATA, &create);
 
 	if (create) {
 		load_sql_file (iface, "sqlite-service.sql", NULL);
@@ -1760,14 +1752,12 @@
 }
 
 static TrackerDBInterface *
-db_interface_get_file_contents (gboolean attach_all)
+db_interface_get_file_contents (void)
 {
 	TrackerDBInterface *iface;
 	gboolean            create;
 
-	iface = db_interface_get (TRACKER_DB_FILE_CONTENTS, 
-				  attach_all, 
-				  &create);
+	iface = db_interface_get (TRACKER_DB_FILE_CONTENTS, &create);
 
 	if (create) {
 		load_sql_file (iface, "sqlite-contents.sql", NULL);
@@ -1786,14 +1776,12 @@
 }
 
 static TrackerDBInterface *
-db_interface_get_email_metadata (gboolean attach_all)
+db_interface_get_email_metadata (void)
 {
 	TrackerDBInterface *iface;
 	gboolean            create;
 
-	iface = db_interface_get (TRACKER_DB_EMAIL_METADATA, 
-				  attach_all, 
-				  &create);
+	iface = db_interface_get (TRACKER_DB_EMAIL_METADATA, &create);
 
 	if (create) {
 		load_sql_file (iface, "sqlite-service.sql", NULL);
@@ -1805,14 +1793,12 @@
 }
 
 static TrackerDBInterface *
-db_interface_get_email_contents (gboolean attach_all)
+db_interface_get_email_contents (void)
 {
 	TrackerDBInterface *iface;
 	gboolean            create;
 
-	iface = db_interface_get (TRACKER_DB_EMAIL_CONTENTS, 
-				  attach_all, 
-				  &create);
+	iface = db_interface_get (TRACKER_DB_EMAIL_CONTENTS, &create);
 
 	if (create) {
 		load_sql_file (iface, "sqlite-contents.sql", NULL);
@@ -2017,24 +2003,12 @@
 }
 
 static TrackerDBInterface *
-db_interface_get_xesam (gboolean attach_all)
+db_interface_get_xesam (void)
 {
 	TrackerDBInterface *iface;
 	gboolean            create;
 
-	iface = db_interface_get (TRACKER_DB_CACHE,
-				  attach_all, 
-				  &create);
-
-	g_object_unref (iface);
-
-	if (create) {
-		load_sql_file (iface, "sqlite-cache.sql", NULL);
-	}
-
-	iface = db_interface_get (TRACKER_DB_XESAM, 
-				  attach_all, 
-				  &create);
+	iface = db_interface_get (TRACKER_DB_XESAM, &create);
 
 	if (create) {
 		load_sql_file (iface, "sqlite-xesam.sql", NULL);
@@ -2050,6 +2024,22 @@
 		db_xesam_create_lookup (iface);
 	}
 
+	/* db_exec_no_reply (iface, */
+	/* 		  "ATTACH '%s' as 'file-meta'", */
+	/* 		  tracker_db_manager_get_file (TRACKER_DB_FILE_METADATA)); */
+
+	/* db_exec_no_reply (iface, */
+	/* 		  "ATTACH '%s' as 'email-meta'", */
+	/* 		  tracker_db_manager_get_file (TRACKER_DB_EMAIL_METADATA)); */
+
+	/* db_exec_no_reply (iface, */
+	/* 		  "ATTACH '%s' as 'common'", */
+	/* 		  tracker_db_manager_get_file (TRACKER_DB_COMMON)); */
+
+	/* db_exec_no_reply (iface, */
+	/* 		  "ATTACH '%s' as 'cache'", */
+	/* 		  tracker_db_manager_get_file (TRACKER_DB_CACHE)); */
+
 	/* Load static xesam data */
 	db_get_static_xesam_data (iface);
 
@@ -2057,30 +2047,29 @@
 }
 
 static TrackerDBInterface *
-db_interface_create (TrackerDB db,
-		     gboolean  attach_all)
+db_interface_create (TrackerDB db)
 {
 	switch (db) {
         case TRACKER_DB_COMMON:
-		return db_interface_get_common (attach_all);
+		return db_interface_get_common ();
 
         case TRACKER_DB_CACHE:
-		return db_interface_get_cache (attach_all);
+		return db_interface_get_cache ();
 
         case TRACKER_DB_FILE_METADATA:
-		return db_interface_get_file_metadata (attach_all);
+		return db_interface_get_file_metadata ();
 
         case TRACKER_DB_FILE_CONTENTS:
-		return db_interface_get_file_contents (attach_all);
+		return db_interface_get_file_contents ();
 
         case TRACKER_DB_EMAIL_METADATA:
-		return db_interface_get_email_metadata (attach_all);
+		return db_interface_get_email_metadata ();
 
         case TRACKER_DB_EMAIL_CONTENTS:
-		return db_interface_get_email_contents (attach_all);
+		return db_interface_get_email_contents ();
 
 	case TRACKER_DB_XESAM:
-		return db_interface_get_xesam (attach_all);
+		return db_interface_get_xesam ();
 	}
 
 	g_critical ("This TrackerDB type:%d->'%s' has no interface set up yet!!",
@@ -2172,6 +2161,19 @@
 	db_user_data_dir = g_strdup (user_data_dir);
 	db_sys_tmp_dir = g_strdup (sys_tmp_dir);
 
+	/* Make sure we remove and recreate the cache directory in tmp
+	 * each time we start up, this is meant to be a per-instance
+	 * thing.
+	 */
+	g_message ("Removing directory:'%s'", db_sys_tmp_dir);
+	tracker_path_remove (db_sys_tmp_dir);
+
+	g_message ("Creating directory:'%s'", db_sys_tmp_dir);
+	g_mkdir_with_parents (db_sys_tmp_dir, 00755);
+
+	g_mkdir_with_parents (db_data_dir, 00755);
+	g_mkdir_with_parents (db_user_data_dir, 00755);
+
 	/* Add prepared queries */
 	prepared_queries = g_hash_table_new_full (g_str_hash,
 						  g_str_equal,
@@ -2180,10 +2182,13 @@
 
 	load_prepared_queries ();
 
+	/* Needs to be BEFORE the set_up_databases, since it uses
+	 * public API calls which check we are initialized.
+	 */
+	initialized = TRUE;
+
 	/* Configure database locations and interfaces */
 	set_up_databases ();
-
-	initialized = TRUE;
 }
 
 void
@@ -2210,6 +2215,10 @@
 	g_hash_table_unref (prepared_queries);
 	prepared_queries = NULL;
 
+	/* Remove directory in tmp */
+	g_message ("Removing directory:'%s'", db_sys_tmp_dir);
+	tracker_path_remove (db_sys_tmp_dir);
+
 	g_free (db_data_dir);
 	g_free (db_user_data_dir);
 	g_free (db_sys_tmp_dir);
@@ -2255,18 +2264,9 @@
 }
 
 void
-tracker_db_manager_set_up_databases (gboolean remove_all_first) 
+tracker_db_manager_close_all (void)
 {
-	gboolean current_attach_all;
-	guint    i;
-
-	g_return_if_fail (initialized != FALSE);
-
-	/* Save the current attach setting */
-	current_attach_all = attach_all;
-
-	/* Don't attach while we do this... */
-	attach_all = FALSE;
+	guint i;
 
 	/* Close all dbs first. */
         for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
@@ -2275,19 +2275,43 @@
 			dbs[i].iface = NULL;
 		}
         }
+}
 
-	/* Clean up any ontology information we have */
-	tracker_ontology_shutdown ();
+void
+tracker_db_manager_delete_all (void)
+{
+	/* Make sure all DBs are closed first */
+	tracker_db_manager_close_all ();
+
+	/* Physically remove directories */
+	g_message ("Removing directory:'%s'", db_data_dir);
+	tracker_path_remove (db_data_dir);
 	
-	if (remove_all_first) {
-		g_message ("Removing directory:'%s'", db_data_dir);
-		tracker_path_remove (db_data_dir);
+	g_message ("Removing directory:'%s'", db_user_data_dir);
+	tracker_path_remove (db_user_data_dir);
+	
+	g_message ("Removing directory:'%s'", db_sys_tmp_dir);
+	tracker_path_remove (db_sys_tmp_dir);
+}
 
-		g_message ("Removing directory:'%s'", db_user_data_dir);
-		tracker_path_remove (db_user_data_dir);
+void
+tracker_db_manager_create_all (gboolean remove_all_first) 
+{
+	gboolean current_attach_all;
+
+	g_return_if_fail (initialized != FALSE);
+
+	/* Save the current attach setting */
+	current_attach_all = attach_all;
 
-		g_message ("Removing directory:'%s'", db_sys_tmp_dir);
-		tracker_path_remove (db_sys_tmp_dir);
+	/* Don't attach while we do this... */
+	attach_all = FALSE;
+
+	/* Shut things down first */
+	if (remove_all_first) {
+		tracker_db_manager_delete_all ();
+	} else {
+		tracker_db_manager_close_all ();
 	}
 
 	/* Don't check for these first, just do it */
@@ -2300,25 +2324,14 @@
 	g_message ("Creating directory:'%s'", db_sys_tmp_dir);
 	g_mkdir_with_parents (db_sys_tmp_dir, 00755);
 
-	/* Initialize ontology information */
+	/* Reinitialize ontology */
+	tracker_ontology_shutdown ();
 	tracker_ontology_init ();
 
-	/* Create all interfaces (and dbs as a result) and then unref
-	 * them to close the dbs.
+	/* Now we close these databases again and wait for the next
+	 * time they are needed.
 	 */
-        for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
-		tracker_db_manager_get_db_interface (i);
-
-		if (dbs[i].iface) {
-			g_object_unref (dbs[i].iface);
-
-
-			/* Reset the interface value so we get a new
-			 * object next time it is needed.
-			 */
-			dbs[i].iface = NULL;
-		}
-        }
+	tracker_db_manager_close_all ();
 
 	/* Set the attach setting back to what it was */
 	attach_all = current_attach_all;
@@ -2338,7 +2351,7 @@
 	g_return_val_if_fail (initialized != FALSE, NULL);
 
 	if (!dbs[db].iface) {
-		dbs[db].iface = db_interface_create (db, attach_all);
+		dbs[db].iface = db_interface_create (db);
 	}
 
 	return dbs[db].iface;

Modified: branches/xesam-support/src/libtracker-db/tracker-db-manager.h
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-manager.h	(original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-manager.h	Fri Jun 20 09:19:39 2008
@@ -49,9 +49,12 @@
 							     const gchar        *user_data_dir,
 							     const gchar        *sys_tmp_root_dir);
 void         tracker_db_manager_shutdown                    (void);
+
 gboolean     tracker_db_manager_need_reindex                (void);
+void         tracker_db_manager_close_all                   (void);
+void         tracker_db_manager_delete_all                  (void);
+void         tracker_db_manager_create_all                  (gboolean            remove_all_first);
 
-void         tracker_db_manager_set_up_databases            (gboolean            remove_all_first);
 const gchar *tracker_db_manager_get_file                    (TrackerDB           db);
 TrackerDBInterface *
              tracker_db_manager_get_db_interface            (TrackerDB           db);

Modified: branches/xesam-support/src/libtracker/tracker.c
==============================================================================
--- branches/xesam-support/src/libtracker/tracker.c	(original)
+++ branches/xesam-support/src/libtracker/tracker.c	Fri Jun 20 09:19:39 2008
@@ -455,10 +455,8 @@
 void
 tracker_metadata_register_type	(TrackerClient *client, const char *name, MetadataTypes type, GError **error)
 {
-	char *meta_type = metadata_types[type];
-
-	org_freedesktop_Tracker_Metadata_register_type  (client->proxy_metadata, name, meta_type, &*error);
-
+        /* This does nothing now, this API has been removed */
+        g_warning ("%s no longer does anything", __FUNCTION__);
 }
 
 MetaDataTypeDetails *	
@@ -493,13 +491,10 @@
 char **		
 tracker_metadata_get_writeable_types (TrackerClient *client, const char *class, GError **error)
 {
-	char **array = NULL;
-
-	if (!org_freedesktop_Tracker_Metadata_get_writable_types  (client->proxy_metadata, class, &array, &*error)) {
-		return NULL;
-	}
-
-	return array;
+        /* This does nothing now, this API has been removed */
+        g_warning ("%s no longer does anything", __FUNCTION__);
+        
+        return NULL;
 }
 
 
@@ -839,10 +834,44 @@
 
 
 
+char ** 	 
+tracker_search_metadata_by_text_and_mime (TrackerClient *client, const char *query, const char **mimes, GError **error) 	 
+{ 	 
+        char **strs; 	 
+	
+        if (!org_freedesktop_Tracker_Files_search_by_text_and_mime  (client->proxy_files, query,(const char **) mimes, &strs, &*error)) { 	 
+                return NULL; 	 
+        } 	 
+        return strs; 	 
+	
+} 	 
+
 
+char ** 	 
+tracker_search_metadata_by_text_and_mime_and_location (TrackerClient *client, const char *query, const char **mimes, const char *location, GError **error) 	 
+{ 	 
+        char **strs; 	 
+	
+        if (!org_freedesktop_Tracker_Files_search_by_text_and_mime_and_location (client->proxy_files, query, (const char **)mimes, location, &strs, &*error)) { 	 
+                return NULL; 	 
+        } 	 
+        return strs; 	 
+	
+} 	 
 
 
 
+char ** 	 
+tracker_search_metadata_by_text_and_location (TrackerClient *client, const char *query, const char *location, GError **error) 	 
+{ 	 
+        char **strs; 	 
+	
+        if (!org_freedesktop_Tracker_Files_search_by_text_and_location (client->proxy_files, query, location, &strs, &*error)) { 	 
+                return NULL; 	 
+        } 	 
+        return strs; 	 
+	
+}
 
 
 
@@ -1006,10 +1035,10 @@
 	callback_struct->callback = callback;
 	callback_struct->data = user_data;
 
-	char *meta_type = metadata_types[type];
-
-	client->last_pending_call = org_freedesktop_Tracker_Metadata_register_type_async  (client->proxy_metadata, name, meta_type, tracker_void_reply, callback_struct);
+        /* This does nothing now, this API has been removed */
+        g_warning ("%s no longer does anything", __FUNCTION__);
 
+        tracker_void_reply (client->proxy_metadata, NULL, callback_struct);
 }
 
 
@@ -1041,8 +1070,10 @@
 	callback_struct->data = user_data;
 
 
-	client->last_pending_call = org_freedesktop_Tracker_Metadata_get_writable_types_async  (client->proxy_metadata, class, tracker_array_reply, callback_struct);
+        /* This does nothing now, this API has been removed */
+        g_warning ("%s no longer does anything", __FUNCTION__);
 
+        tracker_void_reply (client->proxy_metadata, NULL, callback_struct);
 }
 
 

Modified: branches/xesam-support/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-indexer.c	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-indexer.c	Fri Jun 20 09:19:39 2008
@@ -88,7 +88,7 @@
 
 	guint idle_id;
 
-	guint reindex : 1;
+	gboolean reindexed_on_init;
 };
 
 struct PathInfo {
@@ -154,7 +154,7 @@
 	priv->contents = NULL;
 	
 	/* Now create the new databases */
-	tracker_db_manager_set_up_databases (TRUE);
+	tracker_db_manager_create_all (TRUE);
 
 	/* Now establish new connections */
 	priv->common = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
@@ -306,6 +306,12 @@
 	
 	if (tracker_db_manager_need_reindex ()) {
 		reindex_database (indexer);
+
+		/* We set this flag so we don't attempt to do it in
+		 * the database_check function which the daemon
+		 * calls.
+		 */
+		priv->reindexed_on_init = TRUE;
 	}
 
 	index_file = g_build_filename (priv->db_dir, "file-index.db", NULL);
@@ -597,6 +603,72 @@
 }
 
 gboolean
+tracker_indexer_database_check (TrackerIndexer  *indexer,
+				gboolean         force_reindex,
+				gboolean        *first_time_index,
+				GError         **error)
+{
+	TrackerIndexerPrivate *priv;
+	guint                  request_id;
+
+	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
+
+	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_request_new (request_id,
+                                  "DBus request to check database health");
+
+	if (G_UNLIKELY (force_reindex)) {
+		*first_time_index = TRUE;
+
+		/* If we reindexed on initialization, don't do it
+		 * again here.
+		 */ 
+		if (!priv->reindexed_on_init) {
+			reindex_database (indexer);
+		}
+	} else {
+		/* Is this the first time? */
+		*first_time_index = tracker_db_manager_need_reindex ();
+		
+		if (*first_time_index) {
+			/* Create new databases */
+			tracker_dbus_request_comment (request_id, 
+						      "Creating databases...");
+			tracker_db_manager_create_all (FALSE);
+		}
+	}
+		
+	tracker_dbus_request_success (request_id);
+
+	return TRUE;
+}
+
+gboolean
+tracker_indexer_database_reindex (TrackerIndexer  *indexer,
+				  GError         **error)
+{
+	TrackerIndexerPrivate *priv;
+	guint                  request_id;
+
+	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
+
+	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_request_new (request_id,
+                                  "DBus request to reindex the database");
+
+
+	reindex_database (indexer);
+	
+	tracker_dbus_request_success (request_id);
+
+	return TRUE;
+}
+
+gboolean
 tracker_indexer_set_running (TrackerIndexer  *indexer,
 			     gboolean         should_be_running,
 			     GError         **error)
@@ -659,7 +731,7 @@
 }
 
 gboolean
-tracker_indexer_check_files (TrackerIndexer  *indexer,
+tracker_indexer_files_check (TrackerIndexer  *indexer,
 			     GStrv            files,
 			     GError         **error)
 {
@@ -702,7 +774,7 @@
 }
 
 gboolean
-tracker_indexer_update_files (TrackerIndexer  *indexer,
+tracker_indexer_files_update (TrackerIndexer  *indexer,
 			      GStrv            files,
 			      GError         **error)
 {
@@ -745,7 +817,7 @@
 }
 
 gboolean
-tracker_indexer_delete_files (TrackerIndexer  *indexer,
+tracker_indexer_files_delete (TrackerIndexer  *indexer,
 			      GStrv            files,
 			      GError         **error)
 {
@@ -787,25 +859,3 @@
 	return TRUE;
 }
 
-gboolean
-tracker_indexer_reindex (TrackerIndexer  *indexer,
-			 GError         **error)
-{
-	TrackerIndexerPrivate *priv;
-	guint                  request_id;
-
-	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
-
-	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
-	request_id = tracker_dbus_get_next_request_id ();
-
-	tracker_dbus_request_new (request_id,
-                                  "DBus request to reindex the database");
-
-
-	reindex_database (indexer);
-	
-	tracker_dbus_request_success (request_id);
-
-	return TRUE;
-}

Modified: branches/xesam-support/src/tracker-indexer/tracker-indexer.h
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-indexer.h	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-indexer.h	Fri Jun 20 09:19:39 2008
@@ -51,25 +51,29 @@
 	void (*index_updated) (TrackerIndexer *indexer);
 };
 
-GType           tracker_indexer_get_type     (void) G_GNUC_CONST;
-TrackerIndexer *tracker_indexer_new          (void);
-gboolean        tracker_indexer_set_running  (TrackerIndexer  *indexer,
-					      gboolean         should_be_running,
-					      GError         **error);
-gboolean        tracker_indexer_get_running  (TrackerIndexer  *indexer,
-					      gboolean        *is_running,
-					      GError         **error);
-gboolean        tracker_indexer_check_files  (TrackerIndexer  *indexer,
-					      GStrv            files,
-					      GError         **error);
-gboolean        tracker_indexer_update_files (TrackerIndexer  *indexer,
-					      GStrv            files,
-					      GError         **error);
-gboolean        tracker_indexer_delete_files (TrackerIndexer  *indexer,
-					      GStrv            files,
-					      GError         **error);
-gboolean        tracker_indexer_reindex      (TrackerIndexer  *indexer,
-					      GError         **error);
+GType           tracker_indexer_get_type       (void) G_GNUC_CONST;
+TrackerIndexer *tracker_indexer_new              (void);
+gboolean        tracker_indexer_database_check   (TrackerIndexer  *indexer,
+						  gboolean         force_reindex,
+						  gboolean        *first_time_index,
+						  GError         **error);
+gboolean        tracker_indexer_database_reindex (TrackerIndexer  *indexer,
+						  GError         **error);
+gboolean        tracker_indexer_set_running      (TrackerIndexer  *indexer,
+						  gboolean         should_be_running,
+						  GError         **error);
+gboolean        tracker_indexer_get_running      (TrackerIndexer  *indexer,
+						  gboolean        *is_running,
+						  GError         **error);
+gboolean        tracker_indexer_files_check      (TrackerIndexer  *indexer,
+						  GStrv            files,
+						  GError         **error);
+gboolean        tracker_indexer_files_update     (TrackerIndexer  *indexer,
+						  GStrv            files,
+						  GError         **error);
+gboolean        tracker_indexer_files_delete     (TrackerIndexer  *indexer,
+						  GStrv            files,
+						  GError         **error);
 
 G_END_DECLS
 

Modified: branches/xesam-support/src/tracker-indexer/tracker-main.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-main.c	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-main.c	Fri Jun 20 09:19:39 2008
@@ -149,14 +149,14 @@
                                           "data", 
                                           NULL);
 
-	filename = g_strdup_printf ("Tracker-%s.%d", g_get_user_name (), getpid ());
+	filename = g_strdup_printf ("tracker-%s", g_get_user_name ());
 	sys_tmp_dir = g_build_filename (g_get_tmp_dir (), filename, NULL);
 	g_free (filename);
 
 	tracker_db_manager_init (FALSE, data_dir, user_data_dir, sys_tmp_dir);
 
         if (reindex) {
-                tracker_db_manager_set_up_databases (TRUE);
+                tracker_db_manager_create_all (TRUE);
         }
 
 	g_free (data_dir);

Modified: branches/xesam-support/src/tracker-indexer/tracker-metadata.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-metadata.c	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-metadata.c	Fri Jun 20 09:19:39 2008
@@ -80,7 +80,7 @@
 		gchar *temp_filename;
 		gint   fd;
 
-                filename = g_strdup_printf ("Tracker-%s.%d", g_get_user_name (), getpid ());
+                filename = g_strdup_printf ("tracker-%s", g_get_user_name ());
                 sys_tmp_dir = g_build_filename (g_get_tmp_dir (), filename, NULL);
                 g_free (filename);
                 

Modified: branches/xesam-support/src/trackerd/tracker-crawler.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-crawler.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-crawler.c	Fri Jun 20 09:19:39 2008
@@ -883,7 +883,7 @@
 	g_debug ("File check queue processed, sending first %d to the indexer", 
 		 g_strv_length (files));
 	
-	org_freedesktop_Tracker_Indexer_check_files_async (proxy, 
+	org_freedesktop_Tracker_Indexer_files_check_async (proxy, 
 							   (const gchar **) files,
 							   indexer_check_files_cb,
 							   files);

Modified: branches/xesam-support/src/trackerd/tracker-db.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-db.c	Fri Jun 20 09:19:39 2008
@@ -614,6 +614,29 @@
 	return 0;
 }
 
+static GArray *
+db_create_array_of_services (void)
+{
+	GArray *array;
+	gint    services[8];
+	gint    count = 0;
+
+	/* FIXME: Shouldn't we add emails and GAIM conversaions? -mr */
+	services[count++] = tracker_ontology_get_id_for_service_type ("Folders");
+	services[count++] = tracker_ontology_get_id_for_service_type ("Documents");
+	services[count++] = tracker_ontology_get_id_for_service_type ("Images");
+	services[count++] = tracker_ontology_get_id_for_service_type ("Videos");
+	services[count++] = tracker_ontology_get_id_for_service_type ("Music");
+	services[count++] = tracker_ontology_get_id_for_service_type ("Text");
+	services[count++] = tracker_ontology_get_id_for_service_type ("Development");
+	services[count++] = tracker_ontology_get_id_for_service_type ("Other");
+
+	array = g_array_new (TRUE, TRUE, sizeof (gint));
+	g_array_append_vals (array, services, G_N_ELEMENTS (services));
+
+	return array;
+}
+
 void
 tracker_db_init (void)
 {
@@ -917,6 +940,301 @@
 }
 
 TrackerDBResultSet *
+tracker_db_search_text_and_mime (TrackerDBInterface  *iface, 
+				 const gchar         *text, 
+				 gchar              **mime_array)
+{
+	TrackerQueryTree   *tree;
+	TrackerDBResultSet *result_set1;
+	GArray             *hits;
+	GArray             *services;
+	gint                count = 0;
+	guint               i; 
+
+	g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+	g_return_val_if_fail (text != NULL, NULL);
+	g_return_val_if_fail (mime_array != NULL, NULL);
+
+	result_set1 = NULL;
+	services = db_create_array_of_services ();
+
+	tree = tracker_query_tree_new (text, 
+				       tracker->file_index, 
+				       tracker->config,
+				       tracker->language,
+				       services);
+	hits = tracker_query_tree_get_hits (tree, 0, 0);
+
+	for (i = 0, count = 0; i < hits->len; i++) {
+		TrackerDBResultSet *result_set2;
+		TrackerSearchHit    hit;
+		gchar              *str_id, *mimetype;
+
+		hit = g_array_index (hits, TrackerSearchHit, i);
+
+		str_id = tracker_uint_to_string (hit.service_id);
+		result_set2 = tracker_db_exec_proc (iface, 
+						    "GetFileByID", 
+						    str_id, 
+						    NULL);
+		g_free (str_id);
+
+		if (result_set2) {
+			tracker_db_result_set_get (result_set2, 2, &mimetype, -1);
+
+			if (tracker_string_in_string_list (mimetype, mime_array) != -1) {
+				GValue value = { 0, };
+
+				if (G_UNLIKELY (!result_set1)) {
+					result_set1 = _tracker_db_result_set_new (2);
+				}
+
+				_tracker_db_result_set_append (result_set1);
+
+				/* copy value in column 0 */
+				_tracker_db_result_set_get_value (result_set2, 0, &value);
+				_tracker_db_result_set_set_value (result_set1, 0, &value);
+				g_value_unset (&value);
+
+				/* copy value in column 1 */
+				_tracker_db_result_set_get_value (result_set2, 1, &value);
+				_tracker_db_result_set_set_value (result_set1, 1, &value);
+				g_value_unset (&value);
+
+				count++;
+			}
+
+			g_free (mimetype);
+			g_object_unref (result_set2);
+		}
+
+		if (count > 2047) {
+			g_warning ("Count is > 2047? Breaking for loop in %s, why?", 
+				   __FUNCTION__);
+			break;
+		}
+	}
+
+	g_object_unref (tree);
+	g_array_free (hits, TRUE);
+	g_array_free (services, TRUE);
+
+	if (!result_set1) {
+		return NULL;
+	}
+
+	if (tracker_db_result_set_get_n_rows (result_set1) == 0) {
+		g_object_unref (result_set1);
+		return NULL;
+	}
+
+	tracker_db_result_set_rewind (result_set1);
+
+	return result_set1;
+}
+
+TrackerDBResultSet *
+tracker_db_search_text_and_location (TrackerDBInterface *iface,
+				     const gchar        *text, 
+				     const gchar        *location)
+{
+	TrackerDBResultSet *result_set1;
+	TrackerQueryTree   *tree;
+	GArray             *hits;
+	GArray             *services;
+	gchar	           *location_prefix;
+	gint 	            count;
+	guint               i;
+
+	g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+	g_return_val_if_fail (text != NULL, NULL);
+	g_return_val_if_fail (location != NULL, NULL);
+
+	result_set1 = NULL;
+	location_prefix = g_strconcat (location, G_DIR_SEPARATOR_S, NULL);
+	services = db_create_array_of_services ();
+
+	tree = tracker_query_tree_new (text, 
+				       tracker->file_index, 
+				       tracker->config,
+				       tracker->language,
+				       services);
+	hits = tracker_query_tree_get_hits (tree, 0, 0);
+
+	for (i = 0, count = 0; i < hits->len; i++) {
+		TrackerDBResultSet *result_set2;
+		TrackerSearchHit    hit;
+		gchar              *str_id, *path;
+
+		hit = g_array_index (hits, TrackerSearchHit, i);
+
+		str_id = tracker_uint_to_string (hit.service_id);
+		result_set2 = tracker_db_exec_proc (iface, 
+						   "GetFileByID", 
+						   str_id, 
+						   NULL);
+		g_free (str_id);
+
+		if (result_set2) {
+			tracker_db_result_set_get (result_set2, 0, &path, -1);
+
+			if (g_str_has_prefix (path, location_prefix) || 
+			    strcmp (path, location) == 0) {
+				GValue value = { 0, };
+
+				if (G_UNLIKELY (!result_set1)) {
+					result_set1 = _tracker_db_result_set_new (2);
+				}
+
+				_tracker_db_result_set_append (result_set1);
+
+				/* copy value in column 0 */
+				_tracker_db_result_set_get_value (result_set2, 0, &value);
+				_tracker_db_result_set_set_value (result_set1, 0, &value);
+				g_value_unset (&value);
+
+				/* copy value in column 1 */
+				_tracker_db_result_set_get_value (result_set2, 1, &value);
+				_tracker_db_result_set_set_value (result_set1, 1, &value);
+				g_value_unset (&value);
+
+				count++;
+			}
+
+			g_object_unref (result_set2);
+		}
+
+		if (count > 2047) {
+			g_warning ("Count is > 2047? Breaking for loop in %s, why?", 
+				   __FUNCTION__);
+			break;
+		}
+	}
+
+	g_free (location_prefix);
+	g_object_unref (tree);
+	g_array_free (hits, TRUE);
+	g_array_free (services, TRUE);
+
+	if (!result_set1) {
+		return NULL;
+	}
+
+	if (tracker_db_result_set_get_n_rows (result_set1) == 0) {
+		g_object_unref (result_set1);
+		return NULL;
+	}
+
+	tracker_db_result_set_rewind (result_set1);
+
+	return result_set1;
+}
+
+TrackerDBResultSet *
+tracker_db_search_text_and_mime_and_location (TrackerDBInterface  *iface,
+					      const gchar         *text, 
+					      gchar              **mime_array, 
+					      const gchar         *location)
+{
+	TrackerDBResultSet *result_set1;
+	TrackerQueryTree   *tree;
+	GArray             *hits;
+	GArray             *services;
+	gchar	           *location_prefix;
+	gint 	            count;
+	guint               i;
+
+	g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+	g_return_val_if_fail (text != NULL, NULL);
+	g_return_val_if_fail (location != NULL, NULL);
+
+	result_set1 = NULL;
+	location_prefix = g_strconcat (location, G_DIR_SEPARATOR_S, NULL);
+	services = db_create_array_of_services ();
+
+	tree = tracker_query_tree_new (text, 
+				       tracker->file_index, 
+				       tracker->config,
+				       tracker->language,
+				       services);
+	hits = tracker_query_tree_get_hits (tree, 0, 0);
+
+	for (i = 0, count = 0; i < hits->len; i++) {
+		TrackerDBResultSet *result_set2;
+		TrackerSearchHit    hit;
+		gchar              *str_id, *path, *mimetype;
+
+		hit = g_array_index (hits, TrackerSearchHit, i);
+
+		str_id = tracker_uint_to_string (hit.service_id);
+		result_set2 = tracker_db_exec_proc (iface, 
+						   "GetFileByID", 
+						   str_id, 
+						   NULL);
+		g_free (str_id);
+
+		if (result_set2) {
+			tracker_db_result_set_get (result_set2,
+						   0, &path,
+						   2, &mimetype,
+						   -1);
+
+			if ((g_str_has_prefix (path, location_prefix) || 
+			     strcmp (path, location) == 0) &&
+			    tracker_string_in_string_list (mimetype, mime_array) != -1) {
+				GValue value = { 0, };
+
+				if (G_UNLIKELY (!result_set1)) {
+					result_set1 = _tracker_db_result_set_new (2);
+				}
+
+				_tracker_db_result_set_append (result_set1);
+
+				/* copy value in column 0 */
+				_tracker_db_result_set_get_value (result_set2, 0, &value);
+				_tracker_db_result_set_set_value (result_set1, 0, &value);
+				g_value_unset (&value);
+
+				/* copy value in column 1 */
+				_tracker_db_result_set_get_value (result_set2, 1, &value);
+				_tracker_db_result_set_set_value (result_set1, 1, &value);
+				g_value_unset (&value);
+
+				count++;
+			}
+
+			g_free (path);
+			g_free (mimetype);
+			g_object_unref (result_set2);
+		}
+
+		if (count > 2047) {
+			g_warning ("Count is > 2047? Breaking for loop in %s, why?", 
+				   __FUNCTION__);
+			break;
+		}
+	}
+
+	g_free (location_prefix);
+	g_object_unref (tree);
+	g_array_free (hits, TRUE);
+	g_array_free (services, TRUE);
+
+	if (!result_set1) {
+		return NULL;
+	}
+
+	if (tracker_db_result_set_get_n_rows (result_set1) == 0) {
+		g_object_unref (result_set1);
+		return NULL;
+	}
+
+	tracker_db_result_set_rewind (result_set1);
+
+	return result_set1;
+}
+
+TrackerDBResultSet *
 tracker_db_metadata_get (TrackerDBInterface *iface, 
 			 const gchar        *id, 
 			 const gchar        *key)
@@ -2041,8 +2359,14 @@
 	g_return_if_fail (where_query != NULL);
 	g_return_if_fail (search_id != NULL);
 
+	g_message ("INSERT INTO cache.LiveSearches SELECT S.ID, '%s' %s %s %s",
+				  search_id, 
+				  from_query, 
+				  join_query, 
+				  where_query);
+
 	tracker_db_exec_no_reply (iface,
-				  "INSERT INTO LiveSearches SELECT S.ID, '%s' %s %s %s",
+				  "INSERT INTO cache.LiveSearches SELECT S.ID, '%s' %s %s %s",
 				  search_id, 
 				  from_query, 
 				  join_query, 
@@ -2134,9 +2458,11 @@
 	g_return_val_if_fail (query_joins != NULL, NULL);
 	g_return_val_if_fail (where_query != NULL, NULL);
 
+	// We need to add 'file-meta' and 'email-meta' here
+
 	result_set = tracker_db_exec (iface,
 				      "SELECT E.ServiceID, E.EventType "
-				      "%s%s LiveSearches as X, Events as E " /* FROM   A1 */
+				      "%s%s cache.LiveSearches as X, Events as E " /* FROM   A1 */
 				       "%s"                                  /* JOINS  A2 */
 				       "%s"                                  /* WHERE  A3 */
 				      "%sX.ServiceID = E.ServiceID "
@@ -2162,7 +2488,7 @@
 				      where_query ? "AND " : "");            /*        B3 */ 
 	
 	tracker_db_exec_no_reply (iface,
-				  "INSERT INTO LiveSearches "
+				  "INSERT INTO cache.LiveSearches "
 				   "SELECT E.ServiceID, '%s' "               /*        B0 */
 				  "%s%s Events as E "                        /* FROM   B1 */ 
 				  "%s"                                       /* JOINS  B2 */ 
@@ -2337,7 +2663,7 @@
 		field_name = tracker_db_metadata_get_related_names (iface, 
 								    tracker_field_data_get_field_name (l->data));
 		g_string_append_printf (sql_join, 
-					"INNER JOIN %s %s ON (X.ServiceID = %s.ServiceID AND %s.MetaDataID in (%s))\n ",
+					"INNER JOIN 'files-meta'.%s %s ON (X.ServiceID = %s.ServiceID AND %s.MetaDataID in (%s))\n ",
 					tracker_field_data_get_table_name (l->data),
 					tracker_field_data_get_alias (l->data),
 					tracker_field_data_get_alias (l->data),
@@ -2346,13 +2672,13 @@
 		g_free (field_name);
 	}
 
-	g_debug("Query : SELECT %s FROM LiveSearches as X \n"
+	g_debug("Query : SELECT %s FROM cache.LiveSearches as X \n"
 		"%s"
 		"WHERE X.SearchID = '%s'", 
 		sql_select->str, sql_join->str, search_id); 
 
 	result = tracker_db_exec (iface, 
-				  "SELECT %s FROM LiveSearches as X \n"
+				  "SELECT %s FROM cache.LiveSearches as X \n"
 				  "%s"
 				  "WHERE X.SearchID = '%s'", 
 				  sql_select->str, sql_join->str, search_id);

Modified: branches/xesam-support/src/trackerd/tracker-db.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db.h	(original)
+++ branches/xesam-support/src/trackerd/tracker-db.h	Fri Jun 20 09:19:39 2008
@@ -38,194 +38,204 @@
 
 G_BEGIN_DECLS
 
-void                tracker_db_init                            (void);
-void                tracker_db_shutdown                        (void);
+void                tracker_db_init                              (void);
+void                tracker_db_shutdown                          (void);
 
 /* Operations for TrackerDBInterface */
-TrackerDBResultSet *tracker_db_exec_proc                       (TrackerDBInterface  *iface,
-								const gchar         *procedure,
-								...);
-gboolean            tracker_db_exec_no_reply                   (TrackerDBInterface  *iface,
-								const gchar         *query,
-								...);
-TrackerDBResultSet *tracker_db_exec                            (TrackerDBInterface  *iface,
-								const char          *query,
-								...);
-gchar *             tracker_db_get_option_string               (const gchar         *option);
-void                tracker_db_set_option_string               (const gchar         *option,
-								const gchar         *value);
-gint                tracker_db_get_option_int                  (const gchar         *option);
-void                tracker_db_set_option_int                  (const gchar         *option,
-								gint                 value);
+TrackerDBResultSet *tracker_db_exec_proc                         (TrackerDBInterface  *iface,
+								  const gchar         *procedure,
+								  ...);
+gboolean            tracker_db_exec_no_reply                     (TrackerDBInterface  *iface,
+								  const gchar         *query,
+								  ...);
+TrackerDBResultSet *tracker_db_exec                              (TrackerDBInterface  *iface,
+								  const char          *query,
+								  ...);
+gchar *             tracker_db_get_option_string                 (const gchar         *option);
+void                tracker_db_set_option_string                 (const gchar         *option,
+								  const gchar         *value);
+gint                tracker_db_get_option_int                    (const gchar         *option);
+void                tracker_db_set_option_int                    (const gchar         *option,
+								  gint                 value);
 
 /* High level transactions things */
-gboolean            tracker_db_regulate_transactions           (TrackerDBInterface  *iface,
-								gint                 interval);
+gboolean            tracker_db_regulate_transactions             (TrackerDBInterface  *iface,
+								  gint                 interval);
 
 /* Metadata API */
-gchar *             tracker_db_metadata_get_related_names      (TrackerDBInterface  *iface,
-								const gchar         *name);
-const gchar *       tracker_db_metadata_get_table              (TrackerFieldType     type);
-TrackerDBResultSet *tracker_db_metadata_get                    (TrackerDBInterface  *iface,
-								const gchar         *id,
-								const gchar         *key);
-gchar *             tracker_db_metadata_get_delimited          (TrackerDBInterface  *iface,
-								const gchar         *id,
-								const gchar         *key);
-gchar *             tracker_db_metadata_set                    (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *id,
-								const gchar         *key,
-								gchar              **values,
-								gboolean             do_backup);
-void                tracker_db_metadata_set_single             (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *id,
-								const gchar         *key,
-								const gchar         *value,
-								gboolean             do_backup);
-void                tracker_db_metadata_insert_embedded        (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *id,
-								const gchar         *key,
-								gchar              **values,
-								GHashTable          *table);
-void                tracker_db_metadata_insert_single_embedded (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *id,
-								const gchar         *key,
-								const gchar         *value,
-								GHashTable          *table);
-void                tracker_db_metadata_delete_value           (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *id,
-								const gchar         *key,
-								const gchar         *value);
-void                tracker_db_metadata_delete                 (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *id,
-								const gchar         *key,
-								gboolean             update_indexes);
-TrackerDBResultSet *tracker_db_metadata_get_types              (TrackerDBInterface  *iface,
-								const gchar         *class,
-								gboolean             writeable);
+gchar *             tracker_db_metadata_get_related_names        (TrackerDBInterface  *iface,
+								  const gchar         *name);
+const gchar *       tracker_db_metadata_get_table                (TrackerFieldType     type);
+TrackerDBResultSet *tracker_db_metadata_get                      (TrackerDBInterface  *iface,
+								  const gchar         *id,
+								  const gchar         *key);
+gchar *             tracker_db_metadata_get_delimited            (TrackerDBInterface  *iface,
+								  const gchar         *id,
+								  const gchar         *key);
+gchar *             tracker_db_metadata_set                      (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *id,
+								  const gchar         *key,
+								  gchar              **values,
+								  gboolean             do_backup);
+void                tracker_db_metadata_set_single               (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *id,
+								  const gchar         *key,
+								  const gchar         *value,
+								  gboolean             do_backup);
+void                tracker_db_metadata_insert_embedded          (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *id,
+								  const gchar         *key,
+								  gchar              **values,
+								  GHashTable          *table);
+void                tracker_db_metadata_insert_single_embedded   (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *id,
+								  const gchar         *key,
+								  const gchar         *value,
+								  GHashTable          *table);
+void                tracker_db_metadata_delete_value             (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *id,
+								  const gchar         *key,
+								  const gchar         *value);
+void                tracker_db_metadata_delete                   (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *id,
+								  const gchar         *key,
+								  gboolean             update_indexes);
+TrackerDBResultSet *tracker_db_metadata_get_types                (TrackerDBInterface  *iface,
+								  const gchar         *class,
+								  gboolean             writeable);
 
 /* Search API */
-TrackerDBResultSet *tracker_db_search_text                     (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *search_string,
-								gint                 offset,
-								gint                 limit,
-								gboolean             save_results,
-								gboolean             detailed);
+TrackerDBResultSet *tracker_db_search_text                       (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *search_string,
+								  gint                 offset,
+								  gint                 limit,
+								  gboolean             save_results,
+								  gboolean             detailed);
+TrackerDBResultSet *tracker_db_search_text_and_mime              (TrackerDBInterface  *iface,
+								  const gchar         *text,
+								  gchar              **mime_array);
+TrackerDBResultSet *tracker_db_search_text_and_location          (TrackerDBInterface  *iface,
+								  const gchar         *text,
+								  const gchar         *location);
+TrackerDBResultSet *tracker_db_search_text_and_mime_and_location (TrackerDBInterface  *iface,
+								  const gchar         *text,
+								  gchar              **mime_array,
+								  const gchar         *location);
 
 /* Service API */
-guint32             tracker_db_service_create                  (TrackerDBInterface  *iface,
-								const gchar         *service,
-								TrackerDBFileInfo   *info);
-gchar *             tracker_db_service_get_by_entity           (TrackerDBInterface  *iface,
-								const gchar         *id);
+guint32             tracker_db_service_create                    (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  TrackerDBFileInfo   *info);
+gchar *             tracker_db_service_get_by_entity             (TrackerDBInterface  *iface,
+								  const gchar         *id);
 
 /* Files API */
-gchar **            tracker_db_files_get                       (TrackerDBInterface  *iface,
-								const gchar         *folder_uri);
-TrackerDBResultSet *tracker_db_files_get_by_service            (TrackerDBInterface  *iface,
-								const gchar         *service,
-								gint                 offset,
-								gint                 limit);
-TrackerDBResultSet *tracker_db_files_get_by_mime               (TrackerDBInterface  *iface,
-								gchar              **mimes,
-								gint                 n,
-								gint                 offset,
-								gint                 limit,
-								gboolean             vfs);
-guint32             tracker_db_file_get_id                     (TrackerDBInterface  *iface,
-								const gchar         *uri);
-gchar *             tracker_db_file_get_id_as_string           (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *uri);
-TrackerDBFileInfo * tracker_db_file_get_info                   (TrackerDBInterface  *iface,
-								TrackerDBFileInfo   *info);
-gboolean            tracker_db_file_is_up_to_date              (TrackerDBInterface  *iface,
-								const gchar         *uri,
-								guint32             *id);
-void                tracker_db_file_delete                     (TrackerDBInterface  *iface,
-								guint32              file_id);
-void                tracker_db_file_move                       (TrackerDBInterface  *iface,
-								const gchar         *moved_from_uri,
-								const gchar         *moved_to_uri);
-void                tracker_db_directory_delete                (TrackerDBInterface  *iface,
-								guint32              file_id,
-								const gchar         *uri);
-void                tracker_db_directory_move                  (TrackerDBInterface  *iface,
-								const gchar         *moved_from_uri,
-								const gchar         *moved_to_uri);
-void                tracker_db_uri_insert_pending              (const gchar         *id,
-								const gchar         *action,
-								const gchar         *counter,
-								const gchar         *uri,
-								const gchar         *mime,
-								gboolean             is_dir,
-								gboolean             is_new,
-								gint                 service_type_id);
-void                tracker_db_uri_update_pending              (const gchar         *counter,
-								const gchar         *action,
-								const gchar         *uri);
-TrackerDBResultSet *tracker_db_uri_get_subfolders              (TrackerDBInterface  *iface,
-								const gchar         *uri);
-TrackerDBResultSet *tracker_db_uri_sub_watches_get             (const gchar         *dir);
-TrackerDBResultSet *tracker_db_uri_sub_watches_delete          (const gchar         *dir);
+gchar **            tracker_db_files_get                         (TrackerDBInterface  *iface,
+								  const gchar         *folder_uri);
+TrackerDBResultSet *tracker_db_files_get_by_service              (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  gint                 offset,
+								  gint                 limit);
+TrackerDBResultSet *tracker_db_files_get_by_mime                 (TrackerDBInterface  *iface,
+								  gchar              **mimes,
+								  gint                 n,
+								  gint                 offset,
+								  gint                 limit,
+								  gboolean             vfs);
+guint32             tracker_db_file_get_id                       (TrackerDBInterface  *iface,
+								  const gchar         *uri);
+gchar *             tracker_db_file_get_id_as_string             (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *uri);
+TrackerDBFileInfo * tracker_db_file_get_info                     (TrackerDBInterface  *iface,
+								  TrackerDBFileInfo   *info);
+gboolean            tracker_db_file_is_up_to_date                (TrackerDBInterface  *iface,
+								  const gchar         *uri,
+								  guint32             *id);
+void                tracker_db_file_delete                       (TrackerDBInterface  *iface,
+								  guint32              file_id);
+void                tracker_db_file_move                         (TrackerDBInterface  *iface,
+								  const gchar         *moved_from_uri,
+								  const gchar         *moved_to_uri);
+void                tracker_db_directory_delete                  (TrackerDBInterface  *iface,
+								  guint32              file_id,
+								  const gchar         *uri);
+void                tracker_db_directory_move                    (TrackerDBInterface  *iface,
+								  const gchar         *moved_from_uri,
+								  const gchar         *moved_to_uri);
+void                tracker_db_uri_insert_pending                (const gchar         *id,
+								  const gchar         *action,
+								  const gchar         *counter,
+								  const gchar         *uri,
+								  const gchar         *mime,
+								  gboolean             is_dir,
+								  gboolean             is_new,
+								  gint                 service_type_id);
+void                tracker_db_uri_update_pending                (const gchar         *counter,
+								  const gchar         *action,
+								  const gchar         *uri);
+TrackerDBResultSet *tracker_db_uri_get_subfolders                (TrackerDBInterface  *iface,
+								  const gchar         *uri);
+TrackerDBResultSet *tracker_db_uri_sub_watches_get               (const gchar         *dir);
+TrackerDBResultSet *tracker_db_uri_sub_watches_delete            (const gchar         *dir);
 
 /* Keywords API */
-TrackerDBResultSet *tracker_db_keywords_get_list               (TrackerDBInterface  *iface,
-								const gchar         *service);
+TrackerDBResultSet *tracker_db_keywords_get_list                 (TrackerDBInterface  *iface,
+								  const gchar         *service);
 
 /* Miscellaneous API */
-GHashTable *        tracker_db_get_file_contents_words         (TrackerDBInterface  *iface,
-								guint32              id,
-								GHashTable          *old_table);
-GHashTable *        tracker_db_get_indexable_content_words     (TrackerDBInterface  *iface,
-								guint32              id,
-								GHashTable          *table,
-								gboolean             embedded_only);
-gchar *             tracker_db_get_field_name                  (const gchar         *service,
-								const gchar         *meta_name);
-TrackerFieldData *  tracker_db_get_metadata_field              (TrackerDBInterface  *iface,
-								const gchar         *service,
-								const gchar         *field_name,
-								gint                 field_count,
-								gboolean             is_select,
-								gboolean             is_condition);
+GHashTable *        tracker_db_get_file_contents_words           (TrackerDBInterface  *iface,
+								  guint32              id,
+								  GHashTable          *old_table);
+GHashTable *        tracker_db_get_indexable_content_words       (TrackerDBInterface  *iface,
+								  guint32              id,
+								  GHashTable          *table,
+								  gboolean             embedded_only);
+gchar *             tracker_db_get_field_name                    (const gchar         *service,
+								  const gchar         *meta_name);
+TrackerFieldData *  tracker_db_get_metadata_field                (TrackerDBInterface  *iface,
+								  const gchar         *service,
+								  const gchar         *field_name,
+								  gint                 field_count,
+								  gboolean             is_select,
+								  gboolean             is_condition);
 
 /* Live Search API */
-void                tracker_db_live_search_start               (TrackerDBInterface  *iface,
-								const gchar         *from_query,
-								const gchar         *join_query,
-								const gchar         *where_query,
-								const gchar         *search_id);
-void                tracker_db_live_search_stop                (TrackerDBInterface  *iface,
-								const gchar         *search_id);
-TrackerDBResultSet *tracker_db_live_search_get_all_ids         (TrackerDBInterface  *iface,
-								const gchar         *search_id);
-TrackerDBResultSet *tracker_db_live_search_get_new_ids         (TrackerDBInterface  *iface,
-								const gchar         *search_id,
-								const gchar         *from_query,
-								const gchar         *query_joins,
-								const gchar         *where_query);
-TrackerDBResultSet *tracker_db_live_search_get_deleted_ids     (TrackerDBInterface  *iface,
-								const gchar         *search_id);
-TrackerDBResultSet *tracker_db_live_search_get_hit_data        (TrackerDBInterface  *iface,
-								const gchar         *search_id,
-								GStrv                fields);
-TrackerDBResultSet *tracker_db_live_search_get_hit_count       (TrackerDBInterface  *iface,
-								const gchar         *search_id);
+void                tracker_db_live_search_start                 (TrackerDBInterface  *iface,
+								  const gchar         *from_query,
+								  const gchar         *join_query,
+								  const gchar         *where_query,
+								  const gchar         *search_id);
+void                tracker_db_live_search_stop                  (TrackerDBInterface  *iface,
+								  const gchar         *search_id);
+TrackerDBResultSet *tracker_db_live_search_get_all_ids           (TrackerDBInterface  *iface,
+								  const gchar         *search_id);
+TrackerDBResultSet *tracker_db_live_search_get_new_ids           (TrackerDBInterface  *iface,
+								  const gchar         *search_id,
+								  const gchar         *from_query,
+								  const gchar         *query_joins,
+								  const gchar         *where_query);
+TrackerDBResultSet *tracker_db_live_search_get_deleted_ids       (TrackerDBInterface  *iface,
+								  const gchar         *search_id);
+TrackerDBResultSet *tracker_db_live_search_get_hit_data          (TrackerDBInterface  *iface,
+								  const gchar         *search_id,
+								  GStrv                fields);
+TrackerDBResultSet *tracker_db_live_search_get_hit_count         (TrackerDBInterface  *iface,
+								  const gchar         *search_id);
 
 /* XESAM API */
-void                tracker_db_xesam_delete_handled_events     (TrackerDBInterface  *iface);
-TrackerDBResultSet *tracker_db_xesam_get_metadata_names        (TrackerDBInterface  *iface,
-								const char          *name);
-TrackerDBResultSet *tracker_db_xesam_get_service_names         (TrackerDBInterface  *iface,
-								const char          *name);
+void                tracker_db_xesam_delete_handled_events       (TrackerDBInterface  *iface);
+TrackerDBResultSet *tracker_db_xesam_get_metadata_names          (TrackerDBInterface  *iface,
+								  const char          *name);
+TrackerDBResultSet *tracker_db_xesam_get_service_names           (TrackerDBInterface  *iface,
+								  const char          *name);
 
 G_END_DECLS
 

Modified: branches/xesam-support/src/trackerd/tracker-dbus.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-dbus.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-dbus.c	Fri Jun 20 09:19:39 2008
@@ -311,39 +311,6 @@
         return NULL;
 }
 
-void
-tracker_dbus_indexer_start (void)
-{
-	GError *error = NULL;
-
-	if (!connection) {
-		g_critical ("DBus support must be initialized before starting the indexer!");
-		return;
-	}
-
-	if (!proxy_for_indexer) {
-		/* Get proxy for Service / Path / Interface of the indexer */
-		proxy_for_indexer = dbus_g_proxy_new_for_name (connection,
-							       "org.freedesktop.Tracker.Indexer", 
- 							       "/org/freedesktop/Tracker/Indexer",
-							       "org.freedesktop.Tracker.Indexer");
-		
-		if (!proxy_for_indexer) {
-			g_critical ("Couldn't create a DBusGProxy to the indexer service");
-			return;
-		}
-	}
-
-	org_freedesktop_Tracker_Indexer_set_running (proxy_for_indexer, 
-						     TRUE, 
-						     &error);
-
-	if (error) {
-		g_warning ("Couldn't start indexer, %s",
-			   error->message);
-	}
-}
-
 DBusGProxy *
 tracker_dbus_indexer_get_proxy (void)
 {

Modified: branches/xesam-support/src/trackerd/tracker-dbus.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-dbus.h	(original)
+++ branches/xesam-support/src/trackerd/tracker-dbus.h	Fri Jun 20 09:19:39 2008
@@ -37,7 +37,6 @@
 void        tracker_dbus_shutdown          (void);
 gboolean    tracker_dbus_register_objects  (Tracker       *tracker);
 GObject    *tracker_dbus_get_object        (GType          type);
-void        tracker_dbus_indexer_start     (void);
 DBusGProxy *tracker_dbus_indexer_get_proxy (void);
 
 G_END_DECLS

Modified: branches/xesam-support/src/trackerd/tracker-files.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-files.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-files.c	Fri Jun 20 09:19:39 2008
@@ -889,3 +889,185 @@
 
         return TRUE;
 }
+
+gboolean
+tracker_files_search_by_text_and_mime (TrackerFiles   *object,
+				       const gchar    *text,
+				       gchar         **mime_types,
+				       gchar        ***values,
+				       GError        **error)
+{
+	TrackerDBInterface  *iface;
+	TrackerDBResultSet  *result_set;
+	guint                request_id;
+
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_return_val_if_fail (text != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (mime_types != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (g_strv_length (mime_types) > 0, FALSE, error);
+	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
+
+	tracker_dbus_request_new (request_id,
+				  "DBus request to search files by text & mime types, "
+                                  "text:'%s', mime types:%d",
+                                  text,
+                                  g_strv_length (mime_types));
+
+	iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+	result_set = tracker_db_search_text_and_mime (iface, text, mime_types);
+
+	if (result_set) {
+		gboolean  valid = TRUE;
+		gchar    *prefix, *name;
+		gint      row_count = 0;
+		gint      i = 0;
+
+		row_count = tracker_db_result_set_get_n_rows (result_set);
+		*values = g_new0 (gchar *, row_count);
+
+		while (valid) {
+			tracker_db_result_set_get (result_set,
+						   0, &prefix,
+						   1, &name,
+						   -1);
+
+			*values[i++] = g_build_filename (prefix, name, NULL);
+			valid = tracker_db_result_set_iter_next (result_set);
+
+			g_free (prefix);
+			g_free (name);
+		}
+
+		g_object_unref (result_set);
+	} else {
+		*values = g_new0 (gchar *, 1);
+		*values[0] = NULL;
+	}
+	
+        tracker_dbus_request_success (request_id);
+
+	return TRUE;
+}
+
+gboolean
+tracker_files_search_by_text_and_location (TrackerFiles   *object,
+					   const gchar    *text,
+					   const gchar    *uri,
+					   gchar        ***values,
+					   GError        **error)
+{
+	TrackerDBInterface *iface;
+	TrackerDBResultSet *result_set;
+	guint               request_id;
+
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_return_val_if_fail (text != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
+
+	tracker_dbus_request_new (request_id,
+				  "DBus request to search files by text & location, "
+                                  "text:'%s', uri:'%s'",
+                                  text,
+                                  uri);
+
+	iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+	result_set = tracker_db_search_text_and_location (iface, text, uri);
+
+	if (result_set) {
+		gboolean  valid = TRUE;
+		gchar    *prefix, *name;
+		gint      row_count;
+		gint      i = 0;
+
+		row_count = tracker_db_result_set_get_n_rows (result_set);
+		*values = g_new0 (gchar *, row_count);
+
+		while (valid) {
+			tracker_db_result_set_get (result_set,
+						   0, &prefix,
+						   1, &name,
+						   -1);
+
+			*values[i++] = g_build_filename (prefix, name, NULL);
+			valid = tracker_db_result_set_iter_next (result_set);
+
+			g_free (prefix);
+			g_free (name);
+		}
+
+		g_object_unref (result_set);
+	} else {
+		*values = g_new0 (gchar *, 1);
+		*values[0] = NULL;
+	}
+
+        tracker_dbus_request_success (request_id);
+
+	return TRUE;
+}
+
+gboolean
+tracker_files_search_by_text_and_mime_and_location (TrackerFiles   *object,
+						    const gchar    *text,
+						    gchar         **mime_types,
+						    const gchar    *uri,
+						    gchar        ***values,
+						    GError        **error)
+{
+	TrackerDBInterface *iface;
+	TrackerDBResultSet *result_set;
+	guint               request_id;
+
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_return_val_if_fail (text != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (mime_types != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (g_strv_length (mime_types) > 0, FALSE, error);
+	tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
+
+	tracker_dbus_request_new (request_id,
+				  "DBus request to search files by text & mime types & location, "
+                                  "text:'%s', mime types:%d, uri:'%s'",
+                                  text,
+				  g_strv_length (mime_types),
+                                  uri);
+
+	iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+	result_set = tracker_db_search_text_and_mime_and_location (iface, text, mime_types, uri);
+
+	if (result_set) {
+		gboolean  valid = TRUE;
+		gchar    *prefix, *name;
+		gint      row_count;
+		gint      i = 0;
+
+		row_count = tracker_db_result_set_get_n_rows (result_set);
+		*values = g_new0 (gchar *, row_count);
+
+		while (valid) {
+			tracker_db_result_set_get (result_set,
+						   0, &prefix,
+						   1, &name,
+						   -1);
+
+			*values[i++] = g_build_filename (prefix, name, NULL);
+			valid = tracker_db_result_set_iter_next (result_set);
+
+			g_free (prefix);
+			g_free (name);
+		}
+
+		g_object_unref (result_set);
+	} else {
+		*values = g_new0 (gchar *, 1);
+		*values[0] = NULL;
+	}
+
+        tracker_dbus_request_success (request_id);
+
+	return TRUE;
+}

Modified: branches/xesam-support/src/trackerd/tracker-files.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-files.h	(original)
+++ branches/xesam-support/src/trackerd/tracker-files.h	Fri Jun 20 09:19:39 2008
@@ -48,72 +48,88 @@
 	GObjectClass parent;
 };
 
-GType    tracker_files_get_type                         (void);
+GType    tracker_files_get_type                             (void);
 
 TrackerFiles *
-         tracker_files_new                              (void);
-gboolean tracker_files_exist                            (TrackerFiles   *object,
-							 const gchar    *uri,
-							 gboolean        auto_create,
-							 gboolean       *value,
-							 GError        **error);
-gboolean tracker_files_create                           (TrackerFiles   *object,
-							 const gchar    *uri,
-							 gboolean        is_directory,
-							 const gchar    *mime,
-							 gint            size,
-							 gint            mtime,
-							 GError        **error);
-gboolean tracker_files_delete                           (TrackerFiles   *object,
-							 const gchar    *uri,
-							 GError        **error);
-gboolean tracker_files_get_service_type                 (TrackerFiles   *object,
-							 const gchar    *uri,
-							 gchar         **value,
-							 GError        **error);
-gboolean tracker_files_get_text_contents                (TrackerFiles   *object,
-							 const gchar    *uri,
-							 gint            offset,
-							 gint            max_length,
-							 gchar         **value,
-							 GError        **error);
-gboolean tracker_files_search_text_contents             (TrackerFiles   *object,
-							 const gchar    *uri,
-							 const gchar    *text,
-							 gint            max_length,
-							 gchar         **value,
-							 GError        **error);
-gboolean tracker_files_get_by_service_type              (TrackerFiles   *object,
-							 gint            live_query_id,
-							 const gchar    *service,
-							 gint            offset,
-							 gint            max_hits,
-							 gchar        ***values,
-							 GError        **error);
-gboolean tracker_files_get_by_mime_type                 (TrackerFiles   *object,
-							 gint            live_query_id,
-							 gchar         **mime_types,
-							 gint            offset,
-							 gint            max_hits,
-							 gchar        ***values,
-							 GError        **error);
-gboolean tracker_files_get_by_mime_type_vfs             (TrackerFiles   *object,
-							 gint            live_query_id,
-							 gchar         **mime_types,
-							 gint            offset,
-							 gint            max_hits,
-							 gchar        ***values,
-							 GError        **error);
-gboolean tracker_files_get_mtime                        (TrackerFiles   *object,
-							 const gchar    *uri,
-							 gint           *value,
-							 GError        **error);
-gboolean tracker_files_get_metadata_for_files_in_folder (TrackerFiles   *object,
-							 gint            live_query_id,
-							 const gchar    *uri,
-							 gchar         **fields,
-							 GPtrArray     **values,
-							 GError        **error);
+         tracker_files_new                                  (void);
+gboolean tracker_files_exist                                (TrackerFiles   *object,
+							     const gchar    *uri,
+							     gboolean        auto_create,
+							     gboolean       *value,
+							     GError        **error);
+gboolean tracker_files_create                               (TrackerFiles   *object,
+							     const gchar    *uri,
+							     gboolean        is_directory,
+							     const gchar    *mime,
+							     gint            size,
+							     gint            mtime,
+							     GError        **error);
+gboolean tracker_files_delete                               (TrackerFiles   *object,
+							     const gchar    *uri,
+							     GError        **error);
+gboolean tracker_files_get_service_type                     (TrackerFiles   *object,
+							     const gchar    *uri,
+							     gchar         **value,
+							     GError        **error);
+gboolean tracker_files_get_text_contents                    (TrackerFiles   *object,
+							     const gchar    *uri,
+							     gint            offset,
+							     gint            max_length,
+							     gchar         **value,
+							     GError        **error);
+gboolean tracker_files_search_text_contents                 (TrackerFiles   *object,
+							     const gchar    *uri,
+							     const gchar    *text,
+							     gint            max_length,
+							     gchar         **value,
+							     GError        **error);
+gboolean tracker_files_get_by_service_type                  (TrackerFiles   *object,
+							     gint            live_query_id,
+							     const gchar    *service,
+							     gint            offset,
+							     gint            max_hits,
+							     gchar        ***values,
+							     GError        **error);
+gboolean tracker_files_get_by_mime_type                     (TrackerFiles   *object,
+							     gint            live_query_id,
+							     gchar         **mime_types,
+							     gint            offset,
+							     gint            max_hits,
+							     gchar        ***values,
+							     GError        **error);
+gboolean tracker_files_get_by_mime_type_vfs                 (TrackerFiles   *object,
+							     gint            live_query_id,
+							     gchar         **mime_types,
+							     gint            offset,
+							     gint            max_hits,
+							     gchar        ***values,
+							     GError        **error);
+gboolean tracker_files_get_mtime                            (TrackerFiles   *object,
+							     const gchar    *uri,
+							     gint           *value,
+							     GError        **error);
+gboolean tracker_files_get_metadata_for_files_in_folder     (TrackerFiles   *object,
+							     gint            live_query_id,
+							     const gchar    *uri,
+							     gchar         **fields,
+							     GPtrArray     **values,
+							     GError        **error);
+gboolean tracker_files_search_by_text_and_mime              (TrackerFiles   *object,
+							     const gchar    *text,
+							     gchar         **mime_types,
+							     gchar        ***values,
+							     GError        **error);
+gboolean tracker_files_search_by_text_and_location          (TrackerFiles   *object,
+							     const gchar    *text,
+							     const gchar    *uri,
+							     gchar        ***values,
+							     GError        **error);
+gboolean tracker_files_search_by_text_and_mime_and_location (TrackerFiles   *object,
+							     const gchar    *text,
+							     gchar         **mime_types,
+							     const gchar    *uri,
+							     gchar        ***values,
+							     GError        **error);
 
 G_END_DECLS
 

Modified: branches/xesam-support/src/trackerd/tracker-main.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-main.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-main.c	Fri Jun 20 09:19:39 2008
@@ -49,6 +49,7 @@
 #include "tracker-crawler.h"
 #include "tracker-dbus.h"
 #include "tracker-indexer.h"
+#include "tracker-indexer-client.h"
 #include "tracker-monitor.h"
 #include "tracker-process-files.h"
 #include "tracker-status.h"
@@ -353,27 +354,6 @@
 			 "File types excluded from indexing");
 }
 
-static void
-create_index (gboolean need_data)
-{
-	TrackerDBInterface *iface;
-	
-	tracker->first_time_index = TRUE;
-
-	/* Reset stats for embedded services if they are being reindexed */
-	if (!need_data) {
-		iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
-
-		g_message ("*** DELETING STATS *** ");
-		tracker_db_exec_no_reply (iface, 
-					  "update ServiceTypes set TypeCount = 0 where Embedded = 1");
-	}
-
-	/* Create databases */
-
-	/* create file content, email content and email dbs */
-}
-
 static gboolean 
 shutdown_timeout_cb (gpointer user_data)
 {
@@ -457,7 +437,7 @@
 				     "tracker", 
 				     NULL);
 
-	filename = g_strdup_printf ("Tracker-%s.%d", g_get_user_name (), getpid ());
+	filename = g_strdup_printf ("tracker-%s", g_get_user_name ());
 	sys_tmp_dir = g_build_filename (g_get_tmp_dir (), filename, NULL);
 	g_free (filename);
 
@@ -469,12 +449,20 @@
 }
 
 static void
-initialize_directories (gboolean *need_index)
+initialize_directories (void)
 {
 	gchar *filename;
 
-	*need_index = FALSE;
-	
+	/* NOTE: We don't create the database directories here, the
+	 * tracker-db-manager does that for us.
+	 */ 
+
+	g_message ("Checking directory exists:'%s'", user_data_dir);
+	g_mkdir_with_parents (user_data_dir, 00755);
+
+	g_message ("Checking directory exists:'%s'", data_dir);
+	g_mkdir_with_parents (data_dir, 00755);
+
 	/* Remove an existing one */
 	if (g_file_test (sys_tmp_dir, G_FILE_TEST_EXISTS)) {
 		tracker_path_remove (sys_tmp_dir);
@@ -490,20 +478,6 @@
 	g_free (filename);
 
 	/* Remove database if we are reindexing */
-	if (reindex) {
-		tracker_path_remove (data_dir);
-		*need_index = TRUE;
-	}
-
-        /* Create other directories we need */
-	if (!g_file_test (user_data_dir, G_FILE_TEST_EXISTS)) {
-		g_mkdir_with_parents (user_data_dir, 00755);
-	}
-
-	if (!g_file_test (data_dir, G_FILE_TEST_EXISTS)) {
-		g_mkdir_with_parents (data_dir, 00755);
-	}
-
         filename = g_build_filename (sys_tmp_dir, "Attachments", NULL);
 	g_mkdir_with_parents (filename, 00700);
 	g_free (filename);
@@ -512,22 +486,59 @@
 	tracker_file_unlink (log_filename);
 }
 
-static void
-initialize_databases (gboolean need_index)
+static gboolean
+initialize_databases (void)
 {
-	Indexer  *index;
-	gchar    *final_index_name;
-	gboolean  need_data;
-	
-	if (!tracker->readonly && need_index) {
-		create_index (need_data);
-	} else {
-		tracker->first_time_index = FALSE;
+	DBusGProxy *proxy;
+	GError     *error = NULL;
+	Indexer    *index;
+	gchar      *final_index_name;
+	gboolean    success;
+
+	/* We use the blocking variant of this call here because
+	 * until we know the response, the daemon can't do anything
+	 * anyway.
+	 */
+	g_message ("Checking the database is ready, this may take a few moments, please wait..."); 
+
+	proxy = tracker_dbus_indexer_get_proxy ();
+	success = org_freedesktop_Tracker_Indexer_database_check (proxy, 
+								  reindex,
+								  &tracker->first_time_index, 
+								  &error);
+
+	if (!success || error) {
+		if (error) {
+			g_critical (error->message);
+			g_error_free (error);
+		}
+
+		g_critical ("Could not check the database status, "
+			    "can not start without the database!");
+
+		return FALSE;
+	}
+
+	/*
+	 * Create SQLite databases 
+	 */
+	if (!tracker->readonly && reindex) {
+		TrackerDBInterface *iface;
+		
+		tracker->first_time_index = TRUE;
+		
+		/* Reset stats for embedded services if they are being reindexed */
+		iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+		
+		g_message ("*** DELETING STATS *** ");
+		tracker_db_exec_no_reply (iface, 
+					  "update ServiceTypes set TypeCount = 0 where Embedded = 1");
+		
 	}
 
 	/* Check db integrity if not previously shut down cleanly */
 	if (!tracker->readonly && 
-	    !need_index && 
+	    !tracker->first_time_index && 
 	    tracker_db_get_option_int ("IntegrityCheck") == 1) {
 		g_message ("Performing integrity check as the daemon was not shutdown cleanly");
 		/* FIXME: Finish */
@@ -541,8 +552,8 @@
 		tracker_db_set_option_int ("InitialIndex", 1);
 	}
 
-	/* Move final file to index file if present and no files left
-	 * to merge.
+	/*
+	 * Create index files
 	 */
 	final_index_name = g_build_filename (data_dir, "file-index-final", NULL);
 	
@@ -595,6 +606,8 @@
 	tracker->email_index = index;
 
 	/* db_con->word_index = tracker->file_index; */
+
+	return TRUE;
 }
 
 static gboolean
@@ -608,10 +621,9 @@
 
 	lock_file = get_lock_file ();
 
-	lfp = g_open (lock_file, O_RDWR|O_CREAT, 0640);
+	lfp = g_open (lock_file, O_RDWR | O_CREAT, 0640);
 
 	if (lfp < 0) {
-		g_free (lock_file);
                 g_error ("Cannot open or create lockfile:'%s'", lock_file);
 	}
 
@@ -695,7 +707,6 @@
 	GOptionGroup   *group;
 	GError         *error = NULL;
 	GSList         *l;
-	gboolean        need_index;
 
         g_type_init ();
         
@@ -809,6 +820,8 @@
 		tracker_config_set_language (tracker->config, language);
 	}
 
+	initialize_directories ();
+
 	/* Initialize other subsystems */
 	tracker_log_init (log_filename, tracker_config_get_verbosity (tracker->config));
 	g_print ("Starting log:\n  File:'%s'\n", log_filename);
@@ -823,8 +836,6 @@
 
 	sanity_check_option_values ();
 
-	initialize_directories (&need_index);
-
 	tracker_nfs_lock_init (tracker_config_get_nfs_locking (tracker->config));
 	tracker_db_init ();
 	tracker_db_manager_init (TRUE, data_dir, user_data_dir, sys_tmp_dir); /* Using TRUE=broken */
@@ -844,7 +855,9 @@
 
 	tracker->readonly = check_multiple_instances ();
 
-	initialize_databases (need_index);
+	if (!initialize_databases ()) {
+		return EXIT_FAILURE;
+	}
 
 	/* Set our status as running, if this is FALSE, threads stop
 	 * doing what they do and shutdown.

Modified: branches/xesam-support/src/trackerd/tracker-metadata.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-metadata.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-metadata.c	Fri Jun 20 09:19:39 2008
@@ -285,73 +285,6 @@
 }
 
 gboolean
-tracker_metadata_register_type (TrackerMetadata  *object,
-				const gchar      *metadata,
-				const gchar      *type,
-				GError          **error)
-{
-	TrackerDBInterface *iface;
-	TrackerDBResultSet *result_set;
-	guint               request_id;
-	const gchar        *type_id;
-
-	request_id = tracker_dbus_get_next_request_id ();
-
-	tracker_dbus_return_val_if_fail (metadata != NULL, FALSE, error);
-	tracker_dbus_return_val_if_fail (type != NULL, FALSE, error);
-	
-	tracker_dbus_request_new (request_id,
-				  "DBus request to register metadata type, "
-				  "type:'%s', name:'%s'",
-				  type,
-				  metadata);
-
-	if (!metadata || strlen (metadata) < 3 || strchr (metadata, ':') == NULL) {
-		tracker_dbus_request_failed (request_id,
-					     error, 
-					     "Metadata name '%s' is invalid, all names must be in "
-					     "the format 'class:name'", 
-					     metadata);
-		return FALSE;
-	}
-
-	if (strcmp (type, "index") == 0) {
-		type_id = "0";
-	} else if (strcmp (type, "string") == 0) {
-		type_id = "1";
-	} else if (strcmp (type, "numeric") == 0) {
-		type_id = "2";
-	} else if (strcmp (type, "date") == 0) {
-		type_id = "3";
-	} else {
-		tracker_dbus_request_failed (request_id, 
-					     error, 
-					     "Metadata type '%s' is invalid, types include 'index', "
-					     "'string', 'numeric' and 'date'", 
-					     metadata);
-		return FALSE;
-	}
-
-	iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
-
-	result_set = tracker_db_exec_proc (iface, 
-					   "InsertMetadataType", 
-					   4, 
-					   metadata, 
-					   type_id, 
-					   "0", 
-					   "1");
-
-	if (result_set) {
-		g_object_unref (result_set);
-	}
-
-	tracker_dbus_request_success (request_id);
-
-	return TRUE;
-}
-
-gboolean
 tracker_metadata_get_type_details (TrackerMetadata  *object,
 				   const gchar      *metadata,
 				   gchar           **type,
@@ -439,45 +372,6 @@
 }
 
 gboolean
-tracker_metadata_get_writable_types (TrackerMetadata   *object,
-				     const gchar       *class,
-				     gchar           ***values,
-				     GError           **error)
-{
-	TrackerDBInterface *iface;
-	TrackerDBResultSet *result_set;
-	guint               request_id;
-	gchar              *class_formatted;
-
-	request_id = tracker_dbus_get_next_request_id ();
-
-	tracker_dbus_return_val_if_fail (class != NULL, FALSE, error);
-	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
-
-	tracker_dbus_request_new (request_id,
-				  "DBus request to get writable metadata types, "
-				  "class:'%s'",
-				  class);
-
-	iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
-
-	class_formatted = g_strconcat (class, ".*", NULL);
-	result_set = tracker_db_metadata_get_types (iface, 
-						    class_formatted, 
-						    TRUE);
-	if (result_set) {
-		*values = tracker_dbus_query_result_to_strv (result_set, 0, NULL);
-		g_object_unref (result_set);
-	}
-
-	g_free (class_formatted);
-
-	tracker_dbus_request_success (request_id);
-	
-	return TRUE;
-}
-
-gboolean
 tracker_metadata_get_registered_classes (TrackerMetadata   *object,
 					 gchar           ***values,
 					 GError           **error)

Modified: branches/xesam-support/src/trackerd/tracker-monitor.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-monitor.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-monitor.c	Fri Jun 20 09:19:39 2008
@@ -168,7 +168,7 @@
 	if (g_strv_length (files) > 0) {
 		g_debug ("Files deleted queue processed, sending first %d to the indexer", 
 			 g_strv_length (files));
-		org_freedesktop_Tracker_Indexer_delete_files_async (proxy, 
+		org_freedesktop_Tracker_Indexer_files_delete_async (proxy, 
 								    (const gchar **) files,
 								    indexer_files_processed_cb,
 								    files);
@@ -181,7 +181,7 @@
 	if (g_strv_length (files) > 0) {
 		g_debug ("Files created queue processed, sending first %d to the indexer", 
 			 g_strv_length (files));
-		org_freedesktop_Tracker_Indexer_check_files_async (proxy, 
+		org_freedesktop_Tracker_Indexer_files_check_async (proxy, 
 								   (const gchar **) files,
 								   indexer_files_processed_cb,
 								   files);
@@ -195,7 +195,7 @@
 	if (g_strv_length (files) > 0) {
 		g_debug ("Files updated queue processed, sending first %d to the indexer", 
 			 g_strv_length (files));
-		org_freedesktop_Tracker_Indexer_update_files_async (proxy, 
+		org_freedesktop_Tracker_Indexer_files_update_async (proxy, 
 								    (const gchar **) files,
 								    indexer_files_processed_cb,
 								    files);

Modified: branches/xesam-support/src/trackerd/tracker-xesam-live-search.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-live-search.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-live-search.c	Fri Jun 20 09:19:39 2008
@@ -481,6 +481,9 @@
 		
 		iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
 
+		g_message ("Closing search '%s'", 
+			   tracker_xesam_live_search_get_id (self));
+
 		tracker_db_live_search_stop (iface, 
 					     tracker_xesam_live_search_get_id (self));
 	}
@@ -1276,7 +1279,7 @@
 		g_free (orig_where);
 	}
 
-	g_message ("Parsed to '%s', '%s' and '%s'", 
+	g_message ("Parsed to:\n\t%s\n\t%s\n\t%s", 
 		   priv->from_sql,
 		   priv->join_sql,
 		   priv->where_sql);

Modified: branches/xesam-support/src/trackerd/tracker-xesam-query.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-query.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-query.c	Fri Jun 20 09:19:39 2008
@@ -479,7 +479,7 @@
 		}
 
 		g_string_append_printf (data->sql_where,
-					"\n WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) AND ", 
+					" WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) AND ", 
 					content, 
 					source);
 
@@ -947,10 +947,10 @@
 				
 		if (data->statement_count > 1) {
 			if (data->current_logic_operator == LOP_AND) {
-				data->sql_where = g_string_append (data->sql_where, "\n AND ");
+				data->sql_where = g_string_append (data->sql_where, " AND ");
 			} else {
 				if (data->current_logic_operator == LOP_OR) {
-					data->sql_where = g_string_append (data->sql_where, "\n OR ");
+					data->sql_where = g_string_append (data->sql_where, " OR ");
 				}
 			}
 		}
@@ -1306,7 +1306,7 @@
 	table_name = "Services";
 
 	data.sql_from = g_string_new ("");
-	g_string_append_printf (data.sql_from, "\n FROM %s S ", table_name);
+	g_string_append_printf (data.sql_from, " FROM 'file-meta'.%s S ", table_name);
 	
 	data.sql_join = g_string_new ("");
 	data.sql_where = g_string_new ("");
@@ -1342,7 +1342,7 @@
 			if (!tracker_field_data_get_is_condition (l->data)) {
 				if (tracker_field_data_get_needs_join (l->data)) {
 					g_string_append_printf (data.sql_join, 
-								"\n LEFT OUTER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID = %s) ", 
+								" LEFT OUTER JOIN 'file-meta'.%s %s ON (S.ID = %s.ServiceID and %s.MetaDataID = %s) ", 
 								tracker_field_data_get_table_name (l->data),
 								tracker_field_data_get_alias (l->data),
 								tracker_field_data_get_alias (l->data),
@@ -1355,7 +1355,7 @@
 				related_metadata = tracker_db_metadata_get_related_names (iface, 
 											  tracker_field_data_get_field_name (l->data));
 				g_string_append_printf (data.sql_join, 
-							"\n INNER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
+							" INNER JOIN 'file-meta'.%s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
 							tracker_field_data_get_table_name (l->data),
 							tracker_field_data_get_alias (l->data),
 							tracker_field_data_get_alias (l->data),

Added: branches/xesam-support/tests/scripts/testing.txt
==============================================================================
--- (empty file)
+++ branches/xesam-support/tests/scripts/testing.txt	Fri Jun 20 09:19:39 2008
@@ -0,0 +1,19 @@
+./dummy_data_stop.sh
+./dummy_data_start
+source xdg_dirs.source
+
+run trackerd
+run cd /tmp/Tracker-test/.cache/
+run sqlite3 xesam.db
+run pidof trackerd
+$PID appears
+
+sqlite3> prompt appears
+ATTACH './email-meta.db' as 'email-meta';
+ATTACH './file-meta.db' as 'file-meta';
+ATTACH '../../.local/share/tracker/data/common.db' as 'common';
+ATTACH '/tmp/Tracker-pvanhoof.$PID/cache.db' as 'cache';
+
+./dummy_data_stop.sh
+
+



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