[tracker/tracker-store-queue: 12/13] Ported push modules to TrackerStore API
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-store-queue: 12/13] Ported push modules to TrackerStore API
- Date: Wed, 27 May 2009 11:08:18 -0400 (EDT)
commit 4d9f576d7c1b9189b4006aa4579067f1ed52572e
Author: Philip Van Hoof <philip codeminded be>
Date: Wed May 27 16:55:36 2009 +0200
Ported push modules to TrackerStore API
---
.../evolution/tracker-evolution-registrar.c | 334 +++++++++++++------
src/plugins/kmail/tracker-kmail-registrar.c | 294 ++++++++++++------
2 files changed, 430 insertions(+), 198 deletions(-)
diff --git a/src/plugins/evolution/tracker-evolution-registrar.c b/src/plugins/evolution/tracker-evolution-registrar.c
index 8dc72c7..1cab05f 100644
--- a/src/plugins/evolution/tracker-evolution-registrar.c
+++ b/src/plugins/evolution/tracker-evolution-registrar.c
@@ -28,12 +28,11 @@
#include <glib-object.h>
#include <dbus/dbus-glib-bindings.h>
-#include <libtracker-data/tracker-data-update.h>
#include <libtracker-data/tracker-data-manager.h>
-#include <libtracker-data/tracker-data-query.h>
#include <libtracker-common/tracker-ontology.h>
#include <tracker-store/tracker-push-registrar.h>
+#include <tracker-store/tracker-store.h>
#define __TRACKER_EVOLUTION_REGISTRAR_C__
@@ -45,8 +44,6 @@
#define TRACKER_TYPE_EVOLUTION_PUSH_REGISTRAR (tracker_evolution_push_registrar_get_type ())
#define TRACKER_EVOLUTION_PUSH_REGISTRAR(module) (G_TYPE_CHECK_INSTANCE_CAST ((module), TRACKER_TYPE_EVOLUTION_PUSH_REGISTRAR, TrackerEvolutionPushRegistrar))
-#define TRANSACTION_MAX 200
-
#define NIE_DATASOURCE TRACKER_NIE_PREFIX "DataSource"
#define NIE_DATASOURCE_P TRACKER_NIE_PREFIX "dataSource"
@@ -191,13 +188,13 @@ extract_mime_parts (GMimeObject *object,
subject = g_strdup_printf ("%s/%s", message_subject,
filename);
- tracker_data_insert_statement (subject,
- "File:Path",
- filename);
+ data_insert_statement (subject,
+ "File:Path",
+ filename);
- tracker_data_insert_statement (subject,
- "File:Name",
- filename);
+ data_insert_statement (subject,
+ "File:Name",
+ filename);
g_free (subject);
}
@@ -271,6 +268,16 @@ get_email_and_fullname (const gchar *line, gchar **email, gchar **fullname)
}
static void
+data_insert_statement (TrackerEvolutionRegistrar *self,
+ const gchar *subject,
+ const gchar *predicate,
+ const gchar *object)
+{
+ tracker_store_queue_insert_statement (subject, predicate, object,
+ NULL, NULL, NULL);
+}
+
+static void
perform_set (TrackerEvolutionRegistrar *object,
const gchar *subject,
const GStrv predicates,
@@ -278,19 +285,17 @@ perform_set (TrackerEvolutionRegistrar *object,
{
guint i = 0;
- if (!tracker_data_query_resource_exists (DATASOURCE_URN, NULL, NULL)) {
- tracker_data_insert_statement (DATASOURCE_URN, RDF_PREFIX "type",
- NIE_DATASOURCE);
- }
+ data_insert_statement (object, DATASOURCE_URN, RDF_PREFIX "type",
+ NIE_DATASOURCE);
- tracker_data_insert_statement (subject, RDF_PREFIX "type",
- NMO_PREFIX "Email");
+ data_insert_statement (object, subject, RDF_PREFIX "type",
+ NMO_PREFIX "Email");
- tracker_data_insert_statement (subject, RDF_PREFIX "type",
- NMO_PREFIX "MailboxDataObject");
+ data_insert_statement (object, subject, RDF_PREFIX "type",
+ NMO_PREFIX "MailboxDataObject");
- tracker_data_insert_statement (subject, NIE_DATASOURCE_P,
- DATASOURCE_URN);
+ data_insert_statement (object, subject, NIE_DATASOURCE_P,
+ DATASOURCE_URN);
while (predicates [i] != NULL && values[i] != NULL) {
@@ -376,9 +381,9 @@ perform_set (TrackerEvolutionRegistrar *object,
} else
text = orig_text;
- tracker_data_insert_statement (subject,
- METADATA_EMAIL_TEXT,
- text);
+ data_insert_statement (object, subject,
+ METADATA_EMAIL_TEXT,
+ text);
g_free (text);
g_free (encoding);
@@ -402,85 +407,96 @@ perform_set (TrackerEvolutionRegistrar *object,
if (value) {
*value = '\0';
value++;
- }
- tracker_data_insert_statement (":1", RDF_PREFIX "type",
- NAO_PREFIX "Property");
+ data_insert_statement (object, ":1", RDF_PREFIX "type",
+ NAO_PREFIX "Property");
+
+ data_insert_statement (object, ":1",
+ NAO_PREFIX "propertyName",
+ key);
- tracker_data_insert_statement (":1",
- NAO_PREFIX "propertyName",
- key);
+ data_insert_statement (object, ":1",
+ NAO_PREFIX "propertyValue",
+ value);
- tracker_data_insert_statement (":1",
- NAO_PREFIX "propertyValue",
- value);
+ data_insert_statement (object, subject,
+ NAO_PREFIX "hasProperty",
+ ":1");
+ } else {
+ data_insert_statement (object, ":1", RDF_PREFIX "type",
+ NAO_PREFIX "Tag");
- tracker_data_insert_statement (subject,
- NAO_PREFIX "hasProperty",
- ":1");
+ data_insert_statement (object, ":1",
+ NAO_PREFIX "prefLabel",
+ key);
+
+ data_insert_statement (object, subject,
+ NAO_PREFIX "hasTag",
+ ":1");
+ }
g_free (key);
}
if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_SUBJECT) == 0) {
- tracker_data_insert_statement (subject,
- TRACKER_NMO_PREFIX "messageSubject",
- values[i]);
+ data_insert_statement (object, subject,
+ TRACKER_NMO_PREFIX "messageSubject",
+ values[i]);
}
if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_SENT) == 0) {
- tracker_data_insert_statement (subject,
- TRACKER_NMO_PREFIX "receivedDate",
- values[i]);
+ data_insert_statement (object, subject,
+ TRACKER_NMO_PREFIX "receivedDate",
+ values[i]);
}
if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_FROM) == 0) {
gchar *email_uri, *email = NULL, *fullname = NULL;
- tracker_data_insert_statement (":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
+ data_insert_statement (object, ":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
get_email_and_fullname (values[i], &email, &fullname);
if (fullname) {
- tracker_data_insert_statement (":1", NCO_PREFIX "fullname", fullname);
+ data_insert_statement (object, ":1", NCO_PREFIX "fullname", fullname);
g_free (fullname);
}
email_uri = tracker_uri_printf_escaped ("mailto:%s", email);
- tracker_data_insert_statement (email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
- tracker_data_insert_statement (email_uri, NCO_PREFIX "emailAddress", email);
- tracker_data_insert_statement (":1", NCO_PREFIX "hasEmailAddress", email_uri);
- tracker_data_insert_statement (subject, NMO_PREFIX "from", ":1");
+ data_insert_statement (object, email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
+ data_insert_statement (object, email_uri, NCO_PREFIX "emailAddress", email);
+ data_insert_statement (object, ":1", NCO_PREFIX "hasEmailAddress", email_uri);
+ data_insert_statement (object, subject, NMO_PREFIX "from", ":1");
g_free (email_uri);
g_free (email);
}
if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_TO) == 0) {
gchar *email_uri, *email = NULL, *fullname = NULL;
- tracker_data_insert_statement (":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
+ data_insert_statement (object, ":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
get_email_and_fullname (values[i], &email, &fullname);
if (fullname) {
- tracker_data_insert_statement (":1", NCO_PREFIX "fullname", fullname);
+ data_insert_statement (object, ":1", NCO_PREFIX "fullname", fullname);
g_free (fullname);
}
email_uri = tracker_uri_printf_escaped ("mailto:%s", email);
- tracker_data_insert_statement (email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
- tracker_data_insert_statement (email_uri, NCO_PREFIX "emailAddress", email);
- tracker_data_insert_statement (":1", NCO_PREFIX "hasEmailAddress", email_uri);
- tracker_data_insert_statement (subject, NMO_PREFIX "to", ":1");
+ data_insert_statement (object, email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
+ data_insert_statement (object, email_uri, NCO_PREFIX "emailAddress", email);
+ data_insert_statement (object, ":1", NCO_PREFIX "hasEmailAddress", email_uri);
+ data_insert_statement (object, subject, NMO_PREFIX "to", ":1");
g_free (email_uri);
g_free (email);
}
if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_CC) == 0) {
gchar *email_uri, *email = NULL, *fullname = NULL;
- tracker_data_insert_statement (":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
+ data_insert_statement (object, ":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
get_email_and_fullname (values[i], &email, &fullname);
if (fullname) {
- tracker_data_insert_statement (":1", NCO_PREFIX "fullname", fullname);
+ data_insert_statement (object, ":1", NCO_PREFIX "fullname", fullname);
g_free (fullname);
}
email_uri = tracker_uri_printf_escaped ("mailto:%s", email);
- tracker_data_insert_statement (email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
- tracker_data_insert_statement (email_uri, NCO_PREFIX "emailAddress", email);
- tracker_data_insert_statement (":1", NCO_PREFIX "hasEmailAddress", email_uri);
- tracker_data_insert_statement (subject, NMO_PREFIX "cc", ":1");
+ data_insert_statement (object, email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
+ data_insert_statement (object, email_uri, NCO_PREFIX "emailAddress", email);
+ data_insert_statement (object, ":1", NCO_PREFIX "hasEmailAddress", email_uri);
+ data_insert_statement (object, subject, NMO_PREFIX "cc", ":1");
g_free (email_uri);
g_free (email);
}
@@ -494,22 +510,23 @@ perform_set (TrackerEvolutionRegistrar *object,
static void
perform_unset (TrackerEvolutionRegistrar *object,
- const gchar *subject)
+ const gchar *subject, gboolean batch)
{
- tracker_data_delete_resource (subject);
+ gchar *sparql = g_strdup_printf ("DELETE { <%s> a rdfs:Resource }", subject);
+
+ if (batch) {
+ tracker_store_sparql_update (sparql, NULL);
+ } else {
+ tracker_store_queue_sparql_update (sparql, NULL, NULL, NULL);
+ }
+
+ g_free (sparql);
}
static void
perform_cleanup (TrackerEvolutionRegistrar *object)
{
- GError *error = NULL;
-
- tracker_data_update_sparql ("DELETE { ?s ?p ?o } WHERE { ?s nie:dataSource <" DATASOURCE_URN "> }", &error);
-
- if (error) {
- g_warning ("%s", error->message);
- g_error_free (error);
- }
+ tracker_store_sparql_update ("DELETE { ?s ?p ?o } WHERE { ?s nie:dataSource <" DATASOURCE_URN "> }", NULL);
}
static void
@@ -540,9 +557,91 @@ tracker_evolution_registrar_set (TrackerEvolutionRegistrar *object,
set_stored_last_modseq (modseq);
+ tracker_store_queue_commit (NULL, NULL, NULL);
+
dbus_g_method_return (context);
}
+
+
+typedef struct {
+ TrackerEvolutionRegistrar *object;
+ GStrv subjects;
+ GPtrArray *predicates;
+ GPtrArray *values;
+ guint modseq;
+ DBusGMethodInvocation *context;
+} SetManyInfo;
+
+static gboolean
+set_many_idle (gpointer user_data)
+{
+ guint i = 0;
+ SetManyInfo *info = user_data;
+ gboolean cont = FALSE;
+
+ while (info->subjects[i] != NULL) {
+ GStrv preds = g_ptr_array_index (info->predicates, i);
+ GStrv vals = g_ptr_array_index (info->values, i);
+
+ perform_set (info->object, info->subjects[i], preds, vals);
+
+ if (i > 100) {
+ cont = TRUE;
+ break;
+ }
+
+ i++;
+ }
+
+ return cont;
+}
+
+static void
+strv_ptrarray_free (GPtrArray *array)
+{
+ guint i;
+
+ for (i = 0; i < array->len; i++) {
+ g_strfreev (g_ptr_array_index (array, i));
+ }
+
+ g_ptr_array_free (array, TRUE);
+}
+
+static void
+set_many_destroy (gpointer user_data)
+{
+ SetManyInfo *info = user_data;
+
+ strv_ptrarray_free (info->predicates);
+ strv_ptrarray_free (info->values);
+ g_strfreev (info->subjects);
+
+ set_stored_last_modseq (info->modseq);
+
+ tracker_store_queue_commit (NULL, NULL, NULL);
+
+ dbus_g_method_return (info->context);
+
+ g_object_unref (info->object);
+ g_free (info);
+}
+
+static GPtrArray*
+strv_ptrarray_dup (const GPtrArray *array)
+{
+ GPtrArray *new_array = g_ptr_array_sized_new (array->len);
+ guint i;
+
+ for (i = 0; i < array->len; i++) {
+ g_ptr_array_add (new_array, g_strdupv (
+ g_ptr_array_index (array, i)));
+ }
+
+ return new_array;
+}
+
void
tracker_evolution_registrar_set_many (TrackerEvolutionRegistrar *object,
const GStrv subjects,
@@ -553,7 +652,7 @@ tracker_evolution_registrar_set_many (TrackerEvolutionRegistrar *object,
GError *derror)
{
guint len;
- guint i = 0, amount = 0;
+ SetManyInfo *info;
dbus_async_return_if_fail (subjects != NULL, context);
dbus_async_return_if_fail (predicates != NULL, context);
@@ -564,30 +663,64 @@ tracker_evolution_registrar_set_many (TrackerEvolutionRegistrar *object,
dbus_async_return_if_fail (len == predicates->len, context);
dbus_async_return_if_fail (len == values->len, context);
- tracker_data_begin_transaction ();
+ info = g_new0 (SetManyInfo, 1);
+
+ info->object = g_object_ref (object);
+ info->context = context;
+ info->modseq = modseq;
+ info->subjects = g_strdupv (subjects);
+ info->predicates = strv_ptrarray_dup (predicates);
+ info->values = strv_ptrarray_dup (values);
+
+ g_idle_add_full (G_PRIORITY_DEFAULT,
+ set_many_idle,
+ info,
+ set_many_destroy);
+}
+
+
+typedef struct {
+ GStrv subjects;
+ guint modseq;
+ DBusGMethodInvocation *context;
+ TrackerEvolutionRegistrar *object;
+} UnsetManyInfo;
+
+static gboolean
+unset_many_idle (gpointer user_data)
+{
+ guint i = 0;
+ gboolean cont = FALSE;
+ UnsetManyInfo *info = user_data;
- while (subjects[i] != NULL) {
- GStrv preds = g_ptr_array_index (predicates, i);
- GStrv vals = g_ptr_array_index (values, i);
+ while (info->subjects[i] != NULL) {
- perform_set (object, subjects[i], preds, vals);
+ perform_unset (info->object, info->subjects[i], TRUE);
- amount++;
- if (amount > TRANSACTION_MAX) {
- tracker_data_commit_transaction ();
- g_main_context_iteration (NULL, FALSE);
- tracker_data_begin_transaction ();
- amount = 0;
+ if (i > 100) {
+ cont = TRUE;
+ break;
}
i++;
}
- set_stored_last_modseq (modseq);
+ return cont;
+}
+
+static void
+unset_many_destroy (gpointer user_data)
+{
+ UnsetManyInfo *info = user_data;
- tracker_data_commit_transaction ();
+ set_stored_last_modseq (info->modseq);
- dbus_g_method_return (context);
+ tracker_store_queue_commit (NULL, NULL, NULL);
+
+ dbus_g_method_return (info->context);
+
+ g_object_unref (info->object);
+ g_free (info);
}
void
@@ -597,32 +730,21 @@ tracker_evolution_registrar_unset_many (TrackerEvolutionRegistrar *object,
DBusGMethodInvocation *context,
GError *derror)
{
- guint i = 0, amount = 0;
+ UnsetManyInfo *info;
dbus_async_return_if_fail (subjects != NULL, context);
- tracker_data_begin_transaction ();
+ info = g_new0 (UnsetManyInfo, 1);
- while (subjects[i] != NULL) {
+ info->object = g_object_ref (object);
+ info->context = context;
+ info->modseq = modseq;
+ info->subjects = g_strdupv (subjects);
- perform_unset (object, subjects[i]);
-
- amount++;
- if (amount > TRANSACTION_MAX) {
- tracker_data_commit_transaction ();
- g_main_context_iteration (NULL, FALSE);
- tracker_data_begin_transaction ();
- amount = 0;
- }
-
- i++;
- }
-
- set_stored_last_modseq (modseq);
-
- tracker_data_commit_transaction ();
-
- dbus_g_method_return (context);
+ g_idle_add_full (G_PRIORITY_DEFAULT,
+ unset_many_idle,
+ info,
+ unset_many_destroy);
}
void
@@ -634,7 +756,7 @@ tracker_evolution_registrar_unset (TrackerEvolutionRegistrar *object,
{
dbus_async_return_if_fail (subject != NULL, context);
- perform_unset (object, subject);
+ perform_unset (object, subject, FALSE);
dbus_g_method_return (context);
}
diff --git a/src/plugins/kmail/tracker-kmail-registrar.c b/src/plugins/kmail/tracker-kmail-registrar.c
index 3aeaff3..4ebf0f3 100644
--- a/src/plugins/kmail/tracker-kmail-registrar.c
+++ b/src/plugins/kmail/tracker-kmail-registrar.c
@@ -28,16 +28,13 @@
#include <glib-object.h>
#include <dbus/dbus-glib-bindings.h>
-#include <libtracker-data/tracker-data-update.h>
#include <libtracker-data/tracker-data-manager.h>
-#include <libtracker-data/tracker-data-query.h>
#include <tracker-store/tracker-push-registrar.h>
+#include <tracker-store/tracker-store.h>
#define __TRACKER_KMAIL_REGISTRAR_C__
-#define TRANSACTION_MAX 200
-
#include "tracker-kmail-registrar.h"
#include "tracker-kmail-registrar-glue.h"
@@ -155,6 +152,15 @@ get_email_and_fullname (const gchar *line, gchar **email, gchar **fullname)
}
}
+static void
+data_insert_statement (TrackerKMailRegistrar *self,
+ const gchar *subject,
+ const gchar *predicate,
+ const gchar *object)
+{
+ tracker_store_queue_insert_statement (subject, predicate, object,
+ NULL, NULL, NULL);
+}
static void
perform_set (TrackerKMailRegistrar *object,
@@ -164,20 +170,18 @@ perform_set (TrackerKMailRegistrar *object,
{
guint i = 0;
- if (!tracker_data_query_resource_exists (DATASOURCE_URN, NULL, NULL)) {
- tracker_data_insert_statement (DATASOURCE_URN, RDF_PREFIX "type",
- NIE_DATASOURCE);
- }
+ data_insert_statement (object, DATASOURCE_URN, RDF_PREFIX "type",
+ NIE_DATASOURCE);
- tracker_data_insert_statement (subject, RDF_PREFIX "type",
- NMO_PREFIX "Email");
+ data_insert_statement (object, subject, RDF_PREFIX "type",
+ NMO_PREFIX "Email");
- tracker_data_insert_statement (subject, RDF_PREFIX "type",
- NMO_PREFIX "MailboxDataObject");
+ data_insert_statement (object, subject, RDF_PREFIX "type",
+ NMO_PREFIX "MailboxDataObject");
- tracker_data_insert_statement (subject, NIE_DATASOURCE_P,
- DATASOURCE_URN);
+ data_insert_statement (object, subject, NIE_DATASOURCE_P,
+ DATASOURCE_URN);
while (predicates [i] != NULL && values[i] != NULL) {
@@ -194,77 +198,77 @@ perform_set (TrackerKMailRegistrar *object,
if (g_strcmp0 (predicates[i], TRACKER_KMAIL_PREDICATE_TAG) == 0) {
- tracker_data_insert_statement (":1", RDF_PREFIX "type",
- NAO_PREFIX "Tag");
+ data_insert_statement (object, ":1", RDF_PREFIX "type",
+ NAO_PREFIX "Tag");
- tracker_data_insert_statement (":1",
- NAO_PREFIX "prefLabel",
- values[i]);
+ data_insert_statement (object, ":1",
+ NAO_PREFIX "prefLabel",
+ values[i]);
- tracker_data_insert_statement (subject,
- NAO_PREFIX "hasTag",
- ":1");
+ data_insert_statement (object, subject,
+ NAO_PREFIX "hasTag",
+ ":1");
}
if (g_strcmp0 (predicates[i], TRACKER_KMAIL_PREDICATE_SUBJECT) == 0) {
- tracker_data_insert_statement (subject,
- TRACKER_NMO_PREFIX "messageSubject",
- values[i]);
+ data_insert_statement (object, subject,
+ TRACKER_NMO_PREFIX "messageSubject",
+ values[i]);
}
if (g_strcmp0 (predicates[i], TRACKER_KMAIL_PREDICATE_SENT) == 0) {
- tracker_data_insert_statement (subject,
- TRACKER_NMO_PREFIX "receivedDate",
- values[i]);
+ data_insert_statement (object, subject,
+ TRACKER_NMO_PREFIX "receivedDate",
+ values[i]);
}
if (g_strcmp0 (predicates[i], TRACKER_KMAIL_PREDICATE_FROM) == 0) {
gchar *email_uri, *email = NULL, *fullname = NULL;
- tracker_data_insert_statement (":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
+ data_insert_statement (object, ":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
get_email_and_fullname (values[i], &email, &fullname);
if (fullname) {
- tracker_data_insert_statement (":1", NCO_PREFIX "fullname", fullname);
+ data_insert_statement (object, ":1", NCO_PREFIX "fullname", fullname);
g_free (fullname);
}
email_uri = tracker_uri_printf_escaped ("mailto:%s", email);
- tracker_data_insert_statement (email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
- tracker_data_insert_statement (email_uri, NCO_PREFIX "emailAddress", email);
- tracker_data_insert_statement (":1", NCO_PREFIX "hasEmailAddress", email_uri);
- tracker_data_insert_statement (subject, NMO_PREFIX "from", ":1");
+ data_insert_statement (object, email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
+ data_insert_statement (object, email_uri, NCO_PREFIX "emailAddress", email);
+ data_insert_statement (object, ":1", NCO_PREFIX "hasEmailAddress", email_uri);
+ data_insert_statement (object, subject, NMO_PREFIX "from", ":1");
g_free (email_uri);
g_free (email);
}
if (g_strcmp0 (predicates[i], TRACKER_KMAIL_PREDICATE_TO) == 0) {
gchar *email_uri, *email = NULL, *fullname = NULL;
- tracker_data_insert_statement (":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
+ data_insert_statement (object, ":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
get_email_and_fullname (values[i], &email, &fullname);
if (fullname) {
- tracker_data_insert_statement (":1", NCO_PREFIX "fullname", fullname);
+ data_insert_statement (object, ":1", NCO_PREFIX "fullname", fullname);
g_free (fullname);
}
email_uri = tracker_uri_printf_escaped ("mailto:%s", email);
- tracker_data_insert_statement (email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
- tracker_data_insert_statement (email_uri, NCO_PREFIX "emailAddress", email);
- tracker_data_insert_statement (":1", NCO_PREFIX "hasEmailAddress", email_uri);
- tracker_data_insert_statement (subject, NMO_PREFIX "to", ":1");
+ data_insert_statement (object, email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
+ data_insert_statement (object, email_uri, NCO_PREFIX "emailAddress", email);
+ data_insert_statement (object, ":1", NCO_PREFIX "hasEmailAddress", email_uri);
+ data_insert_statement (object, subject, NMO_PREFIX "to", ":1");
g_free (email_uri);
g_free (email);
}
if (g_strcmp0 (predicates[i], TRACKER_KMAIL_PREDICATE_CC) == 0) {
gchar *email_uri, *email = NULL, *fullname = NULL;
- tracker_data_insert_statement (":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
+ data_insert_statement (object, ":1", RDF_PREFIX "type", NCO_PREFIX "Contact");
get_email_and_fullname (values[i], &email, &fullname);
if (fullname) {
- tracker_data_insert_statement (":1", NCO_PREFIX "fullname", fullname);
+ data_insert_statement (object, ":1", NCO_PREFIX "fullname", fullname);
g_free (fullname);
}
email_uri = tracker_uri_printf_escaped ("mailto:%s", email);
- tracker_data_insert_statement (email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
- tracker_data_insert_statement (email_uri, NCO_PREFIX "emailAddress", email);
- tracker_data_insert_statement (":1", NCO_PREFIX "hasEmailAddress", email_uri);
- tracker_data_insert_statement (subject, NMO_PREFIX "cc", ":1");
+ data_insert_statement (object, email_uri, RDF_PREFIX "type", NCO_PREFIX "EmailAddress");
+ data_insert_statement (object, email_uri, NCO_PREFIX "emailAddress", email);
+ data_insert_statement (object, ":1", NCO_PREFIX "hasEmailAddress", email_uri);
+ data_insert_statement (object, subject, NMO_PREFIX "cc", ":1");
g_free (email_uri);
g_free (email);
}
@@ -277,22 +281,24 @@ perform_set (TrackerKMailRegistrar *object,
static void
perform_unset (TrackerKMailRegistrar *object,
- const gchar *subject)
+ const gchar *subject,
+ gboolean batch)
{
- tracker_data_delete_resource (subject);
+ gchar *sparql = g_strdup_printf ("DELETE { <%s> a rdfs:Resource }", subject);
+
+ if (batch) {
+ tracker_store_sparql_update (sparql, NULL);
+ } else {
+ tracker_store_queue_sparql_update (sparql, NULL, NULL, NULL);
+ }
+
+ g_free (sparql);
}
static void
perform_cleanup (TrackerKMailRegistrar *object)
{
- GError *error = NULL;
-
- tracker_data_update_sparql ("DELETE { ?s ?p ?o } WHERE { ?s nie:dataSource <" DATASOURCE_URN "> }", &error);
-
- if (error) {
- g_warning ("%s", error->message);
- g_error_free (error);
- }
+ tracker_store_sparql_update ("DELETE { ?s ?p ?o } WHERE { ?s nie:dataSource <" DATASOURCE_URN "> }", NULL);
}
static void
@@ -323,9 +329,89 @@ tracker_kmail_registrar_set (TrackerKMailRegistrar *object,
set_stored_last_modseq (modseq);
+ tracker_store_queue_commit (NULL, NULL, NULL);
+
dbus_g_method_return (context);
}
+typedef struct {
+ TrackerKMailRegistrar *object;
+ GStrv subjects;
+ GPtrArray *predicates;
+ GPtrArray *values;
+ guint modseq;
+ DBusGMethodInvocation *context;
+} SetManyInfo;
+
+static gboolean
+set_many_idle (gpointer user_data)
+{
+ guint i = 0;
+ SetManyInfo *info = user_data;
+ gboolean cont = FALSE;
+
+ while (info->subjects[i] != NULL) {
+ GStrv preds = g_ptr_array_index (info->predicates, i);
+ GStrv vals = g_ptr_array_index (info->values, i);
+
+ perform_set (info->object, info->subjects[i], preds, vals);
+
+ if (i > 100) {
+ cont = TRUE;
+ break;
+ }
+
+ i++;
+ }
+
+ return cont;
+}
+
+static void
+strv_ptrarray_free (GPtrArray *array)
+{
+ guint i;
+
+ for (i = 0; i < array->len; i++) {
+ g_strfreev (g_ptr_array_index (array, i));
+ }
+
+ g_ptr_array_free (array, TRUE);
+}
+
+static void
+set_many_destroy (gpointer user_data)
+{
+ SetManyInfo *info = user_data;
+
+ strv_ptrarray_free (info->predicates);
+ strv_ptrarray_free (info->values);
+ g_strfreev (info->subjects);
+
+ set_stored_last_modseq (info->modseq);
+
+ tracker_store_queue_commit (NULL, NULL, NULL);
+
+ dbus_g_method_return (info->context);
+
+ g_object_unref (info->object);
+ g_free (info);
+}
+
+static GPtrArray*
+strv_ptrarray_dup (const GPtrArray *array)
+{
+ GPtrArray *new_array = g_ptr_array_sized_new (array->len);
+ guint i;
+
+ for (i = 0; i < array->len; i++) {
+ g_ptr_array_add (new_array, g_strdupv (
+ g_ptr_array_index (array, i)));
+ }
+
+ return new_array;
+}
+
void
tracker_kmail_registrar_set_many (TrackerKMailRegistrar *object,
const GStrv subjects,
@@ -336,7 +422,7 @@ tracker_kmail_registrar_set_many (TrackerKMailRegistrar *object,
GError *derror)
{
guint len;
- guint i = 0, amount = 0;
+ SetManyInfo *info;
dbus_async_return_if_fail (subjects != NULL, context);
dbus_async_return_if_fail (predicates != NULL, context);
@@ -347,30 +433,64 @@ tracker_kmail_registrar_set_many (TrackerKMailRegistrar *object,
dbus_async_return_if_fail (len == predicates->len, context);
dbus_async_return_if_fail (len == values->len, context);
- tracker_data_begin_transaction ();
+ info = g_new0 (SetManyInfo, 1);
+
+ info->object = g_object_ref (object);
+ info->context = context;
+ info->modseq = modseq;
+ info->subjects = g_strdupv (subjects);
+ info->predicates = strv_ptrarray_dup (predicates);
+ info->values = strv_ptrarray_dup (values);
+
+ g_idle_add_full (G_PRIORITY_DEFAULT,
+ set_many_idle,
+ info,
+ set_many_destroy);
+
+}
+
+typedef struct {
+ GStrv subjects;
+ guint modseq;
+ DBusGMethodInvocation *context;
+ TrackerKMailRegistrar *object;
+} UnsetManyInfo;
+
+static gboolean
+unset_many_idle (gpointer user_data)
+{
+ guint i = 0;
+ gboolean cont = FALSE;
+ UnsetManyInfo *info = user_data;
- while (subjects[i] != NULL) {
- GStrv preds = g_ptr_array_index (predicates, i);
- GStrv vals = g_ptr_array_index (values, i);
+ while (info->subjects[i] != NULL) {
- perform_set (object, subjects[i], preds, vals);
+ perform_unset (info->object, info->subjects[i], TRUE);
- amount++;
- if (amount > TRANSACTION_MAX) {
- tracker_data_commit_transaction ();
- g_main_context_iteration (NULL, FALSE);
- tracker_data_begin_transaction ();
- amount = 0;
+ if (i > 100) {
+ cont = TRUE;
+ break;
}
i++;
}
- set_stored_last_modseq (modseq);
+ return cont;
+}
- tracker_data_commit_transaction ();
+static void
+unset_many_destroy (gpointer user_data)
+{
+ UnsetManyInfo *info = user_data;
- dbus_g_method_return (context);
+ set_stored_last_modseq (info->modseq);
+
+ tracker_store_queue_commit (NULL, NULL, NULL);
+
+ dbus_g_method_return (info->context);
+
+ g_object_unref (info->object);
+ g_free (info);
}
void
@@ -380,32 +500,22 @@ tracker_kmail_registrar_unset_many (TrackerKMailRegistrar *object,
DBusGMethodInvocation *context,
GError *derror)
{
- guint i = 0, amount = 0;
+ UnsetManyInfo *info;
dbus_async_return_if_fail (subjects != NULL, context);
- tracker_data_begin_transaction ();
+ info = g_new0 (UnsetManyInfo, 1);
- while (subjects[i] != NULL) {
+ info->object = g_object_ref (object);
+ info->context = context;
+ info->modseq = modseq;
+ info->subjects = g_strdupv (subjects);
- perform_unset (object, subjects[i]);
+ g_idle_add_full (G_PRIORITY_DEFAULT,
+ unset_many_idle,
+ info,
+ unset_many_destroy);
- amount++;
- if (amount > TRANSACTION_MAX) {
- tracker_data_commit_transaction ();
- g_main_context_iteration (NULL, FALSE);
- tracker_data_begin_transaction ();
- amount = 0;
- }
-
- i++;
- }
-
- set_stored_last_modseq (modseq);
-
- tracker_data_commit_transaction ();
-
- dbus_g_method_return (context);
}
void
@@ -417,7 +527,7 @@ tracker_kmail_registrar_unset (TrackerKMailRegistrar *object,
{
dbus_async_return_if_fail (subject != NULL, context);
- perform_unset (object, subject);
+ perform_unset (object, subject, FALSE);
dbus_g_method_return (context);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]