diff options
Diffstat (limited to 'src/plugins/evolution/tracker-evolution-registrar.c')
-rw-r--r-- | src/plugins/evolution/tracker-evolution-registrar.c | 902 |
1 files changed, 0 insertions, 902 deletions
diff --git a/src/plugins/evolution/tracker-evolution-registrar.c b/src/plugins/evolution/tracker-evolution-registrar.c deleted file mode 100644 index 1a95554ee..000000000 --- a/src/plugins/evolution/tracker-evolution-registrar.c +++ /dev/null @@ -1,902 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2008, Nokia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * Authors: - * Philip Van Hoof <philip@codeminded.be> - */ - -#include "config.h" - -#include <string.h> - -#include <glib-object.h> -#include <dbus/dbus-glib-bindings.h> - -#include <libtracker-data/tracker-data-manager.h> -#include <libtracker-common/tracker-ontology.h> -#include <libtracker-common/tracker-sparql-builder.h> -#include <libtracker-common/tracker-dbus.h> - -#include <tracker-store/tracker-push-registrar.h> -#include <tracker-store/tracker-store.h> -#include <tracker-store/tracker-dbus.h> - -#define __TRACKER_EVOLUTION_REGISTRAR_C__ - -#include "tracker-evolution-registrar.h" -#include "tracker-evolution-registrar-glue.h" - -#define TRACKER_EVOLUTION_REGISTRAR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_EVOLUTION_REGISTRAR, TrackerEvolutionRegistrarPrivate)) - -#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 NIE_DATASOURCE TRACKER_NIE_PREFIX "DataSource" -#define NIE_DATASOURCE_P TRACKER_NIE_PREFIX "dataSource" - -#define RDF_PREFIX TRACKER_RDF_PREFIX -#define NMO_PREFIX TRACKER_NMO_PREFIX -#define NCO_PREFIX TRACKER_NCO_PREFIX -#define NAO_PREFIX TRACKER_NAO_PREFIX - -#define DATASOURCE_URN "urn:nepomuk:datasource:1cb1eb90-1241-11de-8c30-0800200c9a66" - -typedef struct TrackerEvolutionPushRegistrar TrackerEvolutionPushRegistrar; -typedef struct TrackerEvolutionPushRegistrarClass TrackerEvolutionPushRegistrarClass; - -struct TrackerEvolutionPushRegistrar { - TrackerPushRegistrar parent_instance; -}; - -struct TrackerEvolutionPushRegistrarClass { - TrackerPushRegistrarClass parent_class; -}; - -typedef struct { - gpointer dummy; -} TrackerEvolutionRegistrarPrivate; - -enum { - PROP_0, -}; - - -static GType tracker_evolution_push_registrar_get_type (void) G_GNUC_CONST; - -G_DEFINE_TYPE (TrackerEvolutionRegistrar, tracker_evolution_registrar, G_TYPE_OBJECT) -G_DEFINE_TYPE (TrackerEvolutionPushRegistrar, tracker_evolution_push_registrar, TRACKER_TYPE_PUSH_REGISTRAR); - -static void -tracker_evolution_registrar_finalize (GObject *object) -{ - G_OBJECT_CLASS (tracker_evolution_registrar_parent_class)->finalize (object); -} - - -static void -tracker_evolution_registrar_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -tracker_evolution_registrar_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -tracker_evolution_registrar_class_init (TrackerEvolutionRegistrarClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = tracker_evolution_registrar_finalize; - object_class->set_property = tracker_evolution_registrar_set_property; - object_class->get_property = tracker_evolution_registrar_get_property; - - g_type_class_add_private (object_class, sizeof (TrackerEvolutionRegistrarPrivate)); -} - -static void -tracker_evolution_registrar_init (TrackerEvolutionRegistrar *object) -{ -} - - - - - -#if 0 -static void -extract_mime_parts (GMimeObject *object, - gpointer user_data) -{ - const gchar *message_subject = user_data; - gchar *subject = NULL; - const gchar *disposition, *filename; - GMimePart *part; - - if (GMIME_IS_MESSAGE_PART (object)) { - GMimeMessage *message; - - message = g_mime_message_part_get_message (GMIME_MESSAGE_PART (object)); - - if (message) { - g_mime_message_foreach_part (message, extract_mime_parts, user_data); - g_object_unref (message); - } - - return; - } else if (GMIME_IS_MULTIPART (object)) { - g_mime_multipart_foreach (GMIME_MULTIPART (object), extract_mime_parts, user_data); - return; - } - - part = GMIME_PART (object); - disposition = g_mime_part_get_content_disposition (part); - - if (!disposition || - (g_strcmp0 (disposition, GMIME_DISPOSITION_ATTACHMENT) != 0 && - g_strcmp0 (disposition, GMIME_DISPOSITION_INLINE) != 0)) { - return; - } - - filename = g_mime_part_get_filename (GMIME_PART (object)); - - if (!filename || - g_strcmp0 (filename, "signature.asc") == 0 || - g_strcmp0 (filename, "signature.pgp") == 0) { - return; - } - - if (filename) { - GHashTable *data; - TrackerModuleMetadata *metadata; - gchar *subject; - - /* This is not a path but a URI: don't use the OS's dir separator - * here, use the '/'. Another option is to use '#' instead of '/' - * here. This depends on how we want to format the URI and what - * Evolution can cope with as URI for an attachment (I don't - * think it can cope with any attachment URI, btw). */ - - subject = g_strdup_printf ("%s/%s", message_subject, - filename); - - data_insert_statement (subject, - "File:Path", - filename); - - data_insert_statement (subject, - "File:Name", - filename); - - g_free (subject); - } -} - -static gchar * -get_object_encoding (GMimeObject *object) -{ - const gchar *start_encoding, *end_encoding; - const gchar *content_type = NULL; - - if (GMIME_IS_MESSAGE (object)) { - content_type = g_mime_message_get_header (GMIME_MESSAGE (object), "Content-Type"); - } else if (GMIME_IS_PART (object)) { - content_type = g_mime_part_get_content_header (GMIME_PART (object), "Content-Type"); - } - - if (!content_type) { - return NULL; - } - - start_encoding = strstr (content_type, "charset="); - - if (!start_encoding) { - return NULL; - } - - start_encoding += strlen ("charset="); - - if (start_encoding[0] == '"') { - /* encoding is quoted */ - start_encoding++; - end_encoding = strstr (start_encoding, "\""); - } else { - end_encoding = strstr (start_encoding, ";"); - } - - if (end_encoding) { - return g_strndup (start_encoding, end_encoding - start_encoding); - } else { - return g_strdup (start_encoding); - } -} -#endif - - -static void -get_email_and_fullname (const gchar *line, gchar **email, gchar **fullname) -{ - gchar *ptr = g_utf8_strchr (line, -1, '<'); - - if (ptr) { - gchar *holder; - - holder = g_strdup (line); - ptr = g_utf8_strchr (holder, -1, '<'); - *ptr = '\0'; - ptr++; - *fullname = holder; - holder = ptr; - ptr = g_utf8_strchr (ptr, -1, '>'); - if (ptr) { - *ptr = '\0'; - } - *email = g_strdup (holder); - - } else { - *email = g_strdup (line); - *fullname = NULL; - } -} - - -static void -perform_set (TrackerEvolutionRegistrar *object, - const gchar *subject, - const GStrv predicates, - const GStrv values) -{ - guint i = 0; - TrackerSparqlBuilder *sparql; - const gchar *uri = subject; - - sparql = tracker_sparql_builder_new_update (); - - tracker_sparql_builder_insert_open (sparql); - - tracker_sparql_builder_subject_iri (sparql, DATASOURCE_URN); - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object_iri (sparql, NIE_DATASOURCE); - - tracker_sparql_builder_subject_iri (sparql, subject); - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nmo:Email"); - - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nmo:MailboxDataObject"); - - tracker_sparql_builder_predicate (sparql, "tracker:available"); - tracker_sparql_builder_object_boolean (sparql, TRUE); - - /* The URI of the InformationElement should be a UUID URN */ - tracker_sparql_builder_predicate (sparql, "nie:isStoredAs"); - tracker_sparql_builder_object_iri (sparql, uri); - - tracker_sparql_builder_predicate_iri (sparql, NIE_DATASOURCE_P); - tracker_sparql_builder_object_iri (sparql, DATASOURCE_URN); - - while (predicates [i] != NULL && values[i] != NULL) { - - /* TODO: TRACKER_EVOLUTION_PREDICATE_JUNK (!) - * TRACKER_EVOLUTION_PREDICATE_ANSWERED - * TRACKER_EVOLUTION_PREDICATE_FLAGGED - * TRACKER_EVOLUTION_PREDICATE_FORWARDED - * TRACKER_EVOLUTION_PREDICATE_DELETED (!) - * TRACKER_EVOLUTION_PREDICATE_SIZE (!) : - * - * I don't have predicates in Tracker's ontology for these. In - * Jürg's vstore branch we are working with Nepomuk as ontology- - * set. Perhaps when we merge this to that branch that we can - * improve this situation. */ - - -#if 0 - - /* Disabling this as I can't find any version of GMime-2.0 that - * wont crash on any of my test E-mails. Going to ask Garnacho - * to migrate to GMime-2.4 with his old Evolution support. */ - - if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_FILE) == 0) { - GMimeStream *stream; - GMimeParser *parser; - GMimeMessage *message; - gint fd; - gchar *text, *orig_text, *ptr, *encoding; - gchar *path = g_strdup (values[i]); - off_t offset = 0; - gboolean is_html; - - ptr = strstr (path, "/!"); - if (ptr) { - offset = (off_t) atol (ptr+2); - *ptr = '\0'; - } - - fd = tracker_file_open (path, FALSE); - - g_free (path); - - if (fd == -1) - goto cont; - - stream = g_mime_stream_fs_new_with_bounds (fd, offset, -1); - - if (!stream) { - close (fd); - goto cont; - } - - parser = g_mime_parser_new_with_stream (stream); - - if (!parser) { - g_object_unref (stream); - goto cont; - } - - g_mime_parser_set_scan_from (parser, FALSE); - - message = g_mime_parser_construct_message (parser); - - if (!message) { - g_object_unref (parser); - g_object_unref (stream); - goto cont; - } - - g_mime_message_foreach_part (message, - extract_mime_parts, - subject); - - orig_text = g_mime_message_get_body (message, TRUE, &is_html); - - if (orig_text) { - - encoding = get_object_encoding (GMIME_OBJECT (message)); - - if (encoding) { - text = g_convert (text, -1, "utf8", encoding, NULL, NULL, NULL); - g_free (orig_text); - } else - text = orig_text; - - data_insert_statement (object, subject, - METADATA_EMAIL_TEXT, - text); - - g_free (text); - g_free (encoding); - } - - g_object_unref (message); - g_object_unref (parser); - g_object_unref (stream); - } -#endif - - if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_TAG) == 0) { - gchar *key, *value; - - if (!values[i] || strlen (values[i]) < 1) - goto cont; - - key = g_strdup (values[i]); - value = strchr (key, '='); - - tracker_sparql_builder_subject_iri (sparql, subject); - - if (value) { - *value = '\0'; - value++; - } - - if (value) { - tracker_sparql_builder_predicate (sparql, "nao:hasProperty"); - - tracker_sparql_builder_object_blank_open (sparql); - - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nao:Property"); - - tracker_sparql_builder_predicate (sparql, "nao:propertyName"); - tracker_sparql_builder_object_string (sparql, key); - - tracker_sparql_builder_predicate (sparql, "nao:propertyValue"); - tracker_sparql_builder_object_string (sparql, value); - - tracker_sparql_builder_object_blank_close (sparql); - - } else { - tracker_sparql_builder_predicate (sparql, "nao:hasTag"); - - tracker_sparql_builder_object_blank_open (sparql); - - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nao:Tag"); - - tracker_sparql_builder_predicate (sparql, "nao:prefLabel"); - tracker_sparql_builder_object_string (sparql, key); - - tracker_sparql_builder_object_blank_close (sparql); - - } - - g_free (key); - } - - if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_SUBJECT) == 0) { - tracker_sparql_builder_subject_iri (sparql, subject); - tracker_sparql_builder_predicate (sparql, "nmo:messageSubject"); - tracker_sparql_builder_object_string (sparql, values[i]); - } - - if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_SENT) == 0) { - tracker_sparql_builder_subject_iri (sparql, subject); - tracker_sparql_builder_predicate (sparql, "nmo:receivedDate"); - tracker_sparql_builder_object_string (sparql, values[i]); - } - - if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_FROM) == 0) { - gchar *email_uri, *email = NULL, *fullname = NULL; - - get_email_and_fullname (values[i], &email, &fullname); - - email_uri = tracker_uri_printf_escaped ("mailto:%s", email); - - tracker_sparql_builder_subject_iri (sparql, email_uri); - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nco:EmailAddress"); - - tracker_sparql_builder_subject_iri (sparql, email_uri); - tracker_sparql_builder_predicate (sparql, "nco:emailAddress"); - tracker_sparql_builder_object_string (sparql, email); - - tracker_sparql_builder_subject_iri (sparql, subject); - tracker_sparql_builder_predicate (sparql, "nmo:from"); - - tracker_sparql_builder_object_blank_open (sparql); - - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nco:Contact"); - - if (fullname) { - tracker_sparql_builder_predicate (sparql, "nco:fullname"); - tracker_sparql_builder_object_string (sparql, fullname); - g_free (fullname); - } - - tracker_sparql_builder_predicate (sparql, "nco:hasEmailAddress"); - tracker_sparql_builder_object_iri (sparql, email_uri); - - tracker_sparql_builder_object_blank_close (sparql); - - g_free (email_uri); - g_free (email); - } - - - if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_TO) == 0) { - gchar *email_uri, *email = NULL, *fullname = NULL; - - get_email_and_fullname (values[i], &email, &fullname); - - email_uri = tracker_uri_printf_escaped ("mailto:%s", email); - - tracker_sparql_builder_subject_iri (sparql, email_uri); - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nco:EmailAddress"); - - tracker_sparql_builder_subject_iri (sparql, email_uri); - tracker_sparql_builder_predicate (sparql, "nco:emailAddress"); - tracker_sparql_builder_object_string (sparql, email); - - tracker_sparql_builder_subject_iri (sparql, subject); - tracker_sparql_builder_predicate (sparql, "nmo:to"); - - tracker_sparql_builder_object_blank_open (sparql); - - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nco:Contact"); - - if (fullname) { - tracker_sparql_builder_predicate (sparql, "nco:fullname"); - tracker_sparql_builder_object_string (sparql, fullname); - g_free (fullname); - } - - tracker_sparql_builder_predicate (sparql, "nco:hasEmailAddress"); - tracker_sparql_builder_object_iri (sparql, email_uri); - - tracker_sparql_builder_object_blank_close (sparql); - - g_free (email_uri); - g_free (email); - } - - if (g_strcmp0 (predicates[i], TRACKER_EVOLUTION_PREDICATE_CC) == 0) { - gchar *email_uri, *email = NULL, *fullname = NULL; - - get_email_and_fullname (values[i], &email, &fullname); - - email_uri = tracker_uri_printf_escaped ("mailto:%s", email); - - tracker_sparql_builder_subject_iri (sparql, email_uri); - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nco:EmailAddress"); - - tracker_sparql_builder_subject_iri (sparql, email_uri); - tracker_sparql_builder_predicate (sparql, "nco:emailAddress"); - tracker_sparql_builder_object_string (sparql, email); - - tracker_sparql_builder_subject_iri (sparql, subject); - tracker_sparql_builder_predicate (sparql, "nmo:cc"); - - tracker_sparql_builder_object_blank_open (sparql); - - tracker_sparql_builder_predicate (sparql, "rdf:type"); - tracker_sparql_builder_object (sparql, "nco:Contact"); - - if (fullname) { - tracker_sparql_builder_predicate (sparql, "nco:fullname"); - tracker_sparql_builder_object_string (sparql, fullname); - g_free (fullname); - } - - tracker_sparql_builder_predicate (sparql, "nco:hasEmailAddress"); - tracker_sparql_builder_object_iri (sparql, email_uri); - - tracker_sparql_builder_object_blank_close (sparql); - - g_free (email_uri); - g_free (email); - } - - cont: - - i++; - } - - tracker_sparql_builder_insert_close (sparql); - - tracker_store_queue_sparql_update (tracker_sparql_builder_get_result (sparql), - NULL, NULL, NULL); - - g_object_unref (sparql); -} - -static void -perform_unset (TrackerEvolutionRegistrar *object, - const gchar *subject) -{ - gchar *sparql = g_strdup_printf ("DELETE { <%s> a rdfs:Resource }", subject); - - tracker_store_queue_sparql_update (sparql, NULL, NULL, NULL); - - g_free (sparql); -} - -static void -perform_cleanup (TrackerEvolutionRegistrar *object) -{ - tracker_store_queue_sparql_update ("DELETE { ?s a rdfs:Resource } WHERE { ?s nie:dataSource <" DATASOURCE_URN "> }", NULL, NULL, NULL); - /* tracker_store_queue_sparql_update ("DELETE { ?s ?p ?o } WHERE { ?s nie:dataSource <" DATASOURCE_URN "> }", NULL, NULL, NULL); */ -} - -static void -set_stored_last_modseq (guint last_modseq) -{ - tracker_data_manager_set_db_option_int64 ("EvolutionLastModseq", (gint64) last_modseq); -} - -static void -on_commit (gpointer user_data) -{ - set_stored_last_modseq (GPOINTER_TO_UINT (user_data)); -} - - -void -tracker_evolution_registrar_set (TrackerEvolutionRegistrar *object, - const gchar *subject, - const GStrv predicates, - const GStrv values, - const guint modseq, - DBusGMethodInvocation *context, - GError *derror) -{ - guint request_id; - - request_id = tracker_dbus_get_next_request_id (); - - tracker_dbus_request_new (request_id, - "D-Bus request to set one: 'Evolution' "); - - dbus_async_return_if_fail (subject != NULL, context); - - if (predicates && values) { - - dbus_async_return_if_fail (g_strv_length (predicates) == - g_strv_length (values), context); - - perform_set (object, subject, predicates, values); - } - - tracker_store_queue_commit (on_commit, GUINT_TO_POINTER (modseq), NULL); - - dbus_g_method_return (context); - - tracker_dbus_request_success (request_id); -} - - -void -tracker_evolution_registrar_set_many (TrackerEvolutionRegistrar *object, - const GStrv subjects, - const GPtrArray *predicates, - const GPtrArray *values, - const guint modseq, - DBusGMethodInvocation *context, - GError *derror) -{ - guint request_id; - guint len, i = 0; - - request_id = tracker_dbus_get_next_request_id (); - - dbus_async_return_if_fail (subjects != NULL, context); - dbus_async_return_if_fail (predicates != NULL, context); - dbus_async_return_if_fail (values != NULL, context); - - len = g_strv_length (subjects); - - dbus_async_return_if_fail (len == predicates->len, context); - dbus_async_return_if_fail (len == values->len, context); - - tracker_dbus_request_new (request_id, - "D-Bus request to set many: 'Evolution' " - "'%d'", len); - - while (subjects[i] != NULL) { - perform_set (object, - subjects[i], - g_ptr_array_index (predicates, i), - g_ptr_array_index (values, i)); - i++; - } - - tracker_store_queue_commit (on_commit, - GUINT_TO_POINTER (modseq), - NULL); - - dbus_g_method_return (context); - - tracker_dbus_request_success (request_id); -} - - - -void -tracker_evolution_registrar_unset_many (TrackerEvolutionRegistrar *object, - const GStrv subjects, - const guint modseq, - DBusGMethodInvocation *context, - GError *derror) -{ - guint i = 0; - guint request_id; - - request_id = tracker_dbus_get_next_request_id (); - - tracker_dbus_request_new (request_id, - "D-Bus request to unset many: 'Evolution' " - "'%d'", g_strv_length (subjects)); - - dbus_async_return_if_fail (subjects != NULL, context); - - while (subjects[i] != NULL) { - perform_unset (object, subjects[i]); - i++; - } - - tracker_store_queue_commit (on_commit, GUINT_TO_POINTER (modseq), NULL); - - dbus_g_method_return (context); - - tracker_dbus_request_success (request_id); -} - -void -tracker_evolution_registrar_unset (TrackerEvolutionRegistrar *object, - const gchar *subject, - const guint modseq, - DBusGMethodInvocation *context, - GError *derror) -{ - guint request_id; - - request_id = tracker_dbus_get_next_request_id (); - - tracker_dbus_request_new (request_id, - "D-Bus request to unset one: 'Evolution'"); - - dbus_async_return_if_fail (subject != NULL, context); - - perform_unset (object, subject); - - tracker_store_queue_commit (on_commit, GUINT_TO_POINTER (modseq), NULL); - - dbus_g_method_return (context); - - tracker_dbus_request_success (request_id); -} - -void -tracker_evolution_registrar_cleanup (TrackerEvolutionRegistrar *object, - const guint modseq, - DBusGMethodInvocation *context, - GError *derror) -{ - guint request_id; - - request_id = tracker_dbus_get_next_request_id (); - - tracker_dbus_request_new (request_id, - "D-Bus request to cleanup: 'Evolution'"); - - perform_cleanup (object); - - tracker_store_queue_commit (on_commit, GUINT_TO_POINTER (modseq), NULL); - - dbus_g_method_return (context); - - tracker_dbus_request_success (request_id); -} - - -static void -on_manager_destroy (DBusGProxy *proxy, gpointer user_data) -{ - return; -} - -static void -tracker_evolution_push_registrar_enable (TrackerPushRegistrar *registrar, - DBusGConnection *connection, - DBusGProxy *dbus_proxy, - GError **error) -{ - GError *nerror = NULL; - guint result; - DBusGProxy *manager_proxy; - GObject *object; - - tracker_push_registrar_set_object (registrar, NULL); - tracker_push_registrar_set_manager (registrar, NULL); - - manager_proxy = dbus_g_proxy_new_for_name (connection, - TRACKER_EVOLUTION_MANAGER_SERVICE, - TRACKER_EVOLUTION_MANAGER_PATH, - TRACKER_EVOLUTION_MANAGER_INTERFACE); - - /* Creation of the registrar */ - if (!org_freedesktop_DBus_request_name (dbus_proxy, - TRACKER_EVOLUTION_REGISTRAR_SERVICE, - DBUS_NAME_FLAG_DO_NOT_QUEUE, - &result, &nerror)) { - - g_critical ("Could not setup D-Bus, %s in use\n", - TRACKER_EVOLUTION_REGISTRAR_SERVICE); - - if (nerror) { - g_propagate_error (error, nerror); - return; - } - } - - if (nerror) { - g_propagate_error (error, nerror); - return; - } - - object = g_object_new (TRACKER_TYPE_EVOLUTION_REGISTRAR, NULL); - - dbus_g_object_type_install_info (G_OBJECT_TYPE (object), - &dbus_glib_tracker_evolution_registrar_object_info); - - dbus_g_connection_register_g_object (connection, - TRACKER_EVOLUTION_REGISTRAR_PATH, - object); - - /* Registration of the registrar to the manager - the cast is fine and checked */ - dbus_g_proxy_call_no_reply (manager_proxy, "Register", - G_TYPE_OBJECT, object, - G_TYPE_UINT, (guint) tracker_data_manager_get_db_option_int64 ("EvolutionLastModseq"), - G_TYPE_INVALID, - G_TYPE_INVALID); - - /* If while we had a proxy for the manager the manager shut itself down, - * then we'll get rid of our registrar too, in on_manager_destroy */ - - g_signal_connect (manager_proxy, "destroy", - G_CALLBACK (on_manager_destroy), registrar); - - tracker_push_registrar_set_object (registrar, object); - tracker_push_registrar_set_manager (registrar, manager_proxy); - - g_object_unref (object); /* sink own */ - g_object_unref (manager_proxy); /* sink own */ - - g_debug ("Enabled Push module 'Evolution'"); -} - -static void -tracker_evolution_push_registrar_disable (TrackerPushRegistrar *registrar) -{ - tracker_push_registrar_set_object (registrar, NULL); - tracker_push_registrar_set_manager (registrar, NULL); - g_debug ("Disabled Push module 'Evolution'"); -} - -static void -tracker_evolution_push_registrar_class_init (TrackerEvolutionPushRegistrarClass *klass) -{ - TrackerPushRegistrarClass *p_class = TRACKER_PUSH_REGISTRAR_CLASS (klass); - - p_class->enable = tracker_evolution_push_registrar_enable; - p_class->disable = tracker_evolution_push_registrar_disable; -} - -static void -tracker_evolution_push_registrar_init (TrackerEvolutionPushRegistrar *registrar) -{ - return; -} - -TrackerPushRegistrar * -tracker_push_module_init (void) -{ - GObject *object; - - object = g_object_new (TRACKER_TYPE_EVOLUTION_PUSH_REGISTRAR, NULL); - - tracker_push_registrar_set_service (TRACKER_PUSH_REGISTRAR (object), - TRACKER_EVOLUTION_MANAGER_SERVICE); - - return TRACKER_PUSH_REGISTRAR (object); -} - -void -tracker_push_module_shutdown (TrackerPushRegistrar *registrar) -{ - tracker_evolution_push_registrar_disable (registrar); -} |