summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSivaiah Nallagatla <snallagatla@novell.com>2004-04-11 12:35:30 +0000
committerSivaiah Nallagatla <siva@src.gnome.org>2004-04-11 12:35:30 +0000
commit305758091d68d23c5371df45f7401e066f8bf42c (patch)
tree35f09f097f4085bff00e55e8cb1d10768f5ae4a6
parent792b68d24578b8afeb8d62db5caff3ebb6c5e539 (diff)
downloadevolution-data-server-305758091d68d23c5371df45f7401e066f8bf42c.tar.gz
retrieve the book name form uri instead of e-source
2004-04-10 Sivaiah Nallagatla <snallagatla@novell.com> * backends/groupwise/e-book-backend-groupwise.c (e_book_backend_groupwise_load_source) : retrieve the book name form uri instead of e-source (set_members_in_gw_item) : new function to set the ids of contact-list members into e-gw-item
-rw-r--r--addressbook/ChangeLog8
-rw-r--r--addressbook/backends/groupwise/e-book-backend-groupwise.c70
2 files changed, 66 insertions, 12 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 7b39ebc77..df46eded0 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,11 @@
+2004-04-10 Sivaiah Nallagatla <snallagatla@novell.com>
+
+ * backends/groupwise/e-book-backend-groupwise.c
+ (e_book_backend_groupwise_load_source) : retrieve the book name form uri instead
+ of e-source
+ (set_members_in_gw_item) : new function to set the ids of contact-list members into
+ e-gw-item
+
2004-04-07 Chris Toshok <toshok@ximian.com>
* libebook/e-vcard.h: reorder the EVC_X #defines a bit, and add in
diff --git a/addressbook/backends/groupwise/e-book-backend-groupwise.c b/addressbook/backends/groupwise/e-book-backend-groupwise.c
index 0fdf99cdc..a554eb560 100644
--- a/addressbook/backends/groupwise/e-book-backend-groupwise.c
+++ b/addressbook/backends/groupwise/e-book-backend-groupwise.c
@@ -48,7 +48,6 @@ static void populate_full_name (EContact *contact, gpointer data);
static void set_full_name_in_gw_item (EGwItem *item, gpointer data);
static void set_full_name_changes (EGwItem *new_item, EGwItem *old_item);
static void populate_contact_members (EContact *contact, gpointer data);
-static void set_members_in_gw_item (EGwItem *item, gpointer data);
static void set_members_changes (EGwItem *new_item, EGwItem *old_item);
static void set_categories_changes (EGwItem *new_item, EGwItem *old_item);
static void populate_birth_date (EContact *contact, gpointer data);
@@ -87,7 +86,7 @@ struct field_element_mapping {
{ E_CONTACT_ORG, ELEMENT_TYPE_SIMPLE, "organization"},
{ E_CONTACT_ORG_UNIT, ELEMENT_TYPE_SIMPLE, "department"},
{ E_CONTACT_TITLE, ELEMENT_TYPE_SIMPLE, "title"},
- { E_CONTACT_EMAIL, ELEMENT_TYPE_COMPLEX, "members", populate_contact_members, set_members_in_gw_item, set_members_changes},
+ { E_CONTACT_EMAIL, ELEMENT_TYPE_COMPLEX, "members", populate_contact_members, NULL, set_members_changes},
{ E_CONTACT_ADDRESS_HOME, ELEMENT_TYPE_COMPLEX, "Home", populate_address, set_address_in_gw_item, set_address_changes },
{ E_CONTACT_IM_AIM, ELEMENT_TYPE_COMPLEX, "ims", populate_ims, set_ims_in_gw_item, set_im_changes },
{ E_CONTACT_CATEGORIES, ELEMENT_TYPE_COMPLEX, "categories", NULL, NULL, set_categories_changes},
@@ -630,23 +629,56 @@ set_full_name_changes (EGwItem *new_item, EGwItem *old_item)
}
+
static void
populate_contact_members (EContact *contact, gpointer data)
{
EGwItem *item;
+ GList *member_list;
item = E_GW_ITEM(data);
- e_contact_set (contact, E_CONTACT_EMAIL, e_gw_item_get_member_list(item));
+ member_list = e_gw_item_get_member_list (item);
+ e_contact_set (contact, E_CONTACT_EMAIL, member_list );
+
+
}
+
static void
-set_members_in_gw_item (EGwItem *item, gpointer data)
+set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise *egwb)
+
{
-
- EContact *contact;
- contact = E_CONTACT (data);
- GList* members ;
+ GList* members, *temp, *items;
+ GList *ids;
+ char *email;
+ EGwFilter *filter;
+ int status;
+ char *id;
+ EGwItem *temp_item;
+ int count = 0;
+
members = e_contact_get (contact, E_CONTACT_EMAIL);
- e_gw_item_set_member_list (item, members);
+ temp = members;
+ filter = e_gw_filter_new ();
+ for ( ;temp != NULL; temp = g_list_next (temp)) {
+ email = temp->data;
+ if (email) {
+ e_gw_filter_add_filter_component (filter, E_GW_FILTER_OP_EQUAL, "emailList/email", email);
+ count++;
+ }
+ g_free (email);
+ }
+ e_gw_filter_group_conditions (filter, E_GW_FILTER_OP_OR, count);
+ items = NULL;
+ ids = NULL;
+ status = e_gw_connection_get_items (egwb->priv->cnc, egwb->priv->container_id, NULL, filter, &items);
+ for (; items != NULL; items = g_list_next (items )) {
+ temp_item = E_GW_ITEM (items->data);
+ id = g_strdup (e_gw_item_get_id (temp_item));
+ ids = g_list_append (ids, id);
+ g_object_unref (temp_item);
+ }
+ g_list_free (items);
+ e_gw_item_set_member_list (item, ids);
}
@@ -654,8 +686,11 @@ static void
set_members_changes (EGwItem *new_item, EGwItem *old_item)
{
+
}
+
+
static void
set_categories_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise *egwb)
{
@@ -810,6 +845,8 @@ e_book_backend_groupwise_create_contact (EBookBackend *backend,
} else if (element_type == ELEMENT_TYPE_COMPLEX) {
if (mappings[i].field_id == E_CONTACT_CATEGORIES)
set_categories_in_gw_item (item, contact, egwb);
+ else if ( mappings[i].field_id == E_CONTACT_EMAIL)
+ set_members_in_gw_item (item, contact, egwb);
else
mappings[i].set_value_in_gw_item (item, contact);
}
@@ -926,8 +963,11 @@ e_book_backend_groupwise_modify_contact (EBookBackend *backend,
} else if (element_type == ELEMENT_TYPE_COMPLEX) {
if (mappings[i].field_id == E_CONTACT_CATEGORIES)
set_categories_in_gw_item (new_item, contact, egwb);
+ else if (mappings[i].field_id == E_CONTACT_EMAIL)
+ set_members_in_gw_item (new_item, contact, egwb);
else
mappings[i].set_value_in_gw_item (new_item, contact);
+
}
}
@@ -1479,6 +1519,7 @@ e_book_backend_groupwise_authenticate_user (EBookBackend *backend,
if (status == E_GW_CONNECTION_STATUS_OK) {
if ( (id == NULL) && !priv->only_if_exists ) {
status = e_gw_connection_create_book (priv->cnc, priv->book_name, &id);
+ is_writable = TRUE;
if (status != E_GW_CONNECTION_STATUS_OK ) {
e_data_book_respond_authenticate_user (book, GNOME_Evolution_Addressbook_OtherError);
return;
@@ -1536,18 +1577,23 @@ e_book_backend_groupwise_load_source (EBookBackend *backend,
EBookBackendGroupwisePrivate *priv;
const char *book_name;
const char *uri;
-
+ char **tokens;
ebgw = E_BOOK_BACKEND_GROUPWISE (backend);
priv = ebgw->priv;
uri = e_source_get_uri (source);
if(uri == NULL)
return GNOME_Evolution_Addressbook_OtherError;
+ tokens = g_strsplit (uri, "?", 2);
+ if (tokens[0])
+ uri = g_strdup (tokens[0]);
+
priv->uri = g_strconcat ("http://", uri +12, NULL );
priv->only_if_exists = only_if_exists;
- book_name = e_source_peek_name(source);
+ book_name = g_strdup (tokens[1]);
+ g_strfreev (tokens);
if(book_name == NULL)
return GNOME_Evolution_Addressbook_OtherError;
- priv->book_name = g_strdup (book_name);
+ priv->book_name = book_name;
e_book_backend_set_is_loaded (E_BOOK_BACKEND (backend), TRUE);
e_book_backend_set_is_writable (E_BOOK_BACKEND(backend), FALSE);
return GNOME_Evolution_Addressbook_Success;