comparison libpurple/protocols/msn/slp.c @ 30877:23be655cc688

propagate from branch 'im.pidgin.cpw.qulogic.msnp16' (head a27b68b2e6653e6b96aa0279bd649181c89b20ed) to branch 'im.pidgin.soc.2010.msn-tlc' (head 20ad1c813e2b512df4a065dda88f3cfa732463a3)
author masca@cpw.pidgin.im
date Wed, 15 Sep 2010 17:34:21 +0000
parents 7b1b7a4e0bb4 6469c68fa093
children c0337902d62a
comparison
equal deleted inserted replaced
30873:4b1eecab50e8 30877:23be655cc688
38 #include "xfer.h" 38 #include "xfer.h"
39 39
40 /* seconds to delay between sending buddy icon requests to the server. */ 40 /* seconds to delay between sending buddy icon requests to the server. */
41 #define BUDDY_ICON_DELAY 20 41 #define BUDDY_ICON_DELAY 20
42 42
43 static void request_user_display(MsnUser *user);
44
45 typedef struct {
46 MsnSession *session;
47 const char *remote_user;
48 const char *sha1;
49 } MsnFetchUserDisplayData;
43 50
44 /************************************************************************** 51 /**************************************************************************
45 * SLP Control 52 * SLP Control
46 **************************************************************************/ 53 **************************************************************************/
47 54
175 userlist->buddy_icon_request_timer = purple_timeout_add_seconds(BUDDY_ICON_DELAY, 182 userlist->buddy_icon_request_timer = purple_timeout_add_seconds(BUDDY_ICON_DELAY,
176 msn_release_buddy_icon_request_timeout, userlist); 183 msn_release_buddy_icon_request_timeout, userlist);
177 } 184 }
178 185
179 static void 186 static void
187 fetched_user_display(PurpleUtilFetchUrlData *url_data, gpointer user_data,
188 const gchar *url_text, gsize len, const gchar *error_message)
189 {
190 MsnFetchUserDisplayData *data = user_data;
191 MsnSession *session = data->session;
192
193 session->url_datas = g_slist_remove(session->url_datas, url_data);
194
195 if (url_text) {
196 purple_buddy_icons_set_for_user(session->account, data->remote_user,
197 g_memdup(url_text, len), len,
198 data->sha1);
199 }
200
201 end_user_display(NULL, session);
202
203 g_free(user_data);
204 }
205
206 static void
180 request_own_user_display(MsnUser *user) 207 request_own_user_display(MsnUser *user)
181 { 208 {
182 PurpleAccount *account; 209 PurpleAccount *account;
183 MsnSession *session; 210 MsnSession *session;
184 MsnObject *my_obj = NULL; 211 MsnObject *my_obj = NULL;
229 obj = msn_user_get_object(user); 256 obj = msn_user_get_object(user);
230 257
231 info = msn_object_get_sha1(obj); 258 info = msn_object_get_sha1(obj);
232 259
233 if (g_ascii_strcasecmp(user->passport, 260 if (g_ascii_strcasecmp(user->passport,
234 purple_account_get_username(account))) 261 purple_account_get_username(account)))
235 msn_slplink_request_object(slplink, info, got_user_display, 262 {
236 end_user_display, obj); 263 const char *url = msn_object_get_url1(obj);
264 if (url) {
265 MsnFetchUserDisplayData *data = g_new0(MsnFetchUserDisplayData, 1);
266 PurpleUtilFetchUrlData *url_data;
267 data->session = session;
268 data->remote_user = user->passport;
269 data->sha1 = info;
270 url_data = purple_util_fetch_url_len(url, TRUE, NULL, TRUE, 200*1024,
271 fetched_user_display, data);
272 session->url_datas = g_slist_prepend(session->url_datas, url_data);
273 } else {
274 msn_slplink_request_object(slplink, info, got_user_display,
275 end_user_display, obj);
276 }
277 }
237 else 278 else
238 request_own_user_display(user); 279 request_own_user_display(user);
239 } 280 }
240 281
241 static void 282 static void