Mercurial > pidgin
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"); |