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 }