tracker r1975 - in branches/indexer-split: . data/dbus src/tracker-indexer
- From: ifrade svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1975 - in branches/indexer-split: . data/dbus src/tracker-indexer
- Date: Thu, 31 Jul 2008 18:51:57 +0000 (UTC)
Author: ifrade
Date: Thu Jul 31 18:51:57 2008
New Revision: 1975
URL: http://svn.gnome.org/viewvc/tracker?rev=1975&view=rev
Log:
Added new methods PropertySet and PropertyRemove in the indexer
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/data/dbus/tracker-indexer.xml
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
branches/indexer-split/src/tracker-indexer/tracker-indexer.h
Modified: branches/indexer-split/data/dbus/tracker-indexer.xml
==============================================================================
--- branches/indexer-split/data/dbus/tracker-indexer.xml (original)
+++ branches/indexer-split/data/dbus/tracker-indexer.xml Thu Jul 31 18:51:57 2008
@@ -26,6 +26,23 @@
<arg type="s" name="module" direction="in" />
<arg type="as" name="files" direction="in" />
</method>
+
+ <method name="PropertySet">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+ <arg type="s" name="service_type" direction="in" />
+ <arg type="s" name="uri" direction="in" />
+ <arg type="s" name="property" direction="in"/>
+ <arg type="as" name="values" direction="in"/>
+ </method>
+
+ <method name="PropertyRemove">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+ <arg type="s" name="service_type" direction="in" />
+ <arg type="s" name="uri" direction="in" />
+ <arg type="s" name="property" direction="in"/>
+ <arg type="as" name="values" direction="in"/>
+ </method>
+
<method name="Pause">
<annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
</method>
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 Thu Jul 31 18:51:57 2008
@@ -340,8 +340,8 @@
}
void
-tracker_db_delete_metadata (TrackerService *service,
- guint32 service_id)
+tracker_db_delete_all_metadata (TrackerService *service,
+ guint32 service_id)
{
TrackerDBInterface *iface;
gchar *service_id_str;
@@ -438,6 +438,71 @@
}
void
+tracker_db_delete_metadata (TrackerService *service,
+ guint32 id,
+ TrackerField *field,
+ const gchar *value)
+{
+ TrackerDBInterface *iface;
+ gint metadata_key;
+ gchar *id_str;
+
+ id_str = tracker_guint32_to_string (id);
+ iface = tracker_db_manager_get_db_interface_by_type (tracker_service_get_name (service),
+ TRACKER_DB_CONTENT_TYPE_METADATA);
+
+ switch (tracker_field_get_data_type (field)) {
+ case TRACKER_FIELD_TYPE_KEYWORD:
+ if (!value) {
+ g_warning ("Trying to remove keyword field with no specific value");
+ }
+ tracker_db_interface_execute_procedure (iface, NULL,
+ "DeleteMetadataKeywordValue",
+ id_str,
+ tracker_field_get_id (field),
+ value,
+ NULL);
+ break;
+ case TRACKER_FIELD_TYPE_INDEX:
+ case TRACKER_FIELD_TYPE_STRING:
+ case TRACKER_FIELD_TYPE_DOUBLE:
+ tracker_db_interface_execute_procedure (iface, NULL,
+ "DeleteMetadata",
+ id_str,
+ tracker_field_get_id (field),
+ NULL);
+ break;
+ case TRACKER_FIELD_TYPE_INTEGER:
+ case TRACKER_FIELD_TYPE_DATE:
+ tracker_db_interface_execute_procedure (iface, NULL,
+ "DeleteMetadataNumeric",
+ id_str,
+ tracker_field_get_id (field),
+ NULL);
+ break;
+ case TRACKER_FIELD_TYPE_FULLTEXT:
+ tracker_db_delete_text (service, id);
+ break;
+ case TRACKER_FIELD_TYPE_BLOB:
+ case TRACKER_FIELD_TYPE_STRUCT:
+ case TRACKER_FIELD_TYPE_LINK:
+ /* not handled */
+ default:
+ break;
+ }
+
+ metadata_key = tracker_ontology_metadata_key_in_service (tracker_service_get_name (service),
+ tracker_field_get_name (field));
+ if (metadata_key > 0) {
+ tracker_db_interface_execute_query (iface, NULL,
+ "update Services set KeyMetadata%d = '%s' where id = %d",
+ metadata_key, "", id);
+ }
+
+ g_free (id_str);
+}
+
+void
tracker_db_set_text (TrackerService *service,
guint32 id,
const gchar *text)
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 Thu Jul 31 18:51:57 2008
@@ -58,9 +58,12 @@
guint32 id);
gchar *tracker_db_get_unparsed_metadata (TrackerService *service,
guint32 id);
-void tracker_db_delete_metadata (TrackerService *service,
+void tracker_db_delete_all_metadata (TrackerService *service,
guint32 id);
-
+void tracker_db_delete_metadata (TrackerService *service,
+ guint32 id,
+ TrackerField *field,
+ const gchar *value);
/* Contents */
void tracker_db_set_text (TrackerService *service,
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 Thu Jul 31 18:51:57 2008
@@ -86,6 +86,7 @@
typedef struct PathInfo PathInfo;
typedef struct MetadataForeachData MetadataForeachData;
+typedef struct MetadataRequest MetadataRequest;
struct TrackerIndexerPrivate {
GQueue *dir_queue;
@@ -194,6 +195,7 @@
g_slice_free (PathInfo, info);
}
+
static void
start_transaction (TrackerIndexer *indexer)
{
@@ -793,21 +795,29 @@
gint service_id,
gint service_type,
const gchar *text,
+ gboolean full_parsing,
gint weight_factor)
{
GHashTable *parsed = NULL;
GList *words = NULL, *iter;
gint weight;
- parsed = tracker_parser_text (parsed,
- text,
- 1,
- indexer->private->language,
- tracker_config_get_max_words_to_index (indexer->private->config),
- tracker_config_get_max_word_length (indexer->private->config),
- tracker_config_get_min_word_length (indexer->private->config),
- tracker_config_get_enable_stemmer (indexer->private->config),
- FALSE);
+ if (full_parsing) {
+ parsed = tracker_parser_text (parsed,
+ text,
+ weight_factor,
+ indexer->private->language,
+ tracker_config_get_max_words_to_index (indexer->private->config),
+ tracker_config_get_max_word_length (indexer->private->config),
+ tracker_config_get_min_word_length (indexer->private->config),
+ tracker_config_get_enable_stemmer (indexer->private->config),
+ FALSE);
+ } else {
+ parsed = tracker_parser_text_fast (parsed,
+ text,
+ weight_factor); /* We dont know the exact property weight. Big value works */
+
+ }
words = g_hash_table_get_keys (parsed);
@@ -818,7 +828,7 @@
(gchar *)iter->data,
service_id,
service_type,
- weight*weight_factor);
+ weight);
}
tracker_parser_text_free (parsed);
@@ -827,46 +837,27 @@
static void
-index_text_with_parsing (TrackerIndexer *indexer, gint service_id, gint service_type_id, const gchar *content)
+index_text_with_parsing (TrackerIndexer *indexer, gint service_id, gint service_type_id, const gchar *content, gint weight_factor)
{
- send_text_to_index (indexer, service_id, service_type_id, content, 1);
+ send_text_to_index (indexer, service_id, service_type_id, content, TRUE, weight_factor);
}
static void
unindex_text_with_parsing (TrackerIndexer *indexer, gint service_id, gint service_type_id, const gchar *content, gint weight_factor)
{
- send_text_to_index (indexer, service_id, service_type_id, content, weight_factor);
+ send_text_to_index (indexer, service_id, service_type_id, content, TRUE, -1*weight_factor);
}
static void
-unindex_text_no_parsing (TrackerIndexer *indexer,
- gint service_id,
- gint service_type_id,
- const gchar *text)
+index_text_no_parsing (TrackerIndexer *indexer, gint service_id, gint service_type_id, const gchar *content, gchar weight_factor)
{
- GHashTable *parsed = NULL;
- GList *words = NULL, *iter;
- gint weight;
-
- parsed = tracker_parser_text_fast (parsed,
- text,
- 50); /* We dont know the exact property weight. Big value works */
-
- words = g_hash_table_get_keys (parsed);
-
- for (iter = words; iter != NULL; iter = iter->next) {
-
- weight = GPOINTER_TO_INT (g_hash_table_lookup (parsed, (gchar *)iter->data));
-
-
- tracker_index_add_word (indexer->private->index,
- (gchar *)iter->data,
- service_id,
- service_type_id,
- weight * -1);
- }
+ send_text_to_index (indexer, service_id, service_type_id, content, FALSE, weight_factor);
+}
- tracker_parser_text_free (parsed);
+static void
+unindex_text_no_parsing (TrackerIndexer *indexer, gint service_id, gint service_type_id, const gchar *content, gint weight_factor)
+{
+ send_text_to_index (indexer, service_id, service_type_id, content, FALSE, -1*weight_factor);
}
@@ -925,8 +916,9 @@
index_text_with_parsing (indexer,
id,
tracker_service_get_id (service_def),
- text);
-
+ text,
+ 1);
+
/* Save in the DB */
tracker_db_set_text (service_def, id, text);
g_free (text);
@@ -983,7 +975,7 @@
/* Get content, unindex the words and delete the contents */
content = tracker_db_get_text (service_def, service_id);
if (content) {
- unindex_text_with_parsing (indexer, service_id, service_type_id, content, -1);
+ unindex_text_with_parsing (indexer, service_id, service_type_id, content, 1);
g_free (content);
tracker_db_delete_text (service_def, service_id);
}
@@ -991,19 +983,19 @@
/* Get metadata from DB to remove it from the index */
metadata = tracker_db_get_parsed_metadata (service_def, service_id);
- unindex_text_no_parsing (indexer, service_id, service_type_id, metadata);
+ unindex_text_no_parsing (indexer, service_id, service_type_id, metadata, 1000);
g_free (metadata);
/* the weight depends on metadata, but a number high enough force deletion */
metadata = tracker_db_get_unparsed_metadata (service_def, service_id);
- unindex_text_with_parsing (indexer, service_id, service_type_id, metadata, -1000);
+ unindex_text_with_parsing (indexer, service_id, service_type_id, metadata, 1000);
g_free (metadata);
/* delete service */
tracker_db_delete_service (service_def, service_id);
- tracker_db_delete_metadata (service_def, service_id);
+ tracker_db_delete_all_metadata (service_def, service_id);
tracker_db_decrement_stats (indexer->private->common, service_def);
@@ -1013,6 +1005,100 @@
}
static gboolean
+handle_metadata_add (TrackerIndexer *indexer,
+ const gchar *service_type,
+ const gchar *uri,
+ const gchar *property,
+ GStrv values)
+{
+ TrackerService *service_def;
+ TrackerField *field_def;
+ guint service_id, i;
+ gchar *joined;
+
+ service_def = tracker_ontology_get_service_type_by_name (service_type);
+ if (!service_def) {
+ return FALSE;
+ }
+
+ field_def = tracker_ontology_get_field_def (property);
+ if (!field_def) {
+ return FALSE;
+ }
+
+ service_id = tracker_db_check_service (service_def, uri, NULL);
+ if (service_id < 1) {
+ g_message ("Cannot delete file: it doesnt exist in DB");
+ return FALSE;
+ }
+
+ for (i = 0; values[i] != NULL; i++) {
+ tracker_db_set_metadata (service_def,
+ service_id,
+ field_def,
+ values[i],
+ NULL);
+ }
+
+ joined = g_strjoinv (" ", values);
+ index_text_no_parsing (indexer,
+ service_id,
+ tracker_service_get_id (service_def),
+ joined,
+ tracker_field_get_weight (field_def));
+ g_free (joined);
+
+ return TRUE;
+}
+
+
+static gboolean
+handle_metadata_remove (TrackerIndexer *indexer,
+ const gchar *service_type,
+ const gchar *uri,
+ const gchar *property,
+ GStrv values)
+{
+ TrackerService *service_def;
+ TrackerField *field_def;
+ guint service_id, i;
+ gchar *joined;
+
+ service_def = tracker_ontology_get_service_type_by_name (service_type);
+ if (!service_def) {
+ return FALSE;
+ }
+
+ field_def = tracker_ontology_get_field_def (property);
+ if (!field_def) {
+ return FALSE;
+ }
+
+ service_id = tracker_db_check_service (service_def, uri, NULL);
+ if (service_id < 1) {
+ g_message ("Cannot delete file: it doesnt exist in DB");
+ return FALSE;
+ }
+
+ for (i = 0; values[i] != NULL; i++) {
+ tracker_db_delete_metadata (service_def,
+ service_id,
+ field_def,
+ values[i]);
+ }
+
+ joined = g_strjoinv (" ", values);
+ unindex_text_no_parsing (indexer,
+ service_id,
+ tracker_service_get_id (service_def),
+ joined,
+ tracker_field_get_weight (field_def));
+ g_free (joined);
+
+ return TRUE;
+}
+
+static gboolean
process_file (TrackerIndexer *indexer,
PathInfo *info)
{
@@ -1482,3 +1568,56 @@
g_error_free (actual_error);
}
}
+
+void
+tracker_indexer_property_set (TrackerIndexer *indexer,
+ const gchar *service_type,
+ const gchar *uri,
+ const gchar *property,
+ GStrv values,
+ DBusGMethodInvocation *context,
+ GError **error) {
+
+ guint request_id;
+
+ request_id = tracker_dbus_get_next_request_id ();
+
+ tracker_dbus_async_return_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
+ tracker_dbus_async_return_if_fail (service_type != NULL, FALSE);
+ tracker_dbus_async_return_if_fail (uri != NULL, FALSE);
+ tracker_dbus_async_return_if_fail (property != NULL, FALSE);
+ tracker_dbus_async_return_if_fail (values != NULL, FALSE);
+ tracker_dbus_async_return_if_fail (g_strv_length (values) > 0, FALSE);
+
+ handle_metadata_add (indexer, service_type, uri, property, values);
+
+ dbus_g_method_return (context);
+ tracker_dbus_request_success (request_id);
+
+}
+
+void
+tracker_indexer_property_remove (TrackerIndexer *indexer,
+ const gchar *service_type,
+ const gchar *uri,
+ const gchar *property,
+ GStrv values,
+ DBusGMethodInvocation *context,
+ GError **error) {
+
+ guint request_id;
+
+ request_id = tracker_dbus_get_next_request_id ();
+
+ tracker_dbus_async_return_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
+ tracker_dbus_async_return_if_fail (service_type != NULL, FALSE);
+ tracker_dbus_async_return_if_fail (uri != NULL, FALSE);
+ tracker_dbus_async_return_if_fail (property != NULL, FALSE);
+ /* Values can be NULL */
+
+ handle_metadata_remove (indexer, service_type, uri, property, values);
+
+ dbus_g_method_return (context);
+ tracker_dbus_request_success (request_id);
+
+}
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.h
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.h (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.h Thu Jul 31 18:51:57 2008
@@ -99,6 +99,20 @@
GStrv files,
DBusGMethodInvocation *context,
GError **error);
+void tracker_indexer_property_set (TrackerIndexer *indexer,
+ const gchar *service_type,
+ const gchar *uri,
+ const gchar *property,
+ GStrv values,
+ DBusGMethodInvocation *context,
+ GError **error);
+void tracker_indexer_property_remove (TrackerIndexer *indexer,
+ const gchar *service_type,
+ const gchar *uri,
+ const gchar *property,
+ GStrv values,
+ DBusGMethodInvocation *context,
+ GError **error);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]