1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* An abstract class which defines the API to a given backend.
* There will be one PASBackend object for every URI which is loaded.
*
* Two people will call into the PASBackend API:
*
* 1. The PASBookFactory, when it has been asked to load a book.
* It will create a new PASBackend if one is not already running
* for the requested URI. It will call pas_backend_add_client to
* add a new client to an existing PASBackend server.
*
* 2. A PASBook, when a client has requested an operation on the
* GNOME_Evolution_Addressbook_Book interface.
*
* Author:
* Nat Friedman (nat@ximian.com)
*
* Copyright 2000, Ximian, Inc.
*/
#ifndef __PAS_BACKEND_H__
#define __PAS_BACKEND_H__
#include <glib.h>
#include <glib-object.h>
#include <pas/addressbook.h>
#include <pas/pas-types.h>
#include <ebook/e-contact.h>
#define PAS_TYPE_BACKEND (pas_backend_get_type ())
#define PAS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PAS_TYPE_BACKEND, PASBackend))
#define PAS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), PAS_TYPE_BACKEND, PASBackendClass))
#define PAS_IS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAS_TYPE_BACKEND))
#define PAS_IS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PAS_TYPE_BACKEND))
#define PAS_BACKEND_GET_CLASS(k) (G_TYPE_INSTANCE_GET_CLASS ((k), PAS_TYPE_BACKEND, PASBackendClass))
typedef struct _PASBackendPrivate PASBackendPrivate;
#include <pas/pas-book.h>
struct _PASBackend {
GObject parent_object;
PASBackendPrivate *priv;
};
struct _PASBackendClass {
GObjectClass parent_class;
/* Virtual methods */
GNOME_Evolution_Addressbook_CallStatus (*load_uri) (PASBackend *backend, const char *uri, gboolean only_if_exists);
void (*remove) (PASBackend *backend, PASBook *book);
char *(*get_static_capabilities) (PASBackend *backend);
void (*create_contact) (PASBackend *backend, PASBook *book, const char *vcard);
void (*remove_contacts) (PASBackend *backend, PASBook *book, GList *id_list);
void (*modify_contact) (PASBackend *backend, PASBook *book, const char *vcard);
void (*get_contact) (PASBackend *backend, PASBook *book, const char *id);
void (*get_contact_list) (PASBackend *backend, PASBook *book, const char *query);
void (*start_book_view) (PASBackend *backend, PASBookView *book_view);
void (*get_changes) (PASBackend *backend, PASBook *book, const char *change_id);
void (*authenticate_user) (PASBackend *backend, PASBook *book, const char *user, const char *passwd, const char *auth_method);
void (*get_supported_fields) (PASBackend *backend, PASBook *book);
void (*get_supported_auth_methods) (PASBackend *backend, PASBook *book);
GNOME_Evolution_Addressbook_CallStatus (*cancel_operation) (PASBackend *backend, PASBook *book);
/* Notification signals */
void (* last_client_gone) (PASBackend *backend);
/* Padding for future expansion */
void (*_pas_reserved0) (void);
void (*_pas_reserved1) (void);
void (*_pas_reserved2) (void);
void (*_pas_reserved3) (void);
void (*_pas_reserved4) (void);
};
typedef PASBackend * (*PASBackendFactoryFn) (void);
gboolean pas_backend_construct (PASBackend *backend);
GNOME_Evolution_Addressbook_CallStatus
pas_backend_load_uri (PASBackend *backend,
const char *uri,
gboolean only_if_exists);
const char *pas_backend_get_uri (PASBackend *backend);
gboolean pas_backend_add_client (PASBackend *backend,
PASBook *book);
void pas_backend_remove_client (PASBackend *backend,
PASBook *book);
char *pas_backend_get_static_capabilities (PASBackend *backend);
gboolean pas_backend_is_loaded (PASBackend *backend);
gboolean pas_backend_is_writable (PASBackend *backend);
gboolean pas_backend_is_removed (PASBackend *backend);
void pas_backend_open (PASBackend *backend,
PASBook *book,
gboolean only_if_exists);
void pas_backend_remove (PASBackend *backend,
PASBook *book);
void pas_backend_create_contact (PASBackend *backend,
PASBook *book,
const char *vcard);
void pas_backend_remove_contacts (PASBackend *backend,
PASBook *book,
GList *id_list);
void pas_backend_modify_contact (PASBackend *backend,
PASBook *book,
const char *vcard);
void pas_backend_get_contact (PASBackend *backend,
PASBook *book,
const char *id);
void pas_backend_get_contact_list (PASBackend *backend,
PASBook *book,
const char *query);
void pas_backend_get_changes (PASBackend *backend,
PASBook *book,
const char *change_id);
void pas_backend_authenticate_user (PASBackend *backend,
PASBook *book,
const char *user,
const char *passwd,
const char *auth_method);
void pas_backend_get_supported_fields (PASBackend *backend,
PASBook *book);
void pas_backend_get_supported_auth_methods (PASBackend *backend,
PASBook *book);
GNOME_Evolution_Addressbook_CallStatus pas_backend_cancel_operation (PASBackend *backend,
PASBook *book);
void pas_backend_start_book_view (PASBackend *backend,
PASBookView *view);
void pas_backend_add_book_view (PASBackend *backend,
PASBookView *view);
EList *pas_backend_get_book_views (PASBackend *backend);
void pas_backend_notify_update (PASBackend *backend,
EContact *contact);
void pas_backend_notify_remove (PASBackend *backend,
const char *id);
void pas_backend_notify_complete (PASBackend *backend);
GType pas_backend_get_type (void);
/* protected functions for subclasses */
void pas_backend_set_is_loaded (PASBackend *backend,
gboolean is_loaded);
void pas_backend_set_is_writable (PASBackend *backend,
gboolean is_writable);
void pas_backend_set_is_removed (PASBackend *backend,
gboolean is_removed);
/* useful for implementing _get_changes in backends */
GNOME_Evolution_Addressbook_BookChangeItem* pas_backend_change_add_new (const char *vcard);
GNOME_Evolution_Addressbook_BookChangeItem* pas_backend_change_modify_new (const char *vcard);
GNOME_Evolution_Addressbook_BookChangeItem* pas_backend_change_delete_new (const char *id);
#endif /* ! __PAS_BACKEND_H__ */
|