Mercurial > pidgin.yaz
comparison libpurple/protocols/gg/buddylist.c @ 27076:1fcd09c34fee
Use purple_find_buddies() instead of iterating the buddy list.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Mon, 01 Jun 2009 04:02:10 +0000 |
parents | a9f5afce8f39 |
children | 818f2845ab47 |
comparison
equal
deleted
inserted
replaced
27075:5ff1d66e6aef | 27076:1fcd09c34fee |
---|---|
38 /* void ggp_buddylist_send(PurpleConnection *gc) {{{ */ | 38 /* void ggp_buddylist_send(PurpleConnection *gc) {{{ */ |
39 void ggp_buddylist_send(PurpleConnection *gc) | 39 void ggp_buddylist_send(PurpleConnection *gc) |
40 { | 40 { |
41 GGPInfo *info = gc->proto_data; | 41 GGPInfo *info = gc->proto_data; |
42 PurpleAccount *account = purple_connection_get_account(gc); | 42 PurpleAccount *account = purple_connection_get_account(gc); |
43 GSList *buddies; | |
44 uin_t *userlist; | |
45 gchar *types; | |
46 int i = 0, ret = 0; | |
47 int size; | |
43 | 48 |
44 PurpleBlistNode *gnode, *cnode, *bnode; | 49 buddies = purple_find_buddies(account, NULL); |
45 PurpleBuddy *buddy; | |
46 uin_t *userlist = NULL; | |
47 gchar *types = NULL; | |
48 int size = 0, ret = 0; | |
49 | 50 |
50 for (gnode = purple_blist_get_root(); | 51 size = g_slist_length(buddies); |
51 gnode != NULL; | 52 userlist = g_new(uin_t, size); |
52 gnode = purple_blist_node_get_sibling_next(gnode)) | 53 types = g_new(gchar, size); |
54 | |
55 for (buddies = purple_find_buddies(account, NULL); buddies; | |
56 buddies = g_slist_delete_link(buddies, buddies), ++i) | |
53 { | 57 { |
54 if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) | 58 PurpleBuddy *buddy = buddies->data; |
55 continue; | 59 const gchar *name = purple_buddy_get_name(buddy); |
56 | 60 |
57 for (cnode = purple_blist_node_get_first_child(gnode); | 61 userlist[i] = ggp_str_to_uin(name); |
58 cnode != NULL; | 62 types[i] = GG_USER_NORMAL; |
59 cnode = purple_blist_node_get_sibling_next(cnode)) | 63 purple_debug_info("gg", "ggp_buddylist_send: adding %d\n", |
60 { | 64 userlist[i]); |
61 if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) | |
62 continue; | |
63 | |
64 for (bnode = purple_blist_node_get_first_child(cnode); | |
65 bnode != NULL; | |
66 bnode = purple_blist_node_get_sibling_next(bnode)) | |
67 { | |
68 const gchar *name = NULL; | |
69 | |
70 if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) | |
71 continue; | |
72 | |
73 buddy = (PurpleBuddy *)bnode; | |
74 | |
75 if (purple_buddy_get_account(buddy) != account) | |
76 continue; | |
77 | |
78 name = purple_buddy_get_name(buddy); | |
79 | |
80 size++; | |
81 userlist = (uin_t *) g_renew(uin_t, userlist, size); | |
82 types = (gchar *) g_renew(gchar, types, size); | |
83 userlist[size - 1] = ggp_str_to_uin(name); | |
84 types[size - 1] = GG_USER_NORMAL; | |
85 purple_debug_info("gg", "ggp_buddylist_send: adding %d\n", | |
86 userlist[size - 1]); | |
87 } | |
88 } | |
89 } | 65 } |
90 | 66 |
91 ret = gg_notify_ex(info->session, userlist, types, size); | 67 ret = gg_notify_ex(info->session, userlist, types, size); |
92 purple_debug_info("gg", "send: ret=%d; size=%d\n", ret, size); | 68 purple_debug_info("gg", "send: ret=%d; size=%d\n", ret, size); |
93 | 69 |
94 if (userlist) { | 70 if (userlist) { |
95 g_free(userlist); | 71 g_free(userlist); |
96 g_free(types); | 72 g_free(types); |
97 } | 73 } |
98 } | 74 } |
179 /* }}} */ | 155 /* }}} */ |
180 | 156 |
181 /* char *ggp_buddylist_dump(PurpleAccount *account) {{{ */ | 157 /* char *ggp_buddylist_dump(PurpleAccount *account) {{{ */ |
182 char *ggp_buddylist_dump(PurpleAccount *account) | 158 char *ggp_buddylist_dump(PurpleAccount *account) |
183 { | 159 { |
184 PurpleBlistNode *gnode, *cnode, *bnode; | 160 GSList *buddies; |
185 PurpleGroup *group; | |
186 PurpleBuddy *buddy; | |
187 GString *buddylist = g_string_sized_new(1024); | 161 GString *buddylist = g_string_sized_new(1024); |
188 char *ptr; | 162 char *ptr; |
189 | 163 |
190 for (gnode = purple_blist_get_root(); | 164 for (buddies = purple_find_buddies(account, NULL); buddies; |
191 gnode != NULL; | 165 buddies = g_slist_delete_link(buddies, buddies)) { |
192 gnode = purple_blist_node_get_sibling_next(gnode)) | 166 PurpleBuddy *buddy = buddies->data; |
193 { | 167 PurpleGroup *group = purple_buddy_get_group(buddy); |
194 if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) | 168 const char *bname = purple_buddy_get_name(buddy); |
195 continue; | 169 const char *gname = purple_group_get_name(group); |
170 const char *alias = purple_buddy_get_alias(buddy); | |
196 | 171 |
197 group = (PurpleGroup *)gnode; | 172 if (alias == NULL) |
173 alias = bname; | |
198 | 174 |
199 for (cnode = purple_blist_node_get_first_child(gnode); | 175 g_string_append_printf(buddylist, |
200 cnode != NULL; | 176 "%s;%s;%s;%s;%s;%s;%s;%s%s\r\n", |
201 cnode = purple_blist_node_get_sibling_next(cnode)) | 177 alias, alias, alias, alias, |
202 { | 178 "", gname, bname, "", ""); |
203 if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) | |
204 continue; | |
205 | |
206 for (bnode = purple_blist_node_get_first_child(cnode); | |
207 bnode != NULL; | |
208 bnode = purple_blist_node_get_sibling_next(bnode)) | |
209 { | |
210 const gchar *name, *alias, *gname; | |
211 | |
212 if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) | |
213 continue; | |
214 | |
215 buddy = (PurpleBuddy *)bnode; | |
216 if (purple_buddy_get_account(buddy) != account) | |
217 continue; | |
218 | |
219 name = purple_buddy_get_name(buddy); | |
220 alias = purple_buddy_get_alias(buddy); | |
221 if(alias == NULL) | |
222 alias = name; | |
223 gname = purple_group_get_name(group); | |
224 | |
225 g_string_append_printf(buddylist, | |
226 "%s;%s;%s;%s;%s;%s;%s;%s%s\r\n", | |
227 alias, alias, alias, alias, | |
228 "", gname, name, "", ""); | |
229 } | |
230 } | |
231 } | 179 } |
232 | 180 |
233 ptr = charset_convert(buddylist->str, "UTF-8", "CP1250"); | 181 ptr = charset_convert(buddylist->str, "UTF-8", "CP1250"); |
234 g_string_free(buddylist, TRUE); | 182 g_string_free(buddylist, TRUE); |
235 return ptr; | 183 return ptr; |