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;