diff options
Diffstat (limited to 'protocols/msn/soap.c')
-rw-r--r-- | protocols/msn/soap.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/protocols/msn/soap.c b/protocols/msn/soap.c index 5d641542..b8762ce1 100644 --- a/protocols/msn/soap.c +++ b/protocols/msn/soap.c @@ -631,6 +631,7 @@ static xt_status msn_soap_addressbook_group( struct xt_node *node, gpointer data struct xt_node *p; char *id = NULL, *name = NULL; struct msn_soap_req_data *soap_req = data; + struct msn_data *md = soap_req->ic->proto_data; if( ( p = xt_find_path( node, "../groupId" ) ) ) id = p->text; @@ -638,6 +639,14 @@ static xt_status msn_soap_addressbook_group( struct xt_node *node, gpointer data if( ( p = xt_find_node( node->children, "name" ) ) ) name = p->text; + if( id && name ) + { + struct msn_group *mg = g_new0( struct msn_group, 1 ); + mg->id = g_strdup( id ); + mg->name = g_strdup( name ); + md->groups = g_slist_prepend( md->groups, mg ); + } + printf( "%s %s\n", id, name ); return XT_HANDLED; @@ -648,9 +657,11 @@ static xt_status msn_soap_addressbook_contact( struct xt_node *node, gpointer da bee_user_t *bu; struct msn_buddy_data *bd; struct xt_node *p; - char *id = NULL, *type = NULL, *handle = NULL, *display_name = NULL; + char *id = NULL, *type = NULL, *handle = NULL, + *display_name = NULL, *group_id = NULL; struct msn_soap_req_data *soap_req = data; struct im_connection *ic = soap_req->ic; + struct msn_group *group; if( ( p = xt_find_path( node, "../contactId" ) ) ) id = p->text; @@ -660,6 +671,8 @@ static xt_status msn_soap_addressbook_contact( struct xt_node *node, gpointer da handle = p->text; if( ( p = xt_find_node( node->children, "displayName" ) ) ) display_name = p->text; + if( ( p = xt_find_path( node, "groupIds/guid" ) ) ) + group_id = p->text; if( type && g_strcasecmp( type, "me" ) == 0 ) { @@ -684,6 +697,9 @@ static xt_status msn_soap_addressbook_contact( struct xt_node *node, gpointer da imcb_rename_buddy( ic, handle, display_name ); + if( group_id && ( group = msn_group_by_id( ic, group_id ) ) ) + imcb_add_buddy( ic, handle, group->name ); + printf( "%s %s %s %s\n", id, type, handle, display_name ); return XT_HANDLED; |