Mercurial > pidgin
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 |