tracker r1719 - in branches/xesam-support: . data data/dbus src/libtracker src/libtracker-common src/libtracker-db src/tracker-indexer src/trackerd tests/scripts
- From: pvanhoof svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1719 - in branches/xesam-support: . data data/dbus src/libtracker src/libtracker-common src/libtracker-db src/tracker-indexer src/trackerd tests/scripts
- Date: Fri, 20 Jun 2008 09:19:39 +0000 (UTC)
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]