[evolution-mapi] BUGFIX #589999: EDS crashed:clicked on new contact
- From: Bharath Acharya <abharath src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution-mapi] BUGFIX #589999: EDS crashed:clicked on new contact
- Date: Fri, 21 Aug 2009 05:59:55 +0000 (UTC)
commit 3386a5e97596932157094ee092b90d053ea667b2
Author: Bharath Acharya <abharath novell com>
Date: Fri Aug 21 11:26:53 2009 +0530
BUGFIX #589999: EDS crashed:clicked on new contact
Implemented the APIs for this. Set the permissions on GAL factory
src/addressbook/e-book-backend-mapi-gal.c | 103 +++++++++++++++++++++++++++-
1 files changed, 99 insertions(+), 4 deletions(-)
---
diff --git a/src/addressbook/e-book-backend-mapi-gal.c b/src/addressbook/e-book-backend-mapi-gal.c
index c177134..5f0406f 100644
--- a/src/addressbook/e-book-backend-mapi-gal.c
+++ b/src/addressbook/e-book-backend-mapi-gal.c
@@ -23,6 +23,7 @@
static EBookBackendClass *e_book_backend_mapi_gal_parent_class;
static gboolean enable_debug = TRUE;
+static GList *supported_fields;
#define ELEMENT_TYPE_SIMPLE 0x01
#define ELEMENT_TYPE_COMPLEX 0x02
@@ -88,7 +89,7 @@ static const struct field_element_mapping {
// { E_CONTACT_CATEGORIES, },
};
-/* static int maplen = G_N_ELEMENTS(mappings); */
+static int maplen = G_N_ELEMENTS(mappings);
struct _EBookBackendMAPIGALPrivate
{
@@ -181,6 +182,32 @@ build_cache (EBookBackendMAPIGAL *ebmapi)
return NULL;
}
+static void
+e_book_backend_mapi_gal_get_supported_fields (EBookBackend *backend,
+ EDataBook *book,
+ guint32 opid)
+
+{
+ e_data_book_respond_get_supported_fields (book,
+ opid,
+ GNOME_Evolution_Addressbook_Success,
+ supported_fields);
+}
+
+static void
+e_book_backend_mapi_gal_get_required_fields (EBookBackend *backend,
+ EDataBook *book,
+ guint32 opid)
+{
+ GList *fields = NULL;
+
+ fields = g_list_append (fields, (gchar *) e_contact_field_name (E_CONTACT_FILE_AS));
+ e_data_book_respond_get_required_fields (book,
+ opid,
+ GNOME_Evolution_Addressbook_Success,
+ fields);
+ g_list_free (fields);
+}
static void
e_book_backend_mapi_gal_authenticate_user (EBookBackend *backend,
@@ -200,6 +227,7 @@ e_book_backend_mapi_gal_authenticate_user (EBookBackend *backend,
switch (priv->mode) {
case GNOME_Evolution_Addressbook_MODE_LOCAL:
e_book_backend_notify_writable (backend, FALSE);
+ e_book_backend_set_is_writable (E_BOOK_BACKEND(backend), FALSE);
e_book_backend_notify_connection_status (backend, FALSE);
e_data_book_respond_authenticate_user (book, opid, GNOME_Evolution_Addressbook_Success);
return;
@@ -218,7 +246,7 @@ e_book_backend_mapi_gal_authenticate_user (EBookBackend *backend,
printf("Preparing to build cache\n");
g_thread_create ((GThreadFunc) build_cache, backend, FALSE, NULL);
}
- e_book_backend_set_is_writable (backend, TRUE);
+ e_book_backend_set_is_writable (backend, FALSE);
e_data_book_respond_authenticate_user (book, opid, GNOME_Evolution_Addressbook_Success);
return;
@@ -253,6 +281,39 @@ get_filename_from_uri (const char *uri, const char *file)
return filename;
}
+static void
+e_book_backend_mapi_gal_create_contact (EBookBackend *backend,
+ EDataBook *book,
+ guint32 opid,
+ const gchar *vcard)
+{
+ e_data_book_respond_create (book, opid,
+ GNOME_Evolution_Addressbook_PermissionDenied,
+ NULL);
+}
+
+static void
+e_book_backend_mapi_gal_remove_contacts (EBookBackend *backend,
+ EDataBook *book,
+ guint32 opid,
+ GList *ids)
+{
+ e_data_book_respond_remove_contacts (book, opid,
+ GNOME_Evolution_Addressbook_PermissionDenied,
+ NULL);
+}
+
+static void
+e_book_backend_mapi_gal_modify_contact (EBookBackend *backend,
+ EDataBook *book,
+ guint32 opid,
+ const gchar *vcard)
+{
+ e_data_book_respond_modify (book, opid,
+ GNOME_Evolution_Addressbook_PermissionDenied,
+ NULL);
+}
+
static GNOME_Evolution_Addressbook_CallStatus
e_book_backend_mapi_gal_load_source (EBookBackend *backend,
ESource *source,
@@ -312,7 +373,7 @@ e_book_backend_mapi_gal_load_source (EBookBackend *backend,
g_free (uri);
e_book_backend_set_is_loaded (E_BOOK_BACKEND (backend), TRUE);
- e_book_backend_set_is_writable (backend, TRUE);
+ e_book_backend_set_is_writable (backend, FALSE);
if (priv->mode == GNOME_Evolution_Addressbook_MODE_LOCAL) {
e_book_backend_set_is_writable (backend, FALSE);
e_book_backend_notify_writable (backend, FALSE);
@@ -358,11 +419,13 @@ e_book_backend_mapi_gal_set_mode (EBookBackend *backend, int mode)
if (e_book_backend_is_loaded (backend)) {
if (mode == GNOME_Evolution_Addressbook_MODE_LOCAL) {
e_book_backend_notify_writable (backend, FALSE);
+ e_book_backend_set_is_writable (backend, FALSE);
e_book_backend_notify_connection_status (backend, FALSE);
/* FIXME: Uninitialize mapi here. may be.*/
}
else if (mode == GNOME_Evolution_Addressbook_MODE_REMOTE) {
- e_book_backend_notify_writable (backend, TRUE);
+ e_book_backend_notify_writable (backend, FALSE);
+ e_book_backend_set_is_writable (backend, FALSE);
e_book_backend_notify_connection_status (backend, TRUE);
// e_book_backend_notify_auth_required (backend); //FIXME: WTH is this required.
}
@@ -725,6 +788,23 @@ init_closure (EDataBookView *book_view, EBookBackendMAPIGAL *bg)
return closure;
}
+static void
+e_book_backend_mapi_gal_get_contact_list (EBookBackend *backend,
+ EDataBook *book,
+ guint32 opid,
+ const char *query )
+{
+ EBookBackendMAPIGALPrivate *priv = ((EBookBackendMAPIGAL *) backend)->priv;
+
+ if(enable_debug)
+ printf("mapi: get contact list %s\n", query);
+
+ e_data_book_respond_get_contact_list (book, opid, GNOME_Evolution_Addressbook_RepositoryOffline,
+ NULL);
+
+ return;
+}
+
static void
e_book_backend_mapi_gal_start_book_view (EBookBackend *backend,
@@ -753,20 +833,35 @@ static void e_book_backend_mapi_gal_class_init (EBookBackendMAPIGALClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
EBookBackendClass *parent_class;
+ gint i;
e_book_backend_mapi_gal_parent_class = g_type_class_peek_parent (klass);
parent_class = E_BOOK_BACKEND_CLASS (klass);
/* Set the virtual methods. */
+ parent_class->create_contact = e_book_backend_mapi_gal_create_contact;
+ parent_class->remove_contacts = e_book_backend_mapi_gal_remove_contacts;
+ parent_class->modify_contact = e_book_backend_mapi_gal_modify_contact;
parent_class->load_source = e_book_backend_mapi_gal_load_source;
parent_class->get_static_capabilities = e_book_backend_mapi_gal_get_static_capabilities;
+ parent_class->get_contact_list = e_book_backend_mapi_gal_get_contact_list;
parent_class->start_book_view = e_book_backend_mapi_gal_start_book_view;
parent_class->stop_book_view = e_book_backend_mapi_gal_stop_book_view;
parent_class->authenticate_user = e_book_backend_mapi_gal_authenticate_user;
+ parent_class->get_supported_fields = e_book_backend_mapi_gal_get_supported_fields;
+ parent_class->get_required_fields = e_book_backend_mapi_gal_get_required_fields;
parent_class->set_mode = e_book_backend_mapi_gal_set_mode;
object_class->dispose = e_book_backend_mapi_gal_dispose;
+
+
+ supported_fields = NULL;
+ for (i = 0; i < maplen; i++) {
+ supported_fields = g_list_append (supported_fields,
+ (gchar *)e_contact_field_name (mappings[i].mapi_id));
+ }
+ supported_fields = g_list_append (supported_fields, (gpointer) "file_as");
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]