tracker r1443 - in branches/xesam-support: . data src/libtracker-common src/libtracker-db src/tracker-indexer src/tracker-indexer/modules src/tracker-search-tool src/trackerd
- From: pvanhoof svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1443 - in branches/xesam-support: . data src/libtracker-common src/libtracker-db src/tracker-indexer src/tracker-indexer/modules src/tracker-search-tool src/trackerd
- Date: Fri, 16 May 2008 17:32:24 +0100 (BST)
Author: pvanhoof
Date: Fri May 16 16:32:23 2008
New Revision: 1443
URL: http://svn.gnome.org/viewvc/tracker?rev=1443&view=rev
Log:
2008-05-16 Philip Van Hoof <pvanhoof gnome org>
* Merged xesam-support with indexer-split
-> svn merge -r 1431:1439 ../indexer-split
* This merge included all the fixes that we did on May 16 while the
GNOME SVN server was closed for commit access
Modified:
branches/xesam-support/ChangeLog
branches/xesam-support/data/sqlite-stored-procs.sql
branches/xesam-support/src/libtracker-common/tracker-config.c
branches/xesam-support/src/libtracker-common/tracker-language.c
branches/xesam-support/src/libtracker-common/tracker-language.h
branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.c
branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h
branches/xesam-support/src/libtracker-db/tracker-db-interface.c
branches/xesam-support/src/libtracker-db/tracker-db-interface.h
branches/xesam-support/src/tracker-indexer/modules/Makefile.am
branches/xesam-support/src/tracker-indexer/modules/files.c
branches/xesam-support/src/tracker-indexer/tracker-indexer.c
branches/xesam-support/src/tracker-search-tool/tracker-search-tool.c
branches/xesam-support/src/trackerd/tracker-db-sqlite.c
branches/xesam-support/src/trackerd/tracker-db-sqlite.h
branches/xesam-support/src/trackerd/tracker-dbus-daemon.c
branches/xesam-support/src/trackerd/tracker-dbus-search.c
branches/xesam-support/src/trackerd/tracker-dbus.c
branches/xesam-support/src/trackerd/tracker-main.c
branches/xesam-support/src/trackerd/tracker-main.h
branches/xesam-support/src/trackerd/tracker-process-files.c
branches/xesam-support/src/trackerd/tracker-query-tree.c
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 May 16 16:32:23 2008
@@ -76,7 +76,7 @@
DeleteEmbeddedServiceMetadata2 DELETE FROM ServiceKeywordMetaData WHERE ServiceID = ? and MetaDataID in (select ID from MetaDataTypes where Embedded = 1);
DeleteEmbeddedServiceMetadata3 DELETE FROM ServiceNumericMetaData WHERE ServiceID = ? and MetaDataID in (select ID from MetaDataTypes where Embedded = 1);
-GetByServiceType SELECT DISTINCT F.Path || '/' || F.Name as uri FROM Services F WHERE F.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = ? or Parent = ?) LIMIT ?,?;
+GetByServiceType SELECT DISTINCT F.Path || '/' || F.Name as uri FROM Services F WHERE F.ServiceTypeID in (select TypeId from common.ServiceTypes where TypeName = ? or Parent = ?) LIMIT ?,?;
SaveServiceContents REPLACE into ServiceContents (ServiceID, MetadataID, Content) values (?,?,?);
DeleteContent DELETE FROM ServiceContents where ServiceID = ? and MetadataId = ?;
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 May 16 16:32:23 2008
@@ -111,7 +111,7 @@
#define DEFAULT_PADDING 2 /* 1->8 */
#define DEFAULT_THREAD_STACK_SIZE 0 /* 0 is the default for the platform */
-typedef struct _ConfigLanguages ConfigLanguages;
+/*typedef struct _ConfigLanguages ConfigLanguages;*/
typedef struct _TrackerConfigPriv TrackerConfigPriv;
struct _TrackerConfigPriv {
@@ -455,7 +455,7 @@
DEFAULT_MAX_TEXT_TO_INDEX,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class,
- PROP_MAX_TEXT_TO_INDEX,
+ PROP_MAX_WORDS_TO_INDEX,
g_param_spec_int ("max-words-to-index",
"Maximum words to index",
"Maximum unique words to index "
@@ -2258,7 +2258,7 @@
priv = GET_PRIV (config);
priv->max_text_to_index = value;
- g_object_notify (G_OBJECT (config), "max_text_to_index");
+ g_object_notify (G_OBJECT (config), "max-text-to-index");
}
void
@@ -2276,7 +2276,7 @@
priv = GET_PRIV (config);
priv->max_words_to_index = value;
- g_object_notify (G_OBJECT (config), "max_words_to_index");
+ g_object_notify (G_OBJECT (config), "max-words-to-index");
}
void
@@ -2401,7 +2401,7 @@
priv = GET_PRIV (config);
- priv->padding = value;
+ priv->thread_stack_size = value;
g_object_notify (G_OBJECT (config), "thread-stack-size");
}
Modified: branches/xesam-support/src/libtracker-common/tracker-language.c
==============================================================================
--- branches/xesam-support/src/libtracker-common/tracker-language.c (original)
+++ branches/xesam-support/src/libtracker-common/tracker-language.c Fri May 16 16:32:23 2008
@@ -30,15 +30,18 @@
#include "tracker-log.h"
#include "tracker-language.h"
-typedef struct _Languages Languages;
+#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_LANGUAGE, TrackerLanguagePriv))
+
+typedef struct _TrackerLanguagePriv TrackerLanguagePriv;
+typedef struct _Languages Languages;
+
+struct _TrackerLanguagePriv {
+ TrackerConfig *config;
-struct _TrackerLanguage {
GHashTable *stop_words;
GMutex *stemmer_mutex;
gpointer stemmer;
-
- TrackerConfig *config;
};
struct _Languages {
@@ -63,6 +66,151 @@
{ NULL, NULL },
};
+/* GObject properties */
+enum {
+ PROP_0,
+
+ PROP_CONFIG,
+ PROP_STOP_WORDS
+};
+
+static void language_finalize (GObject *object);
+static void language_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void language_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static const gchar *language_get_name_for_code (const gchar *language_code);
+static void language_notify_cb (TrackerConfig *config,
+ GParamSpec *param,
+ gpointer user_data);
+
+G_DEFINE_TYPE (TrackerLanguage, tracker_language, G_TYPE_OBJECT);
+
+static void
+tracker_language_class_init (TrackerLanguageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = language_finalize;
+ object_class->get_property = language_get_property;
+ object_class->set_property = language_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_CONFIG,
+ g_param_spec_object ("config",
+ "Config",
+ "Config",
+ tracker_config_get_type (),
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_STOP_WORDS,
+ g_param_spec_boxed ("stop-words",
+ "Stop words",
+ "Stop words",
+ g_hash_table_get_type (),
+ G_PARAM_READABLE));
+
+ g_type_class_add_private (object_class, sizeof (TrackerLanguagePriv));
+}
+
+static void
+tracker_language_init (TrackerLanguage *language)
+{
+ TrackerLanguagePriv *priv;
+ const gchar *stem_language;
+
+ priv = GET_PRIV (language);
+
+ priv->stop_words = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ NULL);
+
+ priv->stemmer_mutex = g_mutex_new ();
+
+ stem_language = language_get_name_for_code (NULL);
+ priv->stemmer = sb_stemmer_new (stem_language, NULL);
+}
+
+static void
+language_finalize (GObject *object)
+{
+ TrackerLanguagePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ if (priv->config) {
+ g_signal_handlers_disconnect_by_func (priv->config,
+ language_notify_cb,
+ TRACKER_LANGUAGE (object));
+ g_object_unref (priv->config);
+ }
+
+ if (priv->stemmer) {
+ g_mutex_lock (priv->stemmer_mutex);
+ sb_stemmer_delete (priv->stemmer);
+ g_mutex_unlock (priv->stemmer_mutex);
+ }
+
+ g_mutex_free (priv->stemmer_mutex);
+
+ if (priv->stop_words) {
+ g_hash_table_unref (priv->stop_words);
+ }
+
+ (G_OBJECT_CLASS (tracker_language_parent_class)->finalize) (object);
+}
+
+static void
+language_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ TrackerLanguagePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CONFIG:
+ g_value_set_object (value, priv->config);
+ break;
+ case PROP_STOP_WORDS:
+ g_value_set_boxed (value, priv->stop_words);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+language_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ TrackerLanguagePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CONFIG:
+ tracker_language_set_config (TRACKER_LANGUAGE (object),
+ g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
static gchar *
language_get_stopword_filename (const gchar *language_code)
{
@@ -103,10 +251,13 @@
language_add_stopwords (TrackerLanguage *language,
const gchar *filename)
{
- GMappedFile *mapped_file;
- GError *error = NULL;
- gchar *content;
- gchar **words, **p;
+ TrackerLanguagePriv *priv;
+ GMappedFile *mapped_file;
+ GError *error = NULL;
+ gchar *content;
+ gchar **words, **p;
+
+ priv = GET_PRIV (language);
mapped_file = g_mapped_file_new (filename, FALSE, &error);
if (error) {
@@ -123,7 +274,7 @@
/* FIXME: Shouldn't clear the hash table first? */
for (p = words; *p; p++) {
- g_hash_table_insert (language->stop_words,
+ g_hash_table_insert (priv->stop_words,
g_strdup (g_strstrip (*p)),
GINT_TO_POINTER (1));
}
@@ -135,10 +286,13 @@
language_set_stopword_list (TrackerLanguage *language,
const gchar *language_code)
{
- gchar *stopword_filename;
- const gchar *stem_language;
+ TrackerLanguagePriv *priv;
+ gchar *stopword_filename;
+ const gchar *stem_language;
- g_return_if_fail (language != NULL);
+ g_return_if_fail (TRACKER_IS_LANGUAGE (language));
+
+ priv = GET_PRIV (language);
/* Set up stopwords list */
tracker_log ("Setting up stopword list for language code:'%s'", language_code);
@@ -157,19 +311,19 @@
stem_language = language_get_name_for_code (language_code);
- g_mutex_lock (language->stemmer_mutex);
+ g_mutex_lock (priv->stemmer_mutex);
- if (language->stemmer) {
- sb_stemmer_delete (language->stemmer);
+ if (priv->stemmer) {
+ sb_stemmer_delete (priv->stemmer);
}
- language->stemmer = sb_stemmer_new (stem_language, NULL);
- if (!language->stemmer) {
+ priv->stemmer = sb_stemmer_new (stem_language, NULL);
+ if (!priv->stemmer) {
tracker_log ("No stemmer could be found for language:'%s'",
stem_language);
}
- g_mutex_unlock (language->stemmer_mutex);
+ g_mutex_unlock (priv->stemmer_mutex);
}
static void
@@ -188,55 +342,95 @@
TrackerLanguage *
tracker_language_new (TrackerConfig *config)
{
- TrackerLanguage *language;
- const gchar *stem_language;
-
g_return_val_if_fail (TRACKER_IS_CONFIG (config), NULL);
- language = g_new0 (TrackerLanguage, 1);
+ return g_object_new (TRACKER_TYPE_LANGUAGE,
+ "config", config,
+ NULL);
+}
- language->stop_words = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- NULL);
+TrackerConfig *
+tracker_language_get_config (TrackerLanguage *language)
+{
+ TrackerLanguagePriv *priv;
- language->stemmer_mutex = g_mutex_new ();
+ g_return_val_if_fail (TRACKER_IS_LANGUAGE (language), NULL);
- stem_language = language_get_name_for_code (NULL);
- language->stemmer = sb_stemmer_new (stem_language, NULL);
+ priv = GET_PRIV (language);
+
+ return priv->config;
+}
- language->config = g_object_ref (config);
+GHashTable *
+tracker_language_get_stop_words (TrackerLanguage *language)
+{
+ TrackerLanguagePriv *priv;
+
+ g_return_val_if_fail (TRACKER_IS_LANGUAGE (language), NULL);
- g_signal_connect (language->config, "notify::language",
- G_CALLBACK (language_notify_cb),
- language);
+ priv = GET_PRIV (language);
- return language;
+ return priv->stop_words;
}
void
-tracker_language_free (TrackerLanguage *language)
+tracker_language_set_config (TrackerLanguage *language,
+ TrackerConfig *config)
{
- if (!language) {
- return;
+ TrackerLanguagePriv *priv;
+
+ g_return_if_fail (TRACKER_IS_LANGUAGE (language));
+ g_return_if_fail (TRACKER_IS_CONFIG (config));
+
+ priv = GET_PRIV (language);
+
+ if (config) {
+ g_object_ref (config);
}
- g_signal_handlers_disconnect_by_func (language->config,
- language_notify_cb,
- language);
- g_object_unref (language->config);
+ if (priv->config) {
+ g_signal_handlers_disconnect_by_func (priv->config,
+ G_CALLBACK (language_notify_cb),
+ language);
+ g_object_unref (priv->config);
+ }
+
+ priv->config = config;
- if (language->stemmer) {
- g_mutex_lock (language->stemmer_mutex);
- sb_stemmer_delete (language->stemmer);
- g_mutex_unlock (language->stemmer_mutex);
+ if (priv->config) {
+ g_signal_connect (priv->config, "notify::language",
+ G_CALLBACK (language_notify_cb),
+ language);
}
- g_mutex_free (language->stemmer_mutex);
+ g_object_notify (G_OBJECT (language), "config");
+}
+
+gchar *
+tracker_language_stem_word (TrackerLanguage *language,
+ const gchar *word,
+ gint word_length)
+{
+ TrackerLanguagePriv *priv;
+ const gchar *stem_word;
- g_hash_table_destroy (language->stop_words);
+ g_return_val_if_fail (TRACKER_IS_LANGUAGE (language), NULL);
- g_free (language);
+ priv = GET_PRIV (language);
+
+ if (!tracker_config_get_enable_stemmer (priv->config)) {
+ return NULL;
+ }
+
+ g_mutex_lock (priv->stemmer_mutex);
+
+ stem_word = (const gchar*) sb_stemmer_stem (priv->stemmer,
+ (guchar*) word,
+ word_length);
+
+ g_mutex_unlock (priv->stemmer_mutex);
+
+ return g_strdup (stem_word);
}
gboolean
@@ -287,29 +481,3 @@
return g_strdup ("en");
}
-
-gchar *
-tracker_language_stem_word (TrackerLanguage *language,
- const gchar *word,
- gint word_length)
-{
- const gchar *stem_word;
-
- g_return_val_if_fail (language != NULL, NULL);
-
- if (!tracker_config_get_enable_stemmer (language->config)) {
- return NULL;
- }
-
- g_mutex_lock (language->stemmer_mutex);
- if (!language->stemmer) {
-
- }
-
- stem_word = (const gchar *) sb_stemmer_stem (language->stemmer,
- (guchar*) word,
- word_length);
- g_mutex_unlock (language->stemmer_mutex);
-
- return g_strdup (stem_word);
-}
Modified: branches/xesam-support/src/libtracker-common/tracker-language.h
==============================================================================
--- branches/xesam-support/src/libtracker-common/tracker-language.h (original)
+++ branches/xesam-support/src/libtracker-common/tracker-language.h Fri May 16 16:32:23 2008
@@ -22,21 +22,45 @@
#ifndef __LIBTRACKER_COMMON_LANGUAGE_H__
#define __LIBTRACKER_COMMON_LANGUAGE_H__
+#include <glib-object.h>
+
#include "tracker-config.h"
G_BEGIN_DECLS
-typedef struct _TrackerLanguage TrackerLanguage;
-
-TrackerLanguage *tracker_language_new (TrackerConfig *config);
-void tracker_language_free (TrackerLanguage *language);
-
-gboolean tracker_language_check_exists (const gchar *language_code);
-gchar * tracker_language_get_default_code (void);
+#define TRACKER_TYPE_LANGUAGE (tracker_language_get_type ())
+#define TRACKER_LANGUAGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_LANGUAGE, TrackerLanguage))
+#define TRACKER_LANGUAGE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TRACKER_TYPE_LANGUAGE, TrackerLanguageClass))
+#define TRACKER_IS_LANGUAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TRACKER_TYPE_LANGUAGE))
+#define TRACKER_IS_LANGUAGE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TRACKER_TYPE_LANGUAGE))
+#define TRACKER_LANGUAGE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_LANGUAGE, TrackerLanguageClass))
+
+typedef struct _TrackerLanguage TrackerLanguage;
+typedef struct _TrackerLanguageClass TrackerLanguageClass;
+
+struct _TrackerLanguage {
+ GObject parent;
+};
+
+struct _TrackerLanguageClass {
+ GObjectClass parent_class;
+};
+
+GType tracker_language_get_type (void) G_GNUC_CONST;
+
+TrackerLanguage *tracker_language_new (TrackerConfig *language);
+TrackerConfig * tracker_language_get_config (TrackerLanguage *language);
+GHashTable * tracker_language_get_stop_words (TrackerLanguage *language);
+void tracker_language_set_config (TrackerLanguage *language,
+ TrackerConfig *config);
gchar * tracker_language_stem_word (TrackerLanguage *language,
const gchar *word,
gint word_length);
+/* Utility functions */
+gboolean tracker_language_check_exists (const gchar *language_code);
+gchar * tracker_language_get_default_code (void);
+
G_END_DECLS
#endif /* __LIBTRACKER_COMMON_LANGUAGE_H__ */
Modified: branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.c
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.c (original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.c Fri May 16 16:32:23 2008
@@ -17,6 +17,7 @@
* Boston, MA 02110-1301, USA.
*/
+#include <sqlite3.h>
#include "tracker-db-interface-sqlite.h"
#define TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_DB_INTERFACE_SQLITE, TrackerDBInterfaceSqlitePrivate))
@@ -24,26 +25,6 @@
typedef struct TrackerDBInterfaceSqlitePrivate TrackerDBInterfaceSqlitePrivate;
typedef struct SqliteFunctionData SqliteFunctionData;
-typedef enum {
- QUERY,
- PROCEDURE,
- PROCEDURE_LEN
-}TrackerDBQueryType;
-
-typedef struct {
- GError **error;
- TrackerDBResultSet *retval;
- gboolean nowait;
- va_list args;
- gchar *query;
- GObject *iface;
- TrackerDBQueryType type;
-
- GCond* condition;
- gboolean had_callback;
- GMutex *mutex;
-} TrackerDBQueryTask;
-
struct TrackerDBInterfaceSqlitePrivate {
gchar *filename;
sqlite3 *db;
@@ -54,8 +35,6 @@
GSList *function_data;
guint in_transaction : 1;
-
- GThreadPool *pool;
};
struct SqliteFunctionData {
@@ -63,15 +42,12 @@
TrackerDBFunc func;
};
-
static void tracker_db_interface_sqlite_iface_init (TrackerDBInterfaceIface *iface);
-static void free_db_query_task (TrackerDBQueryTask *task);
enum {
PROP_0,
PROP_FILENAME,
- PROP_IN_TRANSACTION,
- PROP_POOL
+ PROP_IN_TRANSACTION
};
G_DEFINE_TYPE_WITH_CODE (TrackerDBInterfaceSqlite, tracker_db_interface_sqlite, G_TYPE_OBJECT,
@@ -119,9 +95,6 @@
case PROP_IN_TRANSACTION:
priv->in_transaction = g_value_get_boolean (value);
break;
- case PROP_POOL:
- priv->pool = g_value_get_pointer (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -144,9 +117,6 @@
case PROP_IN_TRANSACTION:
g_value_set_boolean (value, priv->in_transaction);
break;
- case PROP_POOL:
- g_value_set_pointer (value, priv->pool);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -194,13 +164,6 @@
PROP_IN_TRANSACTION,
"in-transaction");
- g_object_class_install_property (object_class,
- PROP_POOL,
- g_param_spec_pointer ("pool",
- "DB thread pool",
- "Database connection pool",
- G_PARAM_WRITABLE|G_PARAM_READABLE));
-
g_type_class_add_private (object_class,
sizeof (TrackerDBInterfaceSqlitePrivate));
}
@@ -212,15 +175,12 @@
priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
- priv->pool = NULL;
-
priv->procedures = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify) g_free,
(GDestroyNotify) g_free);
priv->statements = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify) g_free,
(GDestroyNotify) sqlite3_finalize);
-
}
static void
@@ -469,162 +429,6 @@
return stmt;
}
-
-void
-tracker_db_interface_sqlite_process_query (gpointer data, gpointer user_data)
-{
- TrackerDBInterfaceSqlitePrivate *priv;
- TrackerDBQueryTask *task = (TrackerDBQueryTask *) data;
- gboolean finalize_stmt = FALSE;
- sqlite3_stmt *stmt = NULL;
-
- priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (task->iface);
-
- switch (task->type) {
- case QUERY: {
- /* If it's a plain query, no need for argument checking */
-
- sqlite3_prepare_v2 (priv->db, task->query, -1, &stmt, NULL);
-
- if (!stmt) {
- g_set_error (task->error,
- TRACKER_DB_INTERFACE_ERROR,
- TRACKER_DB_QUERY_ERROR,
- sqlite3_errmsg (priv->db));
-
- goto ending;
- }
-
- /* If the stmt was created, we must free it up later, since
- * unlike with procedures, we don't cache the stmt */
-
- finalize_stmt = TRUE;
- } break;
- case PROCEDURE_LEN: {
- /* If it's a procedure called with _len argument passing */
-
- gint stmt_args, n_args, len;
- gchar *str;
-
- stmt = get_stored_stmt (TRACKER_DB_INTERFACE_SQLITE (task->iface), task->query);
- stmt_args = sqlite3_bind_parameter_count (stmt);
- n_args = 1;
-
- while ((str = va_arg (task->args, gchar *)) != NULL) {
- len = va_arg (task->args, gint);
-
- if (len == -1) {
- /* Assume we're dealing with strings */
- sqlite3_bind_text (stmt, n_args, str, len, SQLITE_STATIC);
- } else {
- /* Deal with it as a blob */
- sqlite3_bind_blob (stmt, n_args, str, len, SQLITE_STATIC);
- }
-
- n_args++;
- }
-
- /* Just panic if the number of arguments don't match */
- g_assert (n_args != stmt_args);
- } break;
- default:
- case PROCEDURE: {
- /* If it's a normal procedure with normal argument passing */
- gchar *str;
- gint stmt_args, n_args;
-
- stmt = get_stored_stmt (TRACKER_DB_INTERFACE_SQLITE (task->iface), task->query);
- stmt_args = sqlite3_bind_parameter_count (stmt);
- n_args = 1;
-
- while ((str = va_arg (task->args, gchar *)) != NULL) {
- sqlite3_bind_text (stmt, n_args, str, -1, SQLITE_STATIC);
- n_args++;
- }
-
- /* Just panic if the number of arguments don't match */
- g_assert (n_args != stmt_args);
- } break;
- }
-
- /* If any of those three cases, execute the stmt */
-
- task->retval = create_result_set_from_stmt (
- TRACKER_DB_INTERFACE_SQLITE (task->iface),
- stmt,
- task->error);
-
-ending:
-
- if (!task->nowait) {
- /* If we are a blocking call, the caller will freeup and
- * might consume the retval */
-
- g_mutex_lock (task->mutex);
- g_cond_broadcast (task->condition);
- task->had_callback = TRUE;
- g_mutex_unlock (task->mutex);
-
- } else {
- /* If not we freeup the retval, of course */
-
- if (task->retval)
- g_object_unref (task->retval);
- free_db_query_task (task);
- }
-
- /* In case we were a succeeded query (procedures's stmt are cached) */
-
- if (finalize_stmt)
- sqlite3_finalize (stmt);
-}
-
-static TrackerDBQueryTask*
-create_db_query_task (TrackerDBInterface *iface, const gchar *query, TrackerDBQueryType type, va_list args, GError **error)
-{
- TrackerDBQueryTask *task = g_slice_new (TrackerDBQueryTask);
-
- /* GCond infrastructure */
- task->mutex = g_mutex_new ();
- task->condition = g_cond_new ();
- task->had_callback = FALSE;
-
- /* Must set */
- task->error = error;
- task->iface = g_object_ref (iface);
- task->type = type;
- task->query = g_strdup (query);
- task->args = args;
-
- /* Defaults */
- task->nowait = FALSE;
-
- return task;
-}
-
-static void
-wait_for_db_query_task (TrackerDBQueryTask *task)
-{
- /* This simply waits for the GCond to become broadcasted */
-
- g_mutex_lock (task->mutex);
- if (!task->had_callback)
- g_cond_wait (task->condition, task->mutex);
- g_mutex_unlock (task->mutex);
-}
-
-static void
-free_db_query_task (TrackerDBQueryTask *task)
-{
- /* Freeing up resources of a db-query-task */
-
- g_free (task->query);
- g_object_unref (task->iface);
- g_mutex_free (task->mutex);
- g_cond_free (task->condition);
- g_slice_free (TrackerDBQueryTask, task);
-}
-
static TrackerDBResultSet *
tracker_db_interface_sqlite_execute_procedure (TrackerDBInterface *db_interface,
GError **error,
@@ -632,55 +436,26 @@
va_list args)
{
TrackerDBInterfaceSqlitePrivate *priv;
- TrackerDBResultSet *retval;
- TrackerDBQueryTask *task;
+ sqlite3_stmt *stmt;
+ gint stmt_args, n_args;
+ gchar *str;
priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
+ stmt = get_stored_stmt (TRACKER_DB_INTERFACE_SQLITE (db_interface), procedure_name);
+ stmt_args = sqlite3_bind_parameter_count (stmt);
+ n_args = 1;
- task = create_db_query_task (db_interface,
- procedure_name,
- PROCEDURE,
- args,
- error);
-
- g_thread_pool_push (priv->pool, task, NULL);
- wait_for_db_query_task (task);
- retval = task->retval;
- free_db_query_task (task);
-
- return retval;
-}
-
-
-
-static void
-tracker_db_interface_sqlite_execute_procedure_no_reply (TrackerDBInterface *db_interface,
- GError **error,
- const gchar *procedure_name,
- va_list args)
-{
- TrackerDBInterfaceSqlitePrivate *priv;
- TrackerDBQueryTask *task;
-
- priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
+ while ((str = va_arg (args, gchar *)) != NULL) {
+ sqlite3_bind_text (stmt, n_args, str, -1, SQLITE_STATIC);
+ n_args++;
+ }
- task = create_db_query_task (db_interface,
- procedure_name,
- PROCEDURE,
- args,
- error);
-
- g_thread_pool_push (priv->pool, task, NULL);
-
- wait_for_db_query_task (task);
- if (task->retval)
- g_object_unref (task->retval);
- free_db_query_task (task);
+ /* Just panic if the number of arguments don't match */
+ g_assert (n_args != stmt_args);
- return;
+ return create_result_set_from_stmt (TRACKER_DB_INTERFACE_SQLITE (db_interface), stmt, error);
}
-
static TrackerDBResultSet *
tracker_db_interface_sqlite_execute_procedure_len (TrackerDBInterface *db_interface,
GError **error,
@@ -688,25 +463,33 @@
va_list args)
{
TrackerDBInterfaceSqlitePrivate *priv;
- TrackerDBResultSet *retval;
- TrackerDBQueryTask *task;
+ sqlite3_stmt *stmt;
+ gint stmt_args, n_args, len;
+ gchar *str;
priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
+ stmt = get_stored_stmt (TRACKER_DB_INTERFACE_SQLITE (db_interface), procedure_name);
+ stmt_args = sqlite3_bind_parameter_count (stmt);
+ n_args = 1;
+
+ while ((str = va_arg (args, gchar *)) != NULL) {
+ len = va_arg (args, gint);
+
+ if (len == -1) {
+ /* Assume we're dealing with strings */
+ sqlite3_bind_text (stmt, n_args, str, len, SQLITE_STATIC);
+ } else {
+ /* Deal with it as a blob */
+ sqlite3_bind_blob (stmt, n_args, str, len, SQLITE_STATIC);
+ }
- task = create_db_query_task (db_interface,
- procedure_name,
- PROCEDURE_LEN,
- args,
- error);
-
- g_thread_pool_push (priv->pool, task, NULL);
-
- wait_for_db_query_task (task);
- retval = task->retval;
+ n_args++;
+ }
- free_db_query_task (task);
+ /* Just panic if the number of arguments don't match */
+ g_assert (n_args != stmt_args);
- return retval;
+ return create_result_set_from_stmt (TRACKER_DB_INTERFACE_SQLITE (db_interface), stmt, error);
}
static TrackerDBResultSet *
@@ -715,50 +498,25 @@
const gchar *query)
{
TrackerDBInterfaceSqlitePrivate *priv;
- TrackerDBResultSet *retval;
- TrackerDBQueryTask *task;
+ TrackerDBResultSet *result_set;
+ sqlite3_stmt *stmt;
priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
- task = create_db_query_task (db_interface,
- query,
- QUERY,
- NULL,
- error);
-
- g_thread_pool_push (priv->pool, task, NULL);
+ sqlite3_prepare_v2 (priv->db, query, -1, &stmt, NULL);
- wait_for_db_query_task (task);
- retval = task->retval;
-
- free_db_query_task (task);
-
- return retval;
-
-}
-
-static void
-tracker_db_interface_sqlite_execute_query_no_reply (TrackerDBInterface *db_interface,
- GError **error,
- const gchar *query)
-{
- TrackerDBInterfaceSqlitePrivate *priv;
- TrackerDBQueryTask *task;
+ if (!stmt) {
+ g_set_error (error,
+ TRACKER_DB_INTERFACE_ERROR,
+ TRACKER_DB_QUERY_ERROR,
+ sqlite3_errmsg (priv->db));
+ return NULL;
+ }
- priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
+ result_set = create_result_set_from_stmt (TRACKER_DB_INTERFACE_SQLITE (db_interface), stmt, error);
+ sqlite3_finalize (stmt);
- task = create_db_query_task (db_interface,
- query,
- QUERY,
- NULL,
- error);
-
- g_thread_pool_push (priv->pool, task, NULL);
-
- wait_for_db_query_task (task);
- if (task->retval)
- g_object_unref (task->retval);
- free_db_query_task (task);
+ return result_set;
}
static void
@@ -766,17 +524,15 @@
{
iface->set_procedure_table = tracker_db_interface_sqlite_set_procedure_table;
iface->execute_procedure = tracker_db_interface_sqlite_execute_procedure;
- iface->execute_procedure_no_reply = tracker_db_interface_sqlite_execute_procedure_no_reply;
iface->execute_procedure_len = tracker_db_interface_sqlite_execute_procedure_len;
iface->execute_query = tracker_db_interface_sqlite_execute_query;
- iface->execute_query_no_reply = tracker_db_interface_sqlite_execute_query_no_reply;
}
TrackerDBInterface *
-tracker_db_interface_sqlite_new (const gchar *filename, GThreadPool *pool)
+tracker_db_interface_sqlite_new (const gchar *filename)
{
return g_object_new (TRACKER_TYPE_DB_INTERFACE_SQLITE,
- "filename", filename, "pool", pool,
+ "filename", filename,
NULL);
}
Modified: branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h (original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h Fri May 16 16:32:23 2008
@@ -20,8 +20,6 @@
#ifndef __TRACKER_DB_INTERFACE_SQLITE_H__
#define __TRACKER_DB_INTERFACE_SQLITE_H__
-#include <sqlite3.h>
-
#include "tracker-db-interface.h"
G_BEGIN_DECLS
@@ -33,7 +31,6 @@
#define TRACKER_IS_DB_INTERFACE_SQLITE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((o), TRACKER_TYPE_DB_INTERFACE_SQLITE))
#define TRACKER_DB_INTERFACE_SQLITE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_DB_INTERFACE_SQLITE, TrackerDBInterfaceSqliteClass))
-
typedef struct TrackerDBInterfaceSqlite TrackerDBInterfaceSqlite;
typedef struct TrackerDBInterfaceSqliteClass TrackerDBInterfaceSqliteClass;
@@ -55,7 +52,7 @@
GType tracker_db_interface_sqlite_get_type (void);
-TrackerDBInterface * tracker_db_interface_sqlite_new (const gchar *filename, GThreadPool *pool);
+TrackerDBInterface * tracker_db_interface_sqlite_new (const gchar *filename);
void tracker_db_interface_sqlite_create_function (TrackerDBInterface *interface,
const gchar *name,
@@ -67,7 +64,6 @@
gint64 tracker_db_interface_sqlite_get_last_insert_id (TrackerDBInterfaceSqlite *interface);
-void tracker_db_interface_sqlite_process_query (gpointer data, gpointer user_data);
G_END_DECLS
Modified: branches/xesam-support/src/libtracker-db/tracker-db-interface.c
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-interface.c (original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-interface.c Fri May 16 16:32:23 2008
@@ -255,27 +255,6 @@
}
-void
-tracker_db_interface_execute_vquery_no_reply (TrackerDBInterface *interface,
- GError **error,
- const gchar *query,
- va_list args)
-{
- gchar *str;
-
- g_return_if_fail (TRACKER_IS_DB_INTERFACE (interface));
- g_return_if_fail (query != NULL);
-
- if (!TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_query_no_reply) {
- g_critical ("Database abstraction %s doesn't implement the method execute_vquery()", G_OBJECT_TYPE_NAME (interface));
- return;
- }
-
- str = g_strdup_vprintf (query, args);
- TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_query_no_reply (interface, error, str);
- g_free (str);
-}
-
TrackerDBResultSet *
tracker_db_interface_execute_query (TrackerDBInterface *interface,
@@ -330,23 +309,6 @@
}
-void
-tracker_db_interface_execute_vprocedure_no_reply (TrackerDBInterface *interface,
- GError **error,
- const gchar *procedure,
- va_list args)
-{
- g_return_if_fail (TRACKER_IS_DB_INTERFACE (interface));
- g_return_if_fail (procedure != NULL);
-
- if (!TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure_no_reply) {
- g_critical ("Database abstraction %s doesn't implement the method execute_procedure()", G_OBJECT_TYPE_NAME (interface));
- return;
- }
-
- TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure_no_reply (interface, error, procedure, args);
-}
-
TrackerDBResultSet *
tracker_db_interface_execute_vprocedure_len (TrackerDBInterface *interface,
Modified: branches/xesam-support/src/libtracker-db/tracker-db-interface.h
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-interface.h (original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-interface.h Fri May 16 16:32:23 2008
@@ -59,11 +59,6 @@
GError **error,
const gchar *procedure,
va_list args);
- void (* execute_procedure_no_reply)
- (TrackerDBInterface *interface,
- GError **error,
- const gchar *procedure,
- va_list args);
TrackerDBResultSet * (* execute_procedure_len) (TrackerDBInterface *interface,
GError **error,
const gchar *procedure,
@@ -71,9 +66,6 @@
TrackerDBResultSet * (* execute_query) (TrackerDBInterface *interface,
GError **error,
const gchar *query);
- void (* execute_query_no_reply)(TrackerDBInterface *interface,
- GError **error,
- const gchar *query);
};
@@ -98,11 +90,6 @@
GError **error,
const gchar *query,
va_list args);
-void tracker_db_interface_execute_vquery_no_reply
- (TrackerDBInterface *interface,
- GError **error,
- const gchar *query,
- va_list args);
TrackerDBResultSet * tracker_db_interface_execute_query (TrackerDBInterface *interface,
GError **error,
const gchar *query,
@@ -113,11 +100,6 @@
GError **error,
const gchar *procedure,
va_list args);
-void tracker_db_interface_execute_vprocedure_no_reply
- (TrackerDBInterface *interface,
- GError **error,
- const gchar *procedure,
- va_list args);
TrackerDBResultSet * tracker_db_interface_execute_procedure (TrackerDBInterface *interface,
GError **error,
const gchar *procedure,
Modified: branches/xesam-support/src/tracker-indexer/modules/Makefile.am
==============================================================================
--- branches/xesam-support/src/tracker-indexer/modules/Makefile.am (original)
+++ branches/xesam-support/src/tracker-indexer/modules/Makefile.am Fri May 16 16:32:23 2008
@@ -23,7 +23,8 @@
libtracker_indexer_files_la_LDFLAGS = $(module_flags)
libtracker_indexer_files_la_LIBADD = \
$(GLIB2_LIBS) \
- $(top_builddir)/src/libtracker-db/libtracker-db.la
+ $(top_builddir)/src/libtracker-db/libtracker-db.la \
+ $(top_builddir)/src/xdgmime/libxdgmime.la
libtracker_indexer_gaim_conversations_la_SOURCES = gaim-conversations.c
libtracker_indexer_gaim_conversations_la_LDFLAGS = $(module_flags)
Modified: branches/xesam-support/src/tracker-indexer/modules/files.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/modules/files.c (original)
+++ branches/xesam-support/src/tracker-indexer/modules/files.c Fri May 16 16:32:23 2008
@@ -29,7 +29,7 @@
#define METADATA_FILE_PATH "File:Path"
#define METADATA_FILE_NAME "File:Name"
#define METADATA_FILE_LINK "File:Link"
-#define METADATA_FILE_MIME "File:Mime"
+#define METADATA_FILE_MIMETYPE "File:Mime"
#define METADATA_FILE_SIZE "File:Size"
#define METADATA_FILE_MODIFIED "File:Modified"
#define METADATA_FILE_ACCESSED "File:Accessed"
@@ -88,6 +88,8 @@
g_hash_table_insert (metadata, METADATA_FILE_PATH, g_path_get_dirname (file));
g_hash_table_insert (metadata, METADATA_FILE_NAME_DELIMITED,
g_filename_to_utf8 (file, -1, NULL, NULL, NULL));
+ g_hash_table_insert (metadata, METADATA_FILE_MIMETYPE,
+ tracker_file_get_mime_type (file));
if (S_ISLNK (st.st_mode)) {
gchar *link_path;
@@ -100,7 +102,6 @@
/* FIXME, Missing:
*
- * File:Mime
* File:Size
* File:Modified
* File:Accessed
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 May 16 16:32:23 2008
@@ -365,6 +365,9 @@
priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
module = g_hash_table_lookup (priv->indexer_modules, module_name);
+
+ g_return_if_fail (module != NULL);
+
dirs = tracker_indexer_module_get_directories (module);
g_return_if_fail (dirs != NULL);
Modified: branches/xesam-support/src/tracker-search-tool/tracker-search-tool.c
==============================================================================
--- branches/xesam-support/src/tracker-search-tool/tracker-search-tool.c (original)
+++ branches/xesam-support/src/tracker-search-tool/tracker-search-tool.c Fri May 16 16:32:23 2008
@@ -123,6 +123,9 @@
"Contacts",
"Emails",
"EmailAttachments",
+"EvolutionEmails",
+"ModestEmails",
+"ThunderbirdEmails",
"Appointments",
"Tasks",
"Bookmarks",
@@ -131,9 +134,13 @@
NULL
};
-static service_info_t services[13] = {
-
+static service_info_t services[16] = {
{ "Emails", N_("Emails"), "stock_mail", NULL, SERVICE_EMAILS, NULL, FALSE, 0, 0},
+ { "EvolutionEmails",
+ N_("Emails"), "stock_mail", NULL, SERVICE_EMAILS, NULL, FALSE, 0, 0},
+ { "ModestEmails", N_("Emails"), "stock_mail", NULL, SERVICE_EMAILS, NULL, FALSE, 0, 0},
+ { "ThunderbirdEmails",
+ N_("Emails"), "stock_mail", NULL, SERVICE_EMAILS, NULL, FALSE, 0, 0},
{ "Files", N_("All Files"), "system-file-manager", NULL, SERVICE_FILES, NULL, FALSE, 0, 0},
{ "Folders", N_("Folders"), "folder", NULL, SERVICE_FOLDERS, NULL, FALSE, 0, 0},
{ "Documents", N_("Documents"), "x-office-document", NULL, SERVICE_DOCUMENTS, NULL, FALSE, 0, 0},
Modified: branches/xesam-support/src/trackerd/tracker-db-sqlite.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db-sqlite.c (original)
+++ branches/xesam-support/src/trackerd/tracker-db-sqlite.c Fri May 16 16:32:23 2008
@@ -874,19 +874,6 @@
}
-/* TODO: refactor this to a better location. This is the threadpool shared by
- * all SQLite connections. I noticed that having a thread per connection is
- * not sufficient. All statements must happen sequential ... */
-
-static GThreadPool *pool = NULL;
-
-/* TODO: the rafactor to a better location should perform this at-exit. For
- * example when the desktop-session alarms that the system is shutting down,
- * and when the trackerd process is exiting.
- *
- * g_thread_pool_free (priv->pool, TRUE, TRUE);
- **/
-
/*
* If the file doesnt exist, creates a new file of size 0
*/
@@ -896,16 +883,12 @@
TrackerDBInterface *iface;
const gchar *dbname;
- if (!pool) {
- pool = g_thread_pool_new (tracker_db_interface_sqlite_process_query,
- NULL, 1, TRUE, NULL);
- }
dbname = tracker_db_manager_get_file (database);
/* We pass a GThreadPool here, it should be the same pool for all opened
* SQLite databases */
- iface = tracker_db_interface_sqlite_new (dbname, pool);
+ iface = tracker_db_interface_sqlite_new (dbname);
tracker_db_interface_set_procedure_table (iface, prepared_queries);
@@ -995,6 +978,57 @@
emails_db_con->data = db_con;
emails_db_con->word_index = email_word_index_db_con;
emails_db_con->cache = db_con->cache;
+
+ tracker_db_attach_db (db_con, TRACKER_DB_COMMON);
+ tracker_db_attach_db (db_con, TRACKER_DB_CACHE);
+
+ return db_con;
+
+}
+
+
+
+/* convenience function for process files thread */
+DBConnection *
+tracker_db_connect_xesam ()
+{
+
+ DBConnection *db_con;
+ DBConnection *blob_db_con = NULL;
+ Indexer *word_index_db_con = NULL;
+
+ DBConnection *common_db_con = NULL;
+
+ DBConnection *emails_blob_db_con = NULL;
+ DBConnection *emails_db_con= NULL;
+ Indexer *email_word_index_db_con= NULL;
+
+ db_con = tracker_db_connect_file_meta ();
+ emails_db_con = tracker_db_connect_email_meta ();
+
+ blob_db_con = tracker_db_connect_file_content ();
+ emails_blob_db_con = tracker_db_connect_email_content ();
+ common_db_con = tracker_db_connect_common ();
+
+ word_index_db_con = tracker->file_index;
+ email_word_index_db_con = tracker->email_index;
+
+ db_con->cache = tracker_db_connect_cache ();
+
+ db_con->blob = blob_db_con;
+ db_con->data = db_con;
+ db_con->emails = emails_db_con;
+ db_con->common = common_db_con;
+ db_con->word_index = word_index_db_con;
+
+ emails_db_con->common = common_db_con;
+ emails_db_con->blob = emails_blob_db_con;
+ emails_db_con->data = db_con;
+ emails_db_con->word_index = email_word_index_db_con;
+ emails_db_con->cache = db_con->cache;
+
+ tracker_db_attach_db (db_con, TRACKER_DB_COMMON);
+ tracker_db_attach_db (db_con, TRACKER_DB_CACHE);
return db_con;
@@ -1391,13 +1425,16 @@
gboolean
tracker_db_exec_no_reply (TrackerDBInterface *iface, const char *query, ...)
{
+ TrackerDBResultSet *result_set;
va_list args;
tracker_nfs_lock_obtain ();
va_start (args, query);
- tracker_db_interface_execute_vquery_no_reply (iface, NULL, query, args);
+ result_set = tracker_db_interface_execute_vquery (iface, NULL, query, args);
va_end (args);
+ if (result_set)
+ g_object_unref (result_set);
tracker_nfs_lock_release ();
@@ -1452,11 +1489,14 @@
static gboolean
tracker_exec_proc_no_reply (TrackerDBInterface *iface, const char *procedure, ...)
{
+ TrackerDBResultSet *result_set;
va_list args;
va_start (args, procedure);
- tracker_db_interface_execute_vprocedure_no_reply (iface, NULL, procedure, args);
+ result_set = tracker_db_interface_execute_vprocedure (iface, NULL, procedure, args);
va_end (args);
+ if (result_set)
+ g_object_unref (result_set);
return TRUE;
}
@@ -1969,14 +2009,13 @@
tracker_config_get_max_word_length (tracker->config),
tracker_config_get_min_word_length (tracker->config));
- result_set = tracker_exec_proc (db_con->common, "GetRelatedServiceIDs", service, service, NULL);
+ result_set = tracker_exec_proc (db_con, "GetRelatedServiceIDs", service, service, NULL);
if (result_set) {
gboolean valid = TRUE;
gint type_id;
while (valid) {
- g_print ("aaaandaya %d\n", i);
tracker_db_result_set_get (result_set, 0, &type_id, -1);
service_array[i] = type_id;
i++;
Modified: branches/xesam-support/src/trackerd/tracker-db-sqlite.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db-sqlite.h (original)
+++ branches/xesam-support/src/trackerd/tracker-db-sqlite.h Fri May 16 16:32:23 2008
@@ -107,6 +107,7 @@
DBConnection * tracker_db_connect_email_meta (void);
DBConnection * tracker_db_connect_file_meta (void);
DBConnection * tracker_db_connect_all (void);
+DBConnection * tracker_db_connect_xesam (void);
void tracker_db_close_all (DBConnection *db_con);
void tracker_db_refresh_all (DBConnection *db_con);
void tracker_db_refresh_email (DBConnection *db_con);
Modified: branches/xesam-support/src/trackerd/tracker-dbus-daemon.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-dbus-daemon.c (original)
+++ branches/xesam-support/src/trackerd/tracker-dbus-daemon.c Fri May 16 16:32:23 2008
@@ -387,7 +387,7 @@
tracker_dbus_request_new (request_id,
"DBus request to get daemon service stats");
- result_set = tracker_exec_proc (db_con->common, "GetStats", 0);
+ result_set = tracker_exec_proc (db_con, "GetStats", 0);
*values = tracker_dbus_query_result_to_ptr_array (result_set);
if (result_set) {
Modified: branches/xesam-support/src/trackerd/tracker-dbus-search.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-dbus-search.c (original)
+++ branches/xesam-support/src/trackerd/tracker-dbus-search.c Fri May 16 16:32:23 2008
@@ -92,10 +92,11 @@
G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_LANGUAGE,
- g_param_spec_pointer ("language",
- "Language",
- "Language",
- G_PARAM_WRITABLE));
+ g_param_spec_object ("language",
+ "Language",
+ "Language",
+ tracker_language_get_type (),
+ G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_FILE_INDEX,
g_param_spec_pointer ("file-index",
@@ -152,7 +153,7 @@
break;
case PROP_LANGUAGE:
tracker_dbus_search_set_language (TRACKER_DBUS_SEARCH (object),
- g_value_get_pointer (value));
+ g_value_get_object (value));
break;
case PROP_FILE_INDEX:
tracker_dbus_search_set_file_index (TRACKER_DBUS_SEARCH (object),
@@ -231,6 +232,14 @@
priv = GET_PRIV (object);
+ if (language) {
+ g_object_ref (language);
+ }
+
+ if (priv->language) {
+ g_object_unref (priv->language);
+ }
+
priv->language = language;
g_object_notify (G_OBJECT (object), "language");
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 May 16 16:32:23 2008
@@ -169,7 +169,7 @@
return FALSE;
}
- g_object_set (object, "db-connection", tracker->index_db, NULL);
+ g_object_set (object, "db-connection", tracker->mainloop_db, NULL);
g_object_set (object, "config", tracker->config, NULL);
g_object_set (object, "tracker", tracker, NULL);
objects = g_slist_prepend (objects, object);
@@ -183,7 +183,7 @@
return FALSE;
}
- g_object_set (object, "db-connection", tracker->index_db, NULL);
+ g_object_set (object, "db-connection", tracker->mainloop_db, NULL);
objects = g_slist_prepend (objects, object);
/* Add org.freedesktop.Tracker.Keywords */
@@ -195,7 +195,7 @@
return FALSE;
}
- g_object_set (object, "db-connection", tracker->index_db, NULL);
+ g_object_set (object, "db-connection", tracker->mainloop_db, NULL);
objects = g_slist_prepend (objects, object);
/* Add org.freedesktop.Tracker.Metadata */
@@ -207,7 +207,7 @@
return FALSE;
}
- g_object_set (object, "db-connection", tracker->index_db, NULL);
+ g_object_set (object, "db-connection", tracker->mainloop_db, NULL);
objects = g_slist_prepend (objects, object);
/* Add org.freedesktop.Tracker.Search */
@@ -219,7 +219,7 @@
return FALSE;
}
- g_object_set (object, "db-connection", tracker->index_db, NULL);
+ g_object_set (object, "db-connection", tracker->mainloop_db, NULL);
g_object_set (object, "config", tracker->config, NULL);
g_object_set (object, "language", tracker->language, NULL);
g_object_set (object, "file-index", tracker->file_index, NULL);
@@ -236,7 +236,7 @@
return FALSE;
}
- g_object_set (object, "db-connection", tracker->index_db, NULL);
+ g_object_set (object, "db-connection", tracker->xesam_db, NULL);
dbus_g_proxy_add_signal (proxy, "NameOwnerChanged",
G_TYPE_STRING, G_TYPE_STRING,
@@ -345,13 +345,14 @@
gint i = 0;
rows = tracker_db_result_set_get_n_rows (result_set);
- strv = g_new (gchar*, rows);
+ strv = g_new (gchar*, rows + 1);
while (valid) {
tracker_db_result_set_get (result_set, 0, &strv[i], -1);
valid = tracker_db_result_set_iter_next (result_set);
i++;
}
+ strv[i] = NULL;
}
if (count) {
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 May 16 16:32:23 2008
@@ -141,7 +141,7 @@
static gboolean fatal_errors;
static gboolean low_memory;
static gint throttle = -1;
-static gint verbosity;
+static gint verbosity = -1;
static gint initial_sleep = -1;
static GOptionEntry entries[] = {
@@ -299,6 +299,18 @@
no_index_file_types = tracker_config_get_no_index_file_types (tracker->config);
+ if (!tracker_config_get_low_memory_mode (tracker->config)) {
+ tracker->memory_limit = 16000 *1024;
+
+ tracker->max_process_queue_size = 5000;
+ tracker->max_extract_queue_size = 5000;
+ } else {
+ tracker->memory_limit = 8192 * 1024;
+
+ tracker->max_process_queue_size = 500;
+ tracker->max_extract_queue_size = 500;
+ }
+
tracker_log ("Tracker configuration options:");
tracker_log (" Verbosity ............................ %d",
tracker_config_get_verbosity (tracker->config));
@@ -318,36 +330,49 @@
tracker_log ("Tracker indexer parameters:");
tracker_log (" Indexer language code ................ %s",
tracker_config_get_language (tracker->config));
- tracker_log (" Minimum index word length ............ %d",
- tracker_config_get_min_word_length (tracker->config));
- tracker_log (" Maximum index word length ............ %d",
- tracker_config_get_max_word_length (tracker->config));
tracker_log (" Stemmer enabled ...................... %s",
tracker_config_get_enable_stemmer (tracker->config) ? "yes" : "no");
+ tracker_log (" Fast merges enabled .................. %s",
+ tracker_config_get_fast_merges (tracker->config) ? "yes" : "no");
+ tracker_log (" Disable indexing on battery............ %s (initially = %s)",
+ tracker_config_get_disable_indexing_on_battery (tracker->config) ? "yes" : "no",
+ tracker_config_get_disable_indexing_on_battery_init (tracker->config) ? "yes" : "no");
- tracker->word_count = 0;
- tracker->word_detail_count = 0;
- tracker->word_update_count = 0;
-
- if (!tracker_config_get_low_memory_mode (tracker->config)) {
- tracker->memory_limit = 16000 *1024;
-
- tracker->max_process_queue_size = 5000;
- tracker->max_extract_queue_size = 5000;
+ if (tracker_config_get_low_disk_space_limit (tracker->config) == -1) {
+ tracker_log (" Low disk space limit .................. Disabled");
} else {
- tracker->memory_limit = 8192 * 1024;
-
- tracker->max_process_queue_size = 500;
- tracker->max_extract_queue_size = 500;
+ tracker_log (" Low disk space limit .................. %d%%",
+ tracker_config_get_low_disk_space_limit (tracker->config));
}
+ tracker_log (" Minimum index word length ............ %d",
+ tracker_config_get_min_word_length (tracker->config));
+ tracker_log (" Maximum index word length ............ %d",
+ tracker_config_get_max_word_length (tracker->config));
+ tracker_log (" Maximum text to index ................. %d",
+ tracker_config_get_max_text_to_index (tracker->config));
+ tracker_log (" Maximum words to index ................ %d",
+ tracker_config_get_max_words_to_index (tracker->config));
+ tracker_log (" Maximum bucket count .................. %d",
+ tracker_config_get_max_bucket_count (tracker->config));
+ tracker_log (" Minimum bucket count .................. %d",
+ tracker_config_get_min_bucket_count (tracker->config));
+ tracker_log (" Divisions ............................. %d",
+ tracker_config_get_divisions (tracker->config));
+ tracker_log (" Padding ............................... %d",
+ tracker_config_get_padding (tracker->config));
+ tracker_log (" Optimization sweep count .............. %d",
+ tracker_config_get_optimization_sweep_count (tracker->config));
+ tracker_log (" Thread stack size ..................... %d",
+ tracker_config_get_thread_stack_size (tracker->config));
+ tracker_log (" Throttle level ........................ %d",
+ tracker_config_get_throttle (tracker->config));
+
log_option_list (watch_directory_roots, "Watching directory roots");
log_option_list (crawl_directory_roots, "Crawling directory roots");
log_option_list (no_watch_directory_roots, "NOT watching directory roots");
log_option_list (no_index_file_types, "NOT indexing file types");
- tracker_log ("Throttle level is %d\n", tracker_config_get_throttle (tracker->config));
-
tracker->metadata_table = g_hash_table_new_full (g_str_hash,
g_str_equal,
NULL,
@@ -574,8 +599,10 @@
}
/* Create connections */
- db_con->cache = tracker_db_connect_cache ();
- db_con->common = tracker_db_connect_common ();
+ // you shouldn't have to do this at all !
+ // In fact, it's even terribly wrong to do this!
+ //db_con->cache = tracker_db_connect_cache ();
+ //db_con->common = tracker_db_connect_common ();
main_thread_db_con = db_con;
@@ -879,6 +906,48 @@
tracker->config = tracker_config_new ();
tracker->language = tracker_language_new (tracker->config);
+ /* Deal with config options with defaults, config file and
+ * option params.
+ */
+ if (watch_dirs) {
+ tracker_config_add_watch_directory_roots (tracker->config, watch_dirs);
+ }
+
+ if (crawl_dirs) {
+ tracker_config_add_crawl_directory_roots (tracker->config, crawl_dirs);
+ }
+
+ if (no_watch_dirs) {
+ tracker_config_add_no_watch_directory_roots (tracker->config, no_watch_dirs);
+ }
+
+ if (language) {
+ tracker_config_set_language (tracker->config, language);
+ }
+
+ if (disable_indexing) {
+ tracker_config_set_enable_indexing (tracker->config, FALSE);
+ }
+
+ if (low_memory) {
+ tracker_config_set_low_memory_mode (tracker->config, TRUE);
+ }
+
+ if (throttle != -1) {
+ tracker_config_set_throttle (tracker->config, throttle);
+ }
+
+ if (verbosity > -1) {
+ tracker_config_set_verbosity (tracker->config, verbosity);
+ }
+
+ if (initial_sleep > -1) {
+ tracker_config_set_initial_sleep (tracker->config, initial_sleep);
+ }
+
+ sanity_check_option_values ();
+
+ /* Initialise other subsystems */
tracker_log_init (log_filename,
tracker_config_get_verbosity (tracker->config),
fatal_errors);
@@ -919,47 +988,6 @@
ioprio ();
#endif
- /* Deal with config options with defaults, config file and
- * option params.
- */
- if (watch_dirs) {
- tracker_config_add_watch_directory_roots (tracker->config, watch_dirs);
- }
-
- if (crawl_dirs) {
- tracker_config_add_crawl_directory_roots (tracker->config, crawl_dirs);
- }
-
- if (no_watch_dirs) {
- tracker_config_add_no_watch_directory_roots (tracker->config, no_watch_dirs);
- }
-
- if (disable_indexing) {
- tracker_config_set_enable_indexing (tracker->config, FALSE);
- }
-
- if (language) {
- tracker_config_set_language (tracker->config, language);
- }
-
- if (throttle != -1) {
- tracker_config_set_throttle (tracker->config, throttle);
- }
-
- if (low_memory) {
- tracker_config_set_low_memory_mode (tracker->config, TRUE);
- }
-
- if (verbosity != 0) {
- tracker_config_set_verbosity (tracker->config, verbosity);
- }
-
- if (initial_sleep >= 0) {
- tracker_config_set_initial_sleep (tracker->config, initial_sleep);
- }
-
- sanity_check_option_values ();
-
if (!tracker_db_load_prepared_queries ()) {
tracker_error ("Could not initialize database engine!");
return EXIT_FAILURE;
@@ -973,7 +1001,8 @@
tracker->is_running = TRUE;
/* Connect to databases */
- tracker->index_db = tracker_db_connect_all ();
+ tracker->mainloop_db = tracker_db_connect_all ();
+ tracker->xesam_db = tracker_db_connect_xesam ();
/* If we are already running, this should return some
* indication.
@@ -983,10 +1012,11 @@
}
if (!tracker->readonly) {
- if (G_UNLIKELY (!tracker_start_watching ())) {
+ if (!tracker_start_watching ()) {
tracker->is_running = FALSE;
tracker_error ("File monitoring failed to start");
- } else {
+ }
+ else if (tracker_config_get_enable_indexing (tracker->config)) {
thread = g_thread_create_full ((GThreadFunc) tracker_process_files,
tracker,
(gulong) tracker_config_get_thread_stack_size (tracker->config),
@@ -994,6 +1024,8 @@
FALSE,
G_THREAD_PRIORITY_NORMAL,
NULL);
+ } else {
+ tracker_log ("Indexing disabled, waiting for DBus requests...");
}
}
@@ -1044,7 +1076,9 @@
tracker_nfs_lock_term ();
tracker_log_term ();
- tracker_language_free (tracker->language);
+ if (tracker->language) {
+ g_object_unref (tracker->language);
+ }
if (tracker->config) {
g_object_unref (tracker->config);
Modified: branches/xesam-support/src/trackerd/tracker-main.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-main.h (original)
+++ branches/xesam-support/src/trackerd/tracker-main.h Fri May 16 16:32:23 2008
@@ -58,7 +58,8 @@
/* Config options */
guint32 watch_limit;
- gpointer index_db;
+ gpointer mainloop_db;
+ gpointer xesam_db;
/* Data directories */
gchar *data_dir;
Modified: branches/xesam-support/src/trackerd/tracker-process-files.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-process-files.c (original)
+++ branches/xesam-support/src/trackerd/tracker-process-files.c Fri May 16 16:32:23 2008
@@ -208,7 +208,8 @@
static void
process_watch_directories (Tracker *tracker,
- GSList *dirs)
+ GSList *dirs,
+ DBConnection *db_con)
{
GSList *list;
@@ -267,7 +268,7 @@
watches = tracker_count_watch_dirs () + g_slist_length (list);
if (watches < tracker->watch_limit) {
- if (!tracker_add_watch_dir (dir, tracker->index_db)) {
+ if (!tracker_add_watch_dir (dir, db_con)) {
tracker_debug ("Watch failed for %s", dir);
}
}
@@ -287,47 +288,51 @@
}
}
+typedef struct {
+ Tracker *tracker;
+ DBConnection *db_con;
+} ForEachDBCon;
+
static void
process_schedule_directory_check_foreach (const gchar *uri,
- Tracker *tracker)
+ ForEachDBCon *info)
{
- if (!tracker->is_running) {
+ if (!info->tracker->is_running) {
return;
}
- g_return_if_fail (tracker_check_uri (uri));
- g_return_if_fail (tracker->index_db);
- tracker_db_insert_pending_file (tracker->index_db, 0, uri, NULL, "unknown", 0,
+ tracker_db_insert_pending_file (info->db_con, 0, uri, NULL, "unknown", 0,
TRACKER_DB_ACTION_DIRECTORY_REFRESH, TRUE, FALSE, -1);
}
static void
process_schedule_file_check_foreach (const gchar *uri,
- Tracker *tracker)
+ ForEachDBCon *info)
{
- if (!tracker->is_running) {
+ if (!info->tracker->is_running) {
return;
}
g_return_if_fail (tracker_check_uri (uri));
- g_return_if_fail (tracker->index_db);
+ g_return_if_fail (info->db_con);
/* Keep mainloop responsive */
process_my_yield ();
if (!tracker_file_is_directory (uri)) {
- tracker_db_insert_pending_file (tracker->index_db, 0, uri, NULL, "unknown", 0,
+ tracker_db_insert_pending_file (info->db_con, 0, uri, NULL, "unknown", 0,
TRACKER_DB_ACTION_CHECK, 0, FALSE, -1);
} else {
- process_schedule_directory_check_foreach (uri, tracker);
+ process_schedule_directory_check_foreach (uri, info);
}
}
static inline void
process_directory_list (Tracker *tracker,
GSList *list,
- gboolean recurse)
+ gboolean recurse,
+ DBConnection *db_con)
{
crawl_directories = NULL;
@@ -335,16 +340,21 @@
return;
}
- process_watch_directories (tracker, list);
+ ForEachDBCon *info = g_slice_new (ForEachDBCon);
+
+ info->db_con = db_con;
+ info->tracker = tracker;
+
+ process_watch_directories (tracker, list, db_con);
g_slist_foreach (list,
(GFunc) process_schedule_directory_check_foreach,
- tracker);
+ info);
if (recurse && crawl_directories) {
g_slist_foreach (crawl_directories,
(GFunc) process_schedule_directory_check_foreach,
- tracker);
+ info);
}
if (crawl_directories) {
@@ -352,19 +362,22 @@
g_slist_free (crawl_directories);
crawl_directories = NULL;
}
+ g_slice_free (ForEachDBCon, info);
}
static void
process_scan_directory (Tracker *tracker,
- const gchar *uri)
+ const gchar *uri,
+ DBConnection *db_con)
{
GSList *files;
+ ForEachDBCon *info;
if (!tracker->is_running) {
return;
}
- g_return_if_fail (tracker->index_db);
+ g_return_if_fail (db_con);
g_return_if_fail (tracker_check_uri (uri));
g_return_if_fail (tracker_file_is_directory (uri));
@@ -375,9 +388,14 @@
tracker_debug ("Scanning %s for %d files", uri, g_slist_length (files));
+ info = g_slice_new (ForEachDBCon);
+ info->tracker = tracker;
+ info->db_con = db_con;
+
g_slist_foreach (files,
(GFunc) process_schedule_file_check_foreach,
- tracker);
+ info);
+
g_slist_foreach (files,
(GFunc) g_free,
NULL);
@@ -386,7 +404,12 @@
/* Recheck directory to update its mtime if its changed whilst
* scanning.
*/
- process_schedule_directory_check_foreach (uri, tracker);
+
+
+ process_schedule_directory_check_foreach (uri, info);
+
+ g_slice_free (ForEachDBCon, info);
+
tracker_debug ("Finished scanning");
}
@@ -455,7 +478,8 @@
static void
process_index_entity (Tracker *tracker,
- TrackerDBFileInfo *info)
+ TrackerDBFileInfo *info,
+ DBConnection *db_con)
{
TrackerService *def;
gchar *service_info;
@@ -493,7 +517,7 @@
if (info->is_directory) {
info->is_hidden = !tracker_service_get_show_service_directories (def);
- tracker_db_index_file (tracker->index_db, info, NULL, NULL);
+ tracker_db_index_file (db_con, info, NULL, NULL);
g_free (service_info);
return;
} else {
@@ -501,24 +525,20 @@
}
if (g_str_has_suffix (service_info, "Emails")) {
- DBConnection *db_con;
-
- db_con = tracker->index_db;
-
if (!tracker_email_index_file (db_con->emails, info)) {
g_free (service_info);
return;
}
} else if (strcmp (service_info, "Files") == 0) {
- tracker_db_index_file (tracker->index_db, info, NULL, NULL);
+ tracker_db_index_file (db_con, info, NULL, NULL);
} else if (strcmp (service_info, "WebHistory") ==0 ) {
- tracker_db_index_webhistory (tracker->index_db, info);
+ tracker_db_index_webhistory (db_con, info);
} else if (g_str_has_suffix (service_info, "Conversations")) {
- tracker_db_index_conversation (tracker->index_db, info);
+ tracker_db_index_conversation (db_con, info);
} else if (strcmp (service_info, "Applications") == 0) {
- tracker_db_index_application (tracker->index_db, info);
+ tracker_db_index_application (db_con, info);
} else {
- tracker_db_index_service (tracker->index_db, info, NULL, NULL, NULL, FALSE, TRUE, TRUE, TRUE);
+ tracker_db_index_service (db_con, info, NULL, NULL, NULL, FALSE, TRUE, TRUE, TRUE);
}
g_free (service_info);
@@ -526,7 +546,8 @@
static void
process_index_delete_file (Tracker *tracker,
- TrackerDBFileInfo *info)
+ TrackerDBFileInfo *info,
+ DBConnection *db_con)
{
/* Info struct may have been deleted in transit here so check
* if still valid and intact.
@@ -540,14 +561,15 @@
return;
}
- tracker_db_delete_file (tracker->index_db, info->file_id);
+ tracker_db_delete_file (db_con, info->file_id);
tracker_log ("Deleting file %s", info->uri);
}
static void
process_index_delete_directory (Tracker *tracker,
- TrackerDBFileInfo *info)
+ TrackerDBFileInfo *info,
+ DBConnection *db_con)
{
/* Info struct may have been deleted in transit here so check
* if still valid and intact.
@@ -561,22 +583,23 @@
return;
}
- tracker_db_delete_directory (tracker->index_db, info->file_id, info->uri);
+ tracker_db_delete_directory (db_con, info->file_id, info->uri);
- tracker_remove_watch_dir (info->uri, TRUE, tracker->index_db);
+ tracker_remove_watch_dir (info->uri, TRUE, db_con);
tracker_log ("Deleting dir %s and subdirs", info->uri);
}
static void
process_index_delete_directory_check (Tracker *tracker,
- const gchar *uri)
+ const gchar *uri,
+ DBConnection *db_con)
{
gchar **files;
gchar **p;
/* Check for any deletions*/
- files = tracker_db_get_files_in_folder (tracker->index_db, uri);
+ files = tracker_db_get_files_in_folder (db_con, uri);
if (!files) {
return;
@@ -589,12 +612,12 @@
TrackerDBFileInfo *info;
info = tracker_db_file_info_new (str, 1, 0, 0);
- info = tracker_db_get_file_info (tracker->index_db, info);
+ info = tracker_db_get_file_info (db_con, info);
if (!info->is_directory) {
- process_index_delete_file (tracker, info);
+ process_index_delete_file (tracker, info, db_con);
} else {
- process_index_delete_directory (tracker, info);
+ process_index_delete_directory (tracker, info, db_con);
}
tracker_db_file_info_free (info);
}
@@ -646,28 +669,25 @@
* Actual Indexing functions
*/
static void
-process_index_config (Tracker *tracker)
+process_index_config (Tracker *tracker, DBConnection *db_con)
{
tracker_log ("Starting config indexing");
}
static void
-process_index_applications (Tracker *tracker)
+process_index_applications (Tracker *tracker, DBConnection *db_con)
{
GSList *list;
- DBConnection *db_con;
tracker_log ("Starting application indexing");
- db_con = tracker->index_db;
-
tracker_db_start_index_transaction (db_con);
tracker_db_interface_start_transaction (db_con->cache->db);
tracker_applications_add_service_directories ();
list = tracker_service_directories_get ("Applications");
- process_directory_list (tracker, list, FALSE);
+ process_directory_list (tracker, list, FALSE, db_con);
tracker_db_interface_end_transaction (db_con->cache->db);
@@ -760,16 +780,15 @@
}
static void
-process_index_files (Tracker *tracker)
+process_index_files (Tracker *tracker, DBConnection *db_con)
{
- DBConnection *db_con;
GObject *object;
GSList *index_include;
GSList *index_exclude;
+ ForEachDBCon *info;
tracker_log ("Starting file indexing...");
- db_con = tracker->index_db;
object = tracker_dbus_get_object (TRACKER_TYPE_DBUS_DAEMON);
tracker_db_end_index_transaction (db_con);
@@ -822,11 +841,15 @@
tracker_db_interface_start_transaction (db_con->cache->db);
/* Index watched dirs first */
- process_watch_directories (tracker, index_include);
+ process_watch_directories (tracker, index_include, db_con);
+ info = g_slice_new (ForEachDBCon);
+ info->tracker = tracker;
+ info->db_con = db_con;
+
g_slist_foreach (crawl_directories,
(GFunc) process_schedule_directory_check_foreach,
- tracker);
+ info);
if (crawl_directories) {
g_slist_foreach (crawl_directories,
@@ -838,7 +861,7 @@
g_slist_foreach (index_include,
(GFunc) process_schedule_directory_check_foreach,
- tracker);
+ info);
if (crawl_directories) {
g_slist_foreach (crawl_directories,
@@ -847,7 +870,8 @@
g_slist_free (crawl_directories);
crawl_directories = NULL;
}
-
+ g_slice_free (ForEachDBCon, info);
+
tracker_db_interface_end_transaction (db_con->cache->db);
/* Signal progress */
@@ -908,12 +932,10 @@
}
static void
-process_index_crawl_files (Tracker *tracker)
+process_index_crawl_files (Tracker *tracker, DBConnection *db_con)
{
- DBConnection *db_con;
GSList *crawl_directory_roots;
-
- db_con = tracker->index_db;
+ ForEachDBCon *info;
tracker_log ("Starting directory crawling...");
@@ -928,10 +950,13 @@
tracker_db_interface_start_transaction (db_con->cache->db);
process_index_crawl_add_directories (tracker, crawl_directory_roots);
-
+ info = g_slice_new (ForEachDBCon);
+ info->tracker = tracker;
+ info->db_con = db_con;
+
g_slist_foreach (crawl_directories,
(GFunc) process_schedule_directory_check_foreach,
- tracker);
+ info);
if (crawl_directories) {
g_slist_foreach (crawl_directories, (GFunc) g_free, NULL);
@@ -941,8 +966,10 @@
g_slist_foreach (crawl_directory_roots,
(GFunc) process_schedule_directory_check_foreach,
- tracker);
-
+ info);
+
+ g_slice_free (ForEachDBCon, info);
+
if (crawl_directories) {
g_slist_foreach (crawl_directories, (GFunc) g_free, NULL);
g_slist_free (crawl_directories);
@@ -953,7 +980,7 @@
}
static void
-process_index_conversations (Tracker *tracker)
+process_index_conversations (Tracker *tracker, DBConnection *db_con)
{
gchar *gaim, *purple;
gboolean has_logs = FALSE;
@@ -975,13 +1002,10 @@
}
if (has_logs) {
- DBConnection *db_con;
-
- db_con = tracker->index_db;
tracker_log ("Starting chat log indexing...");
tracker_db_interface_start_transaction (db_con->cache->db);
- process_directory_list (tracker, list, TRUE);
+ process_directory_list (tracker, list, TRUE, db_con);
tracker_db_interface_end_transaction (db_con->cache->db);
g_slist_free (list);
}
@@ -991,7 +1015,7 @@
}
static void
-process_index_webhistory (Tracker *tracker)
+process_index_webhistory (Tracker *tracker, DBConnection *db_con)
{
GSList *list = NULL;
gchar *firefox_dir;
@@ -999,17 +1023,13 @@
firefox_dir = g_build_filename (g_get_home_dir(), ".xesam/Firefox/ToIndex", NULL);
if (tracker_file_is_valid (firefox_dir)) {
- DBConnection *db_con;
-
- db_con = tracker->index_db;
-
list = g_slist_prepend( NULL, firefox_dir);
tracker_log ("Starting Firefox web history indexing...");
tracker_service_directories_add ("WebHistory", firefox_dir);
tracker_db_interface_start_transaction (db_con->cache->db);
- process_directory_list (tracker, list, TRUE);
+ process_directory_list (tracker, list, TRUE, db_con);
tracker_db_interface_end_transaction (db_con->cache->db);
g_slist_free (list);
}
@@ -1018,13 +1038,11 @@
}
static void
-process_index_emails (Tracker *tracker)
+process_index_emails (Tracker *tracker, DBConnection *db_con)
{
- DBConnection *db_con;
TrackerConfig *config;
GObject *daemon;
- db_con = tracker->index_db;
config = tracker->config;
tracker_db_end_index_transaction (db_con);
@@ -1051,7 +1069,7 @@
tracker_indexer_apply_changes (tracker->file_index, tracker->file_update_index, TRUE);
}
- tracker_db_start_index_transaction (tracker->index_db);
+ tracker_db_start_index_transaction (db_con);
if (tracker_config_get_email_client (tracker->config)) {
const gchar *name;
@@ -1067,7 +1085,7 @@
GSList *list;
list = tracker_service_directories_get (name);
- process_directory_list (tracker, list, TRUE);
+ process_directory_list (tracker, list, TRUE, db_con);
g_slist_free (list);
}
@@ -1076,13 +1094,11 @@
}
static gboolean
-process_files (Tracker *tracker)
+process_files (Tracker *tracker, DBConnection *db_con)
{
- DBConnection *db_con;
GObject *object;
TrackerIndexStage stage;
- db_con = tracker->index_db;
object = tracker_dbus_get_object (TRACKER_TYPE_DBUS_DAEMON);
/* Check dir_queue in case there are
@@ -1107,34 +1123,34 @@
switch (stage) {
case TRACKER_INDEX_STAGE_CONFIG:
- process_index_config (tracker);
+ process_index_config (tracker, db_con);
break;
case TRACKER_INDEX_STAGE_APPLICATIONS:
- process_index_applications (tracker);
+ process_index_applications (tracker, db_con);
break;
case TRACKER_INDEX_STAGE_FILES:
- process_index_files (tracker);
+ process_index_files (tracker, db_con);
break;
case TRACKER_INDEX_STAGE_CRAWL_FILES:
- process_index_crawl_files (tracker);
+ process_index_crawl_files (tracker, db_con);
break;
case TRACKER_INDEX_STAGE_CONVERSATIONS:
- process_index_conversations (tracker);
+ process_index_conversations (tracker, db_con);
break;
case TRACKER_INDEX_STAGE_WEBHISTORY:
- process_index_webhistory (tracker);
+ process_index_webhistory (tracker, db_con);
break;
case TRACKER_INDEX_STAGE_EXTERNAL:
break;
case TRACKER_INDEX_STAGE_EMAILS:
- process_index_emails (tracker);
+ process_index_emails (tracker, db_con);
break;
case TRACKER_INDEX_STAGE_FINISHED:
@@ -1142,13 +1158,13 @@
}
tracker_index_stage_set (++stage);
-
return TRUE;
}
tracker_db_end_index_transaction (db_con);
tracker_cache_flush_all ();
- tracker_db_refresh_all (db_con);
+ /* I am unsure about this one (Philip Van Hoof)
+ tracker_db_refresh_all (db_con); */
tracker_indexer_merge_indexes (INDEX_TYPE_FILES);
if (tracker->shutdown) {
@@ -1249,12 +1265,11 @@
static gboolean
process_action (Tracker *tracker,
- TrackerDBFileInfo *info)
+ TrackerDBFileInfo *info,
+ DBConnection *db_con)
{
- DBConnection *db_con;
gboolean need_index;
- db_con = tracker->index_db;
need_index = info->mtime > info->indextime;
switch (info->action) {
@@ -1292,7 +1307,7 @@
g_async_queue_push (tracker->dir_queue, g_strdup (info->uri));
if (info->indextime > 0) {
- process_index_delete_directory_check (tracker, info->uri);
+ process_index_delete_directory_check (tracker, info->uri, db_con);
}
}
@@ -1318,8 +1333,8 @@
*/
list = g_slist_prepend (NULL, info->uri);
- process_watch_directories (tracker, list);
- process_scan_directory (tracker, info->uri);
+ process_watch_directories (tracker, list, db_con);
+ process_scan_directory (tracker, info->uri, db_con);
g_slist_free (list);
} else {
@@ -1338,9 +1353,9 @@
static gboolean
process_action_prechecks (Tracker *tracker,
- TrackerDBFileInfo *info)
+ TrackerDBFileInfo *info,
+ DBConnection *db_con)
{
- DBConnection *db_con;
/* Info struct may have been deleted in transit here
* so check if still valid and intact.
@@ -1349,7 +1364,6 @@
return TRUE;
}
- db_con = tracker->index_db;
if (info->file_id == 0 &&
info->action != TRACKER_DB_ACTION_CREATE &&
@@ -1402,14 +1416,14 @@
*/
} else {
if (info->action == TRACKER_DB_ACTION_FILE_DELETED) {
- process_index_delete_file (tracker, info);
+ process_index_delete_file (tracker, info, db_con);
info = tracker_db_file_info_unref (info);
return TRUE;
} else {
if (info->action == TRACKER_DB_ACTION_DIRECTORY_DELETED ||
info->action == TRACKER_DB_ACTION_DIRECTORY_UNMOUNTED) {
- process_index_delete_file (tracker, info);
- process_index_delete_directory (tracker, info);
+ process_index_delete_file (tracker, info, db_con);
+ process_index_delete_directory (tracker, info, db_con);
info = tracker_db_file_info_unref (info);
return TRUE;
}
@@ -1442,25 +1456,27 @@
static void
process_mount_point_added_cb (TrackerHal *hal,
const gchar *mount_point,
- Tracker *tracker)
+ Tracker *tracker,
+ DBConnection *db_con)
{
GSList *list;
tracker_log ("** TRAWLING THROUGH NEW MOUNT POINT '%s'", mount_point);
list = g_slist_prepend (NULL, (gchar*) mount_point);
- process_directory_list (tracker, list, TRUE);
+ process_directory_list (tracker, list, TRUE, db_con);
g_slist_free (list);
}
static void
process_mount_point_removed_cb (TrackerHal *hal,
const gchar *mount_point,
- Tracker *tracker)
+ Tracker *tracker,
+ DBConnection *db_con)
{
tracker_log ("** CLEANING UP OLD MOUNT POINT '%s'", mount_point);
- process_index_delete_directory_check (tracker, mount_point);
+ process_index_delete_directory_check (tracker, mount_point, db_con);
}
#endif /* HAVE_HAL */
@@ -1485,6 +1501,7 @@
gpointer
tracker_process_files (gpointer data)
{
+ DBConnection *db_con = tracker_db_connect_all ();
Tracker *tracker;
GObject *object;
GSList *moved_from_list; /* List to hold moved_from
@@ -1586,7 +1603,7 @@
TrackerDBFileInfo *info;
gboolean need_index;
- if (!tracker_cache_process_events (tracker->index_db, TRUE) ) {
+ if (!tracker_cache_process_events (db_con, TRUE) ) {
tracker_status_set_and_signal (TRACKER_STATUS_SHUTDOWN,
tracker->first_time_index,
tracker->in_merge,
@@ -1612,12 +1629,12 @@
TrackerDBResultSet *result_set;
gint k;
- if (!tracker_db_has_pending_files (tracker->index_db)) {
+ if (!tracker_db_has_pending_files (db_con)) {
gboolean should_continue;
/* Set mutex to indicate we are in "check" state */
g_mutex_lock (tracker->files_check_mutex);
- should_continue = process_files (tracker);
+ should_continue = process_files (tracker, db_con);
g_mutex_unlock (tracker->files_check_mutex);
if (should_continue) {
@@ -1629,7 +1646,7 @@
}
}
- result_set = tracker_db_get_pending_files (tracker->index_db);
+ result_set = tracker_db_get_pending_files (db_con);
k = 0;
pushed_events = FALSE;
@@ -1669,7 +1686,7 @@
continue;
}
- tracker_db_remove_pending_files (tracker->index_db);
+ tracker_db_remove_pending_files (db_con);
/* Pending files are present but not yet ready
* as we are waiting til they stabilize so we
@@ -1691,15 +1708,15 @@
tracker->pause_io,
tracker_config_get_enable_indexing (tracker->config));
- if (process_action_prechecks (tracker, info)) {
+ if (process_action_prechecks (tracker, info, db_con)) {
continue;
}
/* Check if file needs indexing */
- need_index = process_action (tracker, info);
+ need_index = process_action (tracker, info, db_con);
if (need_index) {
- if (tracker_db_regulate_transactions (tracker->index_db, 250)) {
+ if (tracker_db_regulate_transactions (db_con, 250)) {
if (tracker_config_get_verbosity (tracker->config) == 1) {
tracker_log ("indexing #%d - %s", tracker->index_count, info->uri);
}
@@ -1715,7 +1732,7 @@
tracker->folders_count);
}
- process_index_entity (tracker, info);
+ process_index_entity (tracker, info, db_con);
}
tracker_db_file_info_unref (info);
@@ -1732,12 +1749,13 @@
xdg_mime_shutdown ();
- tracker_db_close_all (tracker->index_db);
+ tracker_db_close_all (db_con);
g_mutex_unlock (tracker->files_signal_mutex);
tracker_log ("Process thread:%p now finishing", g_thread_self ());
+ g_thread_exit (NULL);
return NULL;
}
Modified: branches/xesam-support/src/trackerd/tracker-query-tree.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-query-tree.c (original)
+++ branches/xesam-support/src/trackerd/tracker-query-tree.c Fri May 16 16:32:23 2008
@@ -138,10 +138,11 @@
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_LANGUAGE,
- g_param_spec_pointer ("language",
- "Language",
- "Language",
- G_PARAM_READWRITE));
+ g_param_spec_object ("language",
+ "Language",
+ "Language",
+ tracker_language_get_type (),
+ G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_SERVICES,
g_param_spec_pointer ("services",
@@ -230,7 +231,7 @@
break;
case PROP_LANGUAGE:
tracker_query_tree_set_language (TRACKER_QUERY_TREE (object),
- g_value_get_pointer (value));
+ g_value_get_object (value));
break;
case PROP_SERVICES:
tracker_query_tree_set_services (TRACKER_QUERY_TREE (object),
@@ -262,7 +263,7 @@
g_value_set_object (value, priv->config);
break;
case PROP_LANGUAGE:
- g_value_set_pointer (value, priv->language);
+ g_value_set_object (value, priv->language);
break;
case PROP_SERVICES:
g_value_set_pointer (value, priv->services);
@@ -550,6 +551,15 @@
g_return_if_fail (language != NULL);
priv = TRACKER_QUERY_TREE_GET_PRIVATE (tree);
+
+ if (language) {
+ g_object_ref (language);
+ }
+
+ if (priv->language) {
+ g_object_unref (priv->language);
+ }
+
priv->language = language;
g_object_notify (G_OBJECT (tree), "language");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]