comparison libpurple/protocols/bonjour/buddy.c @ 23092:2a81912c229a

Some fixes from Eion Robb and me to prevent bonjour crashes with the newly available offline buddies. Fixes #5873.
author Daniel Atallah <daniel.atallah@gmail.com>
date Thu, 22 May 2008 21:38:06 +0000
parents d50194ab3016
children fe7504f465a2 16734635febf
comparison
equal deleted inserted replaced
23091:69fbad87f8ae 23092:2a81912c229a
154 if (buddy == NULL) { 154 if (buddy == NULL) {
155 buddy = purple_buddy_new(account, bonjour_buddy->name, NULL); 155 buddy = purple_buddy_new(account, bonjour_buddy->name, NULL);
156 purple_blist_node_set_flags((PurpleBlistNode *)buddy, PURPLE_BLIST_NODE_FLAG_NO_SAVE); 156 purple_blist_node_set_flags((PurpleBlistNode *)buddy, PURPLE_BLIST_NODE_FLAG_NO_SAVE);
157 purple_blist_add_buddy(buddy, NULL, group, NULL); 157 purple_blist_add_buddy(buddy, NULL, group, NULL);
158 } 158 }
159 159
160 buddy->proto_data = bonjour_buddy; 160 buddy->proto_data = bonjour_buddy;
161 161
162 /* Create the alias for the buddy using the first and the last name */ 162 /* Create the alias for the buddy using the first and the last name */
163 if (bonjour_buddy->nick) 163 if (bonjour_buddy->nick)
164 serv_got_alias(purple_account_get_connection(account), buddy->name, bonjour_buddy->nick); 164 serv_got_alias(purple_account_get_connection(account), buddy->name, bonjour_buddy->nick);
165 else { 165 else {
166 gchar *alias = NULL; 166 gchar *alias = NULL;
204 /** 204 /**
205 * The buddy has signed off Bonjour. 205 * The buddy has signed off Bonjour.
206 * If the buddy is being saved, mark as offline, otherwise delete 206 * If the buddy is being saved, mark as offline, otherwise delete
207 */ 207 */
208 void bonjour_buddy_signed_off(PurpleBuddy *pb) { 208 void bonjour_buddy_signed_off(PurpleBuddy *pb) {
209 if (PURPLE_BLIST_NODE_SHOULD_SAVE(pb)) 209 if (PURPLE_BLIST_NODE_SHOULD_SAVE(pb)) {
210 purple_prpl_got_user_status(purple_buddy_get_account(pb), 210 purple_prpl_got_user_status(purple_buddy_get_account(pb),
211 purple_buddy_get_name(pb), "offline", NULL); 211 purple_buddy_get_name(pb), "offline", NULL);
212 else { 212 bonjour_buddy_delete(pb->proto_data);
213 pb->proto_data = NULL;
214 } else {
213 purple_account_remove_buddy(purple_buddy_get_account(pb), pb, NULL); 215 purple_account_remove_buddy(purple_buddy_get_account(pb), pb, NULL);
214 purple_blist_remove_buddy(pb); 216 purple_blist_remove_buddy(pb);
215 } 217 }
216 } 218 }
217 219