diff options
Diffstat (limited to 'addressbook/backend/pas/pas-backend-sync.c')
-rw-r--r-- | addressbook/backend/pas/pas-backend-sync.c | 395 |
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; +} |