tracker r1918 - in branches/indexer-split: . src/tracker-indexer
- From: carlosg svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1918 - in branches/indexer-split: . src/tracker-indexer
- Date: Wed, 23 Jul 2008 15:08:00 +0000 (UTC)
Author: carlosg
Date: Wed Jul 23 15:08:00 2008
New Revision: 1918
URL: http://svn.gnome.org/viewvc/tracker?rev=1918&view=rev
Log:
2008-07-23 Carlos Garnacho <carlos imendio com>
Check that a service exists before inserting it again in the database.
* src/tracker-indexer/tracker-indexer-db.[ch]
(get_dirname_and_basename): New helper function.
(tracker_db_check_service): New function, returns the ID for the
service (if any).
* src/tracker-indexer/tracker-indexer.c (process_file): Check that the
service doesn't exist before trying to index it.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c
branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h
branches/indexer-split/src/tracker-indexer/tracker-indexer.c
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c Wed Jul 23 15:08:00 2008
@@ -37,7 +37,7 @@
TrackerDBInterface *temp_iface;
static guint32 max = 0;
- if (max != 0) {
+ if (G_LIKELY (max != 0)) {
return ++max;
}
@@ -92,7 +92,7 @@
}
}
-gboolean
+void
tracker_db_create_event (TrackerDBInterface *iface,
guint32 service_id,
const gchar *type)
@@ -107,8 +107,56 @@
NULL);
g_free (service_id_str);
+}
- return TRUE;
+static void
+get_dirname_and_basename (const gchar *path,
+ GHashTable *metadata,
+ gchar **out_dirname,
+ gchar **out_basename)
+{
+ const gchar *dirname, *basename;
+
+ dirname = g_hash_table_lookup (metadata, "File:Path");
+ basename = g_hash_table_lookup (metadata, "File:Name");
+
+ if (dirname && basename) {
+ *out_dirname = g_strdup (dirname);
+ *out_basename = g_strdup (basename);
+ } else {
+ *out_dirname = g_path_get_dirname (path);
+ *out_basename = g_path_get_basename (path);
+ }
+}
+
+guint
+tracker_db_check_service (TrackerDBInterface *iface,
+ const gchar *path,
+ GHashTable *metadata)
+{
+ TrackerDBResultSet *result_set;
+ gchar *dirname, *basename;
+ guint id;
+
+ get_dirname_and_basename (path, metadata, &dirname, &basename);
+
+ result_set = tracker_db_interface_execute_procedure (iface, NULL,
+ "GetServiceID",
+ dirname,
+ basename,
+ NULL);
+
+ g_free (dirname);
+ g_free (basename);
+
+ if (!result_set) {
+ return 0;
+ }
+
+ tracker_db_result_set_get (result_set, 0, &id, -1);
+ g_object_unref (result_set);
+
+ return id;
}
gboolean
@@ -126,21 +174,11 @@
return FALSE;
}
+ get_dirname_and_basename (path, metadata, &dirname, &basename);
+
id_str = tracker_guint32_to_string (id);
service_type_id_str = tracker_int_to_string (tracker_service_get_id (service));
- dirname = g_hash_table_lookup (metadata, "File:Path");
- basename = g_hash_table_lookup (metadata, "File:Name");
-
- if (dirname && basename) {
- /* Keep a copy */
- dirname = g_strdup (dirname);
- basename = g_strdup (basename);
- } else {
- dirname = g_path_get_dirname (path);
- basename = g_path_get_basename (path);
- }
-
is_dir = g_file_test (path, G_FILE_TEST_IS_DIR);
is_symlink = g_file_test (path, G_FILE_TEST_IS_SYMLINK);
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h Wed Jul 23 15:08:00 2008
@@ -30,6 +30,10 @@
guint32 tracker_db_get_new_service_id (TrackerDBInterface *iface);
void tracker_db_increment_stats (TrackerDBInterface *iface,
TrackerService *service);
+
+guint tracker_db_check_service (TrackerDBInterface *iface,
+ const gchar *path,
+ GHashTable *metadata);
gboolean tracker_db_create_service (TrackerDBInterface *iface,
guint32 id,
TrackerService *service,
@@ -43,7 +47,7 @@
void tracker_db_set_text (TrackerDBInterface *iface,
guint32 id,
const gchar *text);
-gboolean tracker_db_create_event (TrackerDBInterface *iface,
+void tracker_db_create_event (TrackerDBInterface *iface,
guint32 service_id,
const gchar *type);
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.c Wed Jul 23 15:08:00 2008
@@ -736,9 +736,9 @@
static void
index_metadata (TrackerIndexer *indexer,
- guint32 id,
+ guint32 id,
TrackerService *service,
- GHashTable *metadata)
+ GHashTable *metadata)
{
MetadataForeachData data;
@@ -756,7 +756,7 @@
static gboolean
process_file (TrackerIndexer *indexer,
- PathInfo *info)
+ PathInfo *info)
{
GHashTable *metadata;
@@ -774,40 +774,43 @@
if (metadata) {
TrackerService *service_def;
- gchar *service_type, *mimetype;
- gboolean created;
+ gchar *service_type, *mimetype, *text;
guint32 id;
mimetype = tracker_file_get_mime_type (info->file->path);
service_type = tracker_ontology_get_service_type_for_mime (mimetype);
service_def = tracker_ontology_get_service_type_by_name (service_type);
- id = tracker_db_get_new_service_id (indexer->private->common);
-
- created = tracker_db_create_service (indexer->private->metadata,
- id,
- service_def,
- info->file->path,
- metadata);
-
g_free (service_type);
g_free (mimetype);
-
- if (created) {
- gchar *text;
- created = tracker_db_create_event (indexer->private->cache,
- id,
- "Create");
- tracker_db_increment_stats (indexer->private->common, service_def);
+ if (service_def) {
+ id = tracker_db_check_service (indexer->private->metadata,
+ info->file->path,
+ metadata);
+
+ /* FIXME: should check mtime and reindex if necessary */
+
+ if (id == 0) {
+ /* Service wasn't previously indexed */
+ id = tracker_db_get_new_service_id (indexer->private->common);
+
+ tracker_db_create_service (indexer->private->metadata,
+ id, service_def,
+ info->file->path,
+ metadata);
+
+ tracker_db_create_event (indexer->private->cache, id, "Create");
+ tracker_db_increment_stats (indexer->private->common, service_def);
- index_metadata (indexer, id, service_def, metadata);
+ index_metadata (indexer, id, service_def, metadata);
- text = tracker_indexer_module_file_get_text (info->module, info->file);
+ text = tracker_indexer_module_file_get_text (info->module, info->file);
- if (text) {
- tracker_db_set_text (indexer->private->contents, id, text);
- g_free (text);
+ if (text) {
+ tracker_db_set_text (indexer->private->contents, id, text);
+ g_free (text);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]