aboutsummaryrefslogblamecommitdiffstats
path: root/addressbook/backend/pas/pas-backend.c
blob: 6d64ba938bf6c4b5c74211479195662105cc0c40 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                           
  
          
                                  
  
                               

   
                   
                        
                        
 








                                              

                                           
 
                    

 
                                                   
                                                      
                                                  
 


                                                               
 
                                                                     
 
                                                                            















                                                              
                                                                    
 
                                                                      



                          





                                                                     
   
        
                                                        
                                                                           
 


                                                                   
 
                                                                       
 
                                                                               

 
    

                                               
 




                                                    
                                                                          
 
                                                                       

 





                                                              
                                                                                    
 
                                                                                  

 













                                                                         
                                                                                

 


                                      




                                               
                                   
 
                                              



                                              








                                                                                  




                        
     

                           
                              

                     
                                  
                                                 







                                                                 

                  
                                                                                      



                    
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
 * Author:
 *   Nat Friedman (nat@ximian.com)
 *
 * Copyright 2000, Ximian, Inc.
 */

#include <config.h>
#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;
}