aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend/pas/pas-backend-sync.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/backend/pas/pas-backend-sync.c')
-rw-r--r--addressbook/backend/pas/pas-backend-sync.c395
1 files changed, 395 insertions, 0 deletions
diff --git a/addressbook/backend/pas/pas-backend-sync.c b/addressbook/backend/pas/pas-backend-sync.c
new file mode 100644
index 0000000000..45063eddc6
--- /dev/null
+++ b/addressbook/backend/pas/pas-backend-sync.c
@@ -0,0 +1,395 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Author:
+ * Chris Toshok (toshok@ximian.com)
+ *
+ * Copyright (C) 2003, Ximian, Inc.
+ */
+
+#include <config.h>
+#include "pas-backend-sync.h"
+#include "pas-marshal.h"
+
+struct _PASBackendSyncPrivate {
+ int mumble;
+};
+
+static GObjectClass *parent_class;
+
+gboolean
+pas_backend_sync_construct (PASBackendSync *backend)
+{
+ return TRUE;
+}
+
+PASBackendSyncStatus
+pas_backend_sync_create_contact (PASBackendSync *backend,
+ PASBook *book,
+ const char *vcard,
+ EContact **contact)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (vcard, GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (contact, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->create_contact_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->create_contact_sync) (backend, book, vcard, contact);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_remove (PASBackendSync *backend,
+ PASBook *book)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->remove_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->remove_sync) (backend, book);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_remove_contacts (PASBackendSync *backend,
+ PASBook *book,
+ GList *id_list,
+ GList **removed_ids)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (id_list, GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (removed_ids, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->remove_contacts_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->remove_contacts_sync) (backend, book, id_list, removed_ids);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_modify_contact (PASBackendSync *backend,
+ PASBook *book,
+ const char *vcard,
+ EContact **contact)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (vcard, GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (contact, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->modify_contact_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->modify_contact_sync) (backend, book, vcard, contact);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_get_contact (PASBackendSync *backend,
+ PASBook *book,
+ const char *id,
+ char **vcard)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (id, GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (vcard, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->get_contact_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->get_contact_sync) (backend, book, id, vcard);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_get_contact_list (PASBackendSync *backend,
+ PASBook *book,
+ const char *query,
+ GList **contacts)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (query, GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (contacts, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->get_contact_list_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->get_contact_list_sync) (backend, book, query, contacts);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_get_changes (PASBackendSync *backend,
+ PASBook *book,
+ const char *change_id,
+ GList **changes)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (change_id, GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (changes, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->get_changes_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->get_changes_sync) (backend, book, change_id, changes);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_authenticate_user (PASBackendSync *backend,
+ PASBook *book,
+ const char *user,
+ const char *passwd,
+ const char *auth_method)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (user && passwd && auth_method, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->authenticate_user_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->authenticate_user_sync) (backend, book, user, passwd, auth_method);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_get_supported_fields (PASBackendSync *backend,
+ PASBook *book,
+ GList **fields)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (fields, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->get_supported_fields_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->get_supported_fields_sync) (backend, book, fields);
+}
+
+PASBackendSyncStatus
+pas_backend_sync_get_supported_auth_methods (PASBackendSync *backend,
+ PASBook *book,
+ GList **methods)
+{
+ g_return_val_if_fail (backend && PAS_IS_BACKEND_SYNC (backend), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (book && PAS_IS_BOOK (book), GNOME_Evolution_Addressbook_OtherError);
+ g_return_val_if_fail (methods, GNOME_Evolution_Addressbook_OtherError);
+
+ g_assert (PAS_BACKEND_SYNC_GET_CLASS (backend)->get_supported_auth_methods_sync);
+
+ return (* PAS_BACKEND_SYNC_GET_CLASS (backend)->get_supported_auth_methods_sync) (backend, book, methods);
+}
+
+static void
+_pas_backend_remove (PASBackend *backend,
+ PASBook *book)
+{
+ PASBackendSyncStatus status;
+
+ status = pas_backend_sync_remove (PAS_BACKEND_SYNC (backend), book);
+
+ pas_book_respond_remove (book, status);
+}
+
+static void
+_pas_backend_create_contact (PASBackend *backend,
+ PASBook *book,
+ const char *vcard)
+{
+ PASBackendSyncStatus status;
+ EContact *contact;
+
+ status = pas_backend_sync_create_contact (PAS_BACKEND_SYNC (backend), book, vcard, &contact);
+
+ pas_book_respond_create (book, status, contact);
+
+ g_object_unref (contact);
+}
+
+static void
+_pas_backend_remove_contacts (PASBackend *backend,
+ PASBook *book,
+ GList *id_list)
+{
+ PASBackendSyncStatus status;
+ GList *ids = NULL;
+
+ status = pas_backend_sync_remove_contacts (PAS_BACKEND_SYNC (backend), book, id_list, &ids);
+
+ pas_book_respond_remove_contacts (book, status, ids);
+
+ g_list_free (ids);
+}
+
+static void
+_pas_backend_modify_contact (PASBackend *backend,
+ PASBook *book,
+ const char *vcard)
+{
+ PASBackendSyncStatus status;
+ EContact *contact;
+
+ status = pas_backend_sync_modify_contact (PAS_BACKEND_SYNC (backend), book, vcard, &contact);
+
+ pas_book_respond_modify (book, status, contact);
+
+ g_object_unref (contact);
+}
+
+static void
+_pas_backend_get_contact (PASBackend *backend,
+ PASBook *book,
+ const char *id)
+{
+ PASBackendSyncStatus status;
+ char *vcard;
+
+ status = pas_backend_sync_get_contact (PAS_BACKEND_SYNC (backend), book, id, &vcard);
+
+ pas_book_respond_get_contact (book, status, vcard);
+
+ g_free (vcard);
+}
+
+static void
+_pas_backend_get_contact_list (PASBackend *backend,
+ PASBook *book,
+ const char *query)
+{
+ PASBackendSyncStatus status;
+ GList *cards = NULL;
+
+ status = pas_backend_sync_get_contact_list (PAS_BACKEND_SYNC (backend), book, query, &cards);
+
+ pas_book_respond_get_contact_list (book, status, cards);
+}
+
+static void
+_pas_backend_get_changes (PASBackend *backend,
+ PASBook *book,
+ const char *change_id)
+{
+ PASBackendSyncStatus status;
+ GList *changes = NULL;
+
+ status = pas_backend_sync_get_changes (PAS_BACKEND_SYNC (backend), book, change_id, &changes);
+
+ pas_book_respond_get_changes (book, status, changes);
+
+ /* XXX free view? */
+}
+
+static void
+_pas_backend_authenticate_user (PASBackend *backend,
+ PASBook *book,
+ const char *user,
+ const char *passwd,
+ const char *auth_method)
+{
+ PASBackendSyncStatus status;
+
+ status = pas_backend_sync_authenticate_user (PAS_BACKEND_SYNC (backend), book, user, passwd, auth_method);
+
+ pas_book_respond_authenticate_user (book, status);
+}
+
+static void
+_pas_backend_get_supported_fields (PASBackend *backend,
+ PASBook *book)
+{
+ PASBackendSyncStatus status;
+ GList *fields = NULL;
+
+ status = pas_backend_sync_get_supported_fields (PAS_BACKEND_SYNC (backend), book, &fields);
+
+ pas_book_respond_get_supported_fields (book, status, fields);
+
+ g_list_foreach (fields, (GFunc)g_free, NULL);
+ g_list_free (fields);
+}
+
+static void
+_pas_backend_get_supported_auth_methods (PASBackend *backend,
+ PASBook *book)
+{
+ PASBackendSyncStatus status;
+ GList *methods = NULL;
+
+ status = pas_backend_sync_get_supported_auth_methods (PAS_BACKEND_SYNC (backend), book, &methods);
+
+ pas_book_respond_get_supported_auth_methods (book, status, methods);
+
+ g_list_foreach (methods, (GFunc)g_free, NULL);
+ g_list_free (methods);
+}
+
+static void
+pas_backend_sync_init (PASBackendSync *backend)
+{
+ PASBackendSyncPrivate *priv;
+
+ priv = g_new0 (PASBackendSyncPrivate, 1);
+
+ backend->priv = priv;
+}
+
+static void
+pas_backend_sync_dispose (GObject *object)
+{
+ PASBackendSync *backend;
+
+ backend = PAS_BACKEND_SYNC (object);
+
+ if (backend->priv) {
+ g_free (backend->priv);
+
+ backend->priv = NULL;
+ }
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+pas_backend_sync_class_init (PASBackendSyncClass *klass)
+{
+ GObjectClass *object_class;
+ PASBackendClass *backend_class = PAS_BACKEND_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class = (GObjectClass *) klass;
+
+ backend_class->remove = _pas_backend_remove;
+ backend_class->create_contact = _pas_backend_create_contact;
+ backend_class->remove_contacts = _pas_backend_remove_contacts;
+ backend_class->modify_contact = _pas_backend_modify_contact;
+ backend_class->get_contact = _pas_backend_get_contact;
+ backend_class->get_contact_list = _pas_backend_get_contact_list;
+ backend_class->get_changes = _pas_backend_get_changes;
+ backend_class->authenticate_user = _pas_backend_authenticate_user;
+ backend_class->get_supported_fields = _pas_backend_get_supported_fields;
+ backend_class->get_supported_auth_methods = _pas_backend_get_supported_auth_methods;
+
+ object_class->dispose = pas_backend_sync_dispose;
+}
+
+/**
+ * pas_backend_get_type:
+ */
+GType
+pas_backend_sync_get_type (void)
+{
+ static GType type = 0;
+
+ if (! type) {
+ GTypeInfo info = {
+ sizeof (PASBackendSyncClass),
+ NULL, /* base_class_init */
+ NULL, /* base_class_finalize */
+ (GClassInitFunc) pas_backend_sync_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (PASBackendSync),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) pas_backend_sync_init
+ };
+
+ type = g_type_register_static (PAS_TYPE_BACKEND, "PASBackendSync", &info, 0);
+ }
+
+ return type;
+}