Mercurial > pidgin.yaz
comparison src/protocols/bonjour/bonjour.c @ 11691:739d6376dec2
[gaim-migrate @ 13977]
Correctly remove Bonjour buddies from the local list.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 18 Oct 2005 00:01:22 +0000 |
parents | 5a2c38d33eb4 |
children | b91a84e7cbcb |
comparison
equal
deleted
inserted
replaced
11690:872932089400 | 11691:739d6376dec2 |
---|---|
30 #include "bonjour.h" | 30 #include "bonjour.h" |
31 #include "dns_sd.h" | 31 #include "dns_sd.h" |
32 #include "jabber.h" | 32 #include "jabber.h" |
33 #include "buddy.h" | 33 #include "buddy.h" |
34 | 34 |
35 static void | |
36 bonjour_removeallfromlocal(GaimConnection *gc) | |
37 { | |
38 GaimAccount *account = gaim_connection_get_account(gc); | |
39 GaimBuddyList *blist; | |
40 GaimBlistNode *gnode, *cnode, *bnode; | |
41 GaimBuddy *buddy; | |
42 | |
43 blist = gaim_get_blist(); | |
44 if (blist == NULL) | |
45 return; | |
46 | |
47 /* Go through and remove all buddies that belong to this account */ | |
48 for (gnode = blist->root; gnode; gnode = gnode->next) | |
49 { | |
50 if (!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
51 continue; | |
52 for (cnode = gnode->child; cnode; cnode = cnode->next) | |
53 { | |
54 if (!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
55 continue; | |
56 for (bnode = cnode->child; bnode; bnode = bnode->next) | |
57 { | |
58 if (!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
59 continue; | |
60 buddy = (GaimBuddy *)bnode; | |
61 if (buddy->account != account) | |
62 continue; | |
63 gaim_prpl_got_user_status(account, buddy->name, "offline", NULL); | |
64 gaim_blist_remove_buddy(buddy); | |
65 } | |
66 } | |
67 } | |
68 } | |
69 | |
35 void | 70 void |
36 bonjour_login(GaimAccount *account, GaimStatus *status) | 71 bonjour_login(GaimAccount *account, GaimStatus *status) |
37 { | 72 { |
38 GaimConnection *gc = gaim_account_get_connection(account); | 73 GaimConnection *gc = gaim_account_get_connection(account); |
39 GaimGroup *bonjour_group = NULL; | 74 GaimGroup *bonjour_group = NULL; |
88 | 123 |
89 void | 124 void |
90 bonjour_close(GaimConnection *connection) | 125 bonjour_close(GaimConnection *connection) |
91 { | 126 { |
92 GaimGroup *bonjour_group = gaim_find_group(BONJOUR_GROUP_NAME); | 127 GaimGroup *bonjour_group = gaim_find_group(BONJOUR_GROUP_NAME); |
93 GSList *buddies; | |
94 GSList *l; | |
95 BonjourData *bd = (BonjourData*)connection->proto_data; | 128 BonjourData *bd = (BonjourData*)connection->proto_data; |
96 | 129 |
97 // Stop looking for buddies in the LAN | 130 // Stop looking for buddies in the LAN |
98 if (connection != NULL) { | 131 if (connection != NULL) { |
99 bonjour_dns_sd_stop(bd->dns_sd_data); | 132 bonjour_dns_sd_stop(bd->dns_sd_data); |
105 // Stop waiting for conversations | 138 // Stop waiting for conversations |
106 bonjour_jabber_stop(bd->jabber_data); | 139 bonjour_jabber_stop(bd->jabber_data); |
107 g_free(bd->jabber_data); | 140 g_free(bd->jabber_data); |
108 | 141 |
109 // Remove all the bonjour buddies | 142 // Remove all the bonjour buddies |
110 if(connection != NULL){ | 143 bonjour_removeallfromlocal(connection); |
111 buddies = gaim_find_buddies(connection->account, connection->account->username); | |
112 for(l = buddies; l; l = l->next){ | |
113 bonjour_buddy_delete(((GaimBuddy*)(l->data))->proto_data); | |
114 gaim_blist_remove_buddy(l->data); | |
115 } | |
116 g_slist_free(buddies); | |
117 } | |
118 | 144 |
119 // Delete the bonjour group | 145 // Delete the bonjour group |
120 gaim_blist_remove_group(bonjour_group); | 146 gaim_blist_remove_group(bonjour_group); |
121 | 147 |
122 } | 148 } |