Mercurial > pidgin
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 |