/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Author: * Nat Friedman (nat@ximian.com) * * Copyright 2000, Ximian, Inc. */ #include #include "pas-backend.h" #include "pas-marshal.h" /* Signal IDs */ enum { LAST_CLIENT_GONE, LAST_SIGNAL }; static guint pas_backend_signals[LAST_SIGNAL]; gboolean pas_backend_construct (PASBackend *backend) { return TRUE; } GNOME_Evolution_Addressbook_BookListener_CallStatus pas_backend_load_uri (PASBackend *backend, const char *uri) { g_return_val_if_fail (backend != NULL, FALSE); g_return_val_if_fail (PAS_IS_BACKEND (backend), FALSE); g_return_val_if_fail (uri != NULL, FALSE); g_assert (PAS_BACKEND_GET_CLASS (backend)->load_uri != NULL); return (* PAS_BACKEND_GET_CLASS (backend)->load_uri) (backend, uri); } /** * pas_backend_get_uri: * @backend: An addressbook backend. * * Queries the URI that an addressbook backend is serving. * * Return value: URI for the backend. **/ const char * pas_backend_get_uri (PASBackend *backend) { g_return_val_if_fail (backend != NULL, NULL); g_return_val_if_fail (PAS_IS_BACKEND (backend), NULL); g_assert (PAS_BACKEND_GET_CLASS (backend)->get_uri != NULL); return (* PAS_BACKEND_GET_CLASS (backend)->get_uri) (backend); } /** * pas_backend_add_client: * @backend: An addressbook backend. * @listener: Listener for notification to the client. * * Adds a client to an addressbook backend. * * Return value: TRUE on success, FALSE on failure to add the client. */ gboolean pas_backend_add_client (PASBackend *backend, GNOME_Evolution_Addressbook_BookListener listener) { g_return_val_if_fail (backend != NULL, FALSE); g_return_val_if_fail (PAS_IS_BACKEND (backend), FALSE); g_return_val_if_fail (listener != CORBA_OBJECT_NIL, FALSE); g_assert (PAS_BACKEND_GET_CLASS (backend)->add_client != NULL); return PAS_BACKEND_GET_CLASS (backend)->add_client (backend, listener); } void pas_backend_remove_client (PASBackend *backend, PASBook *book) { g_return_if_fail (backend != NULL); g_return_if_fail (PAS_IS_BACKEND (backend)); g_return_if_fail (book != NULL); g_return_if_fail (PAS_IS_BOOK (book)); g_assert (PAS_BACKEND_GET_CLASS (backend)->remove_client != NULL); PAS_BACKEND_GET_CLASS (backend)->remove_client (backend, book); } char * pas_backend_get_static_capabilities (PASBackend *backend) { g_return_val_if_fail (backend != NULL, NULL); g_return_val_if_fail (PAS_IS_BACKEND (backend), NULL); g_assert (PAS_BACKEND_GET_CLASS (backend)->get_static_capabilities != NULL); return PAS_BACKEND_GET_CLASS (backend)->get_static_capabilities (backend); } /** * pas_backend_last_client_gone: * @backend: An addressbook backend. * * Emits the "last_client_gone" signal for the specified backend. Should * only be called from backend implementations if the backend really does * not have any more clients. **/ void pas_backend_last_client_gone (PASBackend *backend) { g_return_if_fail (backend != NULL); g_return_if_fail (PAS_IS_BACKEND (backend)); g_signal_emit (backend, pas_backend_signals[LAST_CLIENT_GONE], 0); } static void pas_backend_init (PASBackend *backend) { } static void pas_backend_class_init (PASBackendClass *klass) { GObjectClass *object_class; object_class = (GObjectClass *) klass; klass->add_client = NULL; klass->remove_client = NULL; klass->get_static_capabilities = NULL; pas_backend_signals[LAST_CLIENT_GONE] = g_signal_new ("last_client_gone", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (PASBackendClass, last_client_gone), NULL, NULL, pas_marshal_NONE__NONE, G_TYPE_NONE, 0); } /** * pas_backend_get_type: */ GType pas_backend_get_type (void) { static GType type = 0; if (! type) { GTypeInfo info = { sizeof (PASBackendClass), NULL, /* base_class_init */ NULL, /* base_class_finalize */ (GClassInitFunc) pas_backend_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (PASBackend), 0, /* n_preallocs */ (GInstanceInitFunc) pas_backend_init }; type = g_type_register_static (G_TYPE_OBJECT, "PASBackend", &info, 0); } return type; }