comparison libpurple/protocols/jabber/roster.c @ 27500:b9da56683499

Operate on the passed-in GSList.
author Paul Aurich <paul@darkrain42.org>
date Wed, 10 Jun 2009 04:42:11 +0000
parents efb40ca43589
children 72cf7e73a869
comparison
equal deleted inserted replaced
27499:efb40ca43589 27500:b9da56683499
263 */ 263 */
264 if (js->state != JABBER_STREAM_CONNECTED) 264 if (js->state != JABBER_STREAM_CONNECTED)
265 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED); 265 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED);
266 } 266 }
267 267
268 /* jabber_roster_update frees the GSList* passed in */
268 static void jabber_roster_update(JabberStream *js, const char *name, 269 static void jabber_roster_update(JabberStream *js, const char *name,
269 GSList *grps) 270 GSList *groups)
270 { 271 {
271 PurpleBuddy *b; 272 PurpleBuddy *b;
272 PurpleGroup *g; 273 PurpleGroup *g;
273 GSList *groups = NULL, *l; 274 GSList *l;
274 JabberIq *iq; 275 JabberIq *iq;
275 xmlnode *query, *item, *group; 276 xmlnode *query, *item, *group;
276 const char *balias; 277 const char *balias;
277 278
278 if (js->currently_parsing_roster_push) 279 if (js->currently_parsing_roster_push)
279 return; 280 return;
280 281
281 if(!(b = purple_find_buddy(js->gc->account, name))) 282 if(!(b = purple_find_buddy(js->gc->account, name)))
282 return; 283 return;
283 284
284 if(grps) { 285 if (groups) {
285 char *tmp = roster_groups_join(groups); 286 char *tmp = roster_groups_join(groups);
286 groups = grps; 287
287 288 purple_debug_info("jabber", "jabber_roster_update(%s): [Source: "
288 purple_debug_info("jabber", "jabber_roster_update(%s): [Source: grps]: groups: %s\n", 289 "groups]: groups: %s\n", name, tmp);
289 name, tmp);
290 g_free(tmp); 290 g_free(tmp);
291 } else { 291 } else {
292 GSList *buddies = purple_find_buddies(js->gc->account, name); 292 GSList *buddies = purple_find_buddies(js->gc->account, name);
293 char *tmp; 293 char *tmp;
294 294
320 for(l = groups; l; l = l->next) { 320 for(l = groups; l; l = l->next) {
321 group = xmlnode_new_child(item, "group"); 321 group = xmlnode_new_child(item, "group");
322 xmlnode_insert_data(group, l->data, -1); 322 xmlnode_insert_data(group, l->data, -1);
323 } 323 }
324 324
325 if(!grps) 325 g_slist_free(groups);
326 g_slist_free(groups);
327 326
328 if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) { 327 if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) {
329 jabber_google_roster_outgoing(js, query, item); 328 jabber_google_roster_outgoing(js, query, item);
330 xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); 329 xmlnode_set_attrib(query, "xmlns:gr", "google:roster");
331 xmlnode_set_attrib(query, "gr:ext", "2"); 330 xmlnode_set_attrib(query, "gr:ext", "2");
412 411
413 purple_debug_info("jabber", "jabber_roster_group_change(): Moving %s from %s to %s\n", 412 purple_debug_info("jabber", "jabber_roster_group_change(): Moving %s from %s to %s\n",
414 name, old_group, new_group); 413 name, old_group, new_group);
415 414
416 jabber_roster_update(gc->proto_data, name, groups); 415 jabber_roster_update(gc->proto_data, name, groups);
417 g_slist_free(groups);
418 } 416 }
419 417
420 void jabber_roster_group_rename(PurpleConnection *gc, const char *old_name, 418 void jabber_roster_group_rename(PurpleConnection *gc, const char *old_name,
421 PurpleGroup *group, GList *moved_buddies) 419 PurpleGroup *group, GList *moved_buddies)
422 { 420 {
448 446
449 purple_debug_info("jabber", "jabber_roster_remove_buddy(): Removing %s from %s\n", 447 purple_debug_info("jabber", "jabber_roster_remove_buddy(): Removing %s from %s\n",
450 purple_buddy_get_name(buddy), purple_group_get_name(group)); 448 purple_buddy_get_name(buddy), purple_group_get_name(group));
451 449
452 jabber_roster_update(gc->proto_data, name, groups); 450 jabber_roster_update(gc->proto_data, name, groups);
453 g_slist_free(groups);
454 } else { 451 } else {
455 JabberIq *iq = jabber_iq_new_query(gc->proto_data, JABBER_IQ_SET, 452 JabberIq *iq = jabber_iq_new_query(gc->proto_data, JABBER_IQ_SET,
456 "jabber:iq:roster"); 453 "jabber:iq:roster");
457 xmlnode *query = xmlnode_get_child(iq->node, "query"); 454 xmlnode *query = xmlnode_get_child(iq->node, "query");
458 xmlnode *item = xmlnode_new_child(query, "item"); 455 xmlnode *item = xmlnode_new_child(query, "item");