Mercurial > pidgin
comparison libpurple/protocols/msn/msn.c @ 30730:f8ec889c5bce
propagate from branch 'im.pidgin.pidgin' (head f6cdf8776559775f9a4a72563e69741e139518bd)
to branch 'im.pidgin.cpw.qulogic.msnp16' (head ee6655c65ffae7f61734aa5a05267a3f5a4fc0de)
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Mon, 10 May 2010 23:21:44 +0000 |
parents | 2a5dbea6ab6b ec89b1d8571a |
children | 66e7fe9f7810 |
comparison
equal
deleted
inserted
replaced
30729:edb7c80bf930 | 30730:f8ec889c5bce |
---|---|
192 purple_prpl_send_attention(gc, username, MSN_NUDGE); | 192 purple_prpl_send_attention(gc, username, MSN_NUDGE); |
193 | 193 |
194 return PURPLE_CMD_RET_OK; | 194 return PURPLE_CMD_RET_OK; |
195 } | 195 } |
196 | 196 |
197 struct public_alias_closure | |
198 { | |
199 PurpleAccount *account; | |
200 gpointer success_cb; | |
201 gpointer failure_cb; | |
202 }; | |
203 | |
204 static gboolean | |
205 set_public_alias_length_error(gpointer data) | |
206 { | |
207 struct public_alias_closure *closure = data; | |
208 PurpleSetPublicAliasFailureCallback failure_cb = closure->failure_cb; | |
209 | |
210 failure_cb(closure->account, _("Your new MSN friendly name is too long.")); | |
211 g_free(closure); | |
212 | |
213 return FALSE; | |
214 } | |
215 | |
216 static void | |
217 prp_success_cb(MsnCmdProc *cmdproc, MsnCommand *cmd) | |
218 { | |
219 const char *type, *friendlyname; | |
220 struct public_alias_closure *closure; | |
221 | |
222 g_return_if_fail(cmd->param_count >= 3); | |
223 type = cmd->params[1]; | |
224 g_return_if_fail(!strcmp(type, "MFN")); | |
225 | |
226 closure = cmd->trans->data; | |
227 friendlyname = purple_url_decode(cmd->params[2]); | |
228 | |
229 msn_update_contact(cmdproc->session, "Me", MSN_UPDATE_DISPLAY, friendlyname); | |
230 | |
231 purple_connection_set_display_name( | |
232 purple_account_get_connection(closure->account), | |
233 friendlyname); | |
234 purple_account_set_string(closure->account, "display-name", friendlyname); | |
235 | |
236 if (closure->success_cb) { | |
237 PurpleSetPublicAliasSuccessCallback success_cb = closure->success_cb; | |
238 success_cb(closure->account, friendlyname); | |
239 } | |
240 } | |
241 | |
242 static void | |
243 prp_error_cb(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | |
244 { | |
245 struct public_alias_closure *closure = trans->data; | |
246 PurpleSetPublicAliasFailureCallback failure_cb = closure->failure_cb; | |
247 gboolean debug; | |
248 const char *error_text; | |
249 | |
250 error_text = msn_error_get_text(error, &debug); | |
251 failure_cb(closure->account, error_text); | |
252 } | |
253 | |
254 static void | |
255 prp_timeout_cb(MsnCmdProc *cmdproc, MsnTransaction *trans) | |
256 { | |
257 struct public_alias_closure *closure = trans->data; | |
258 PurpleSetPublicAliasFailureCallback failure_cb = closure->failure_cb; | |
259 failure_cb(closure->account, _("Connection Timeout")); | |
260 } | |
261 | |
197 void | 262 void |
198 msn_act_id(PurpleConnection *gc, const char *entry) | 263 msn_set_public_alias(PurpleConnection *pc, const char *alias, |
264 PurpleSetPublicAliasSuccessCallback success_cb, | |
265 PurpleSetPublicAliasFailureCallback failure_cb) | |
199 { | 266 { |
200 MsnCmdProc *cmdproc; | 267 MsnCmdProc *cmdproc; |
201 MsnSession *session; | 268 MsnSession *session; |
202 MsnTransaction *trans; | 269 MsnTransaction *trans; |
203 PurpleAccount *account; | 270 PurpleAccount *account; |
271 const char *real_alias; | |
272 struct public_alias_closure *closure; | |
273 | |
274 session = purple_connection_get_protocol_data(pc); | |
275 cmdproc = session->notification->cmdproc; | |
276 account = purple_connection_get_account(pc); | |
277 | |
278 if (alias && *alias) | |
279 { | |
280 char *tmp = g_strdup(alias); | |
281 real_alias = purple_url_encode(g_strstrip(tmp)); | |
282 g_free(tmp); | |
283 } | |
284 else | |
285 real_alias = ""; | |
286 | |
287 if (strlen(real_alias) > BUDDY_ALIAS_MAXLEN) | |
288 { | |
289 if (failure_cb) { | |
290 struct public_alias_closure *closure = | |
291 g_new0(struct public_alias_closure, 1); | |
292 closure->account = account; | |
293 closure->failure_cb = failure_cb; | |
294 purple_timeout_add(0, set_public_alias_length_error, closure); | |
295 } else { | |
296 purple_notify_error(pc, NULL, | |
297 _("Your new MSN friendly name is too long."), | |
298 NULL); | |
299 } | |
300 return; | |
301 } | |
302 | |
303 if (*real_alias == '\0') { | |
304 real_alias = purple_url_encode(purple_account_get_username(account)); | |
305 } | |
306 | |
307 closure = g_new0(struct public_alias_closure, 1); | |
308 closure->account = account; | |
309 closure->success_cb = success_cb; | |
310 closure->failure_cb = failure_cb; | |
311 | |
312 trans = msn_transaction_new(cmdproc, "PRP", "MFN %s", real_alias); | |
313 msn_transaction_set_data(trans, closure); | |
314 msn_transaction_set_data_free(trans, g_free); | |
315 msn_transaction_add_cb(trans, "PRP", prp_success_cb); | |
316 if (failure_cb) { | |
317 msn_transaction_set_error_cb(trans, prp_error_cb); | |
318 msn_transaction_set_timeout_cb(trans, prp_timeout_cb); | |
319 } | |
320 msn_cmdproc_send_trans(cmdproc, trans); | |
321 } | |
322 | |
323 static gboolean | |
324 get_public_alias_cb(gpointer data) | |
325 { | |
326 struct public_alias_closure *closure = data; | |
327 PurpleGetPublicAliasSuccessCallback success_cb = closure->success_cb; | |
204 const char *alias; | 328 const char *alias; |
205 | 329 |
206 session = gc->proto_data; | 330 alias = purple_account_get_string(closure->account, "display-name", |
207 cmdproc = session->notification->cmdproc; | 331 purple_account_get_username(closure->account)); |
208 account = purple_connection_get_account(gc); | 332 success_cb(closure->account, alias); |
209 | 333 g_free(closure); |
210 if (entry && *entry) | 334 |
211 { | 335 return FALSE; |
212 char *tmp = g_strdup(entry); | 336 } |
213 alias = purple_url_encode(g_strstrip(tmp)); | 337 |
214 g_free(tmp); | 338 static void |
215 } | 339 msn_get_public_alias(PurpleConnection *pc, |
216 else | 340 PurpleGetPublicAliasSuccessCallback success_cb, |
217 alias = ""; | 341 PurpleGetPublicAliasFailureCallback failure_cb) |
218 | 342 { |
219 if (strlen(alias) > BUDDY_ALIAS_MAXLEN) | 343 struct public_alias_closure *closure = g_new0(struct public_alias_closure, 1); |
220 { | 344 PurpleAccount *account = purple_connection_get_account(pc); |
221 purple_notify_error(gc, NULL, | 345 |
222 _("Your new MSN friendly name is too long."), NULL); | 346 closure->account = account; |
223 return; | 347 closure->success_cb = success_cb; |
224 } | 348 purple_timeout_add(0, get_public_alias_cb, closure); |
225 | 349 } |
226 if (*alias == '\0') { | 350 |
227 alias = purple_url_encode(purple_account_get_username(account)); | 351 static void |
228 } | 352 msn_act_id(PurpleConnection *gc, const char *entry) |
229 | 353 { |
230 trans = msn_transaction_new(cmdproc, "PRP", "MFN %s", alias); | 354 msn_set_public_alias(gc, entry, NULL, NULL); |
231 | |
232 msn_cmdproc_send_trans(cmdproc, trans); | |
233 } | 355 } |
234 | 356 |
235 static void | 357 static void |
236 msn_set_prp(PurpleConnection *gc, const char *type, const char *entry) | 358 msn_set_prp(PurpleConnection *gc, const char *type, const char *entry) |
237 { | 359 { |
2797 | 2919 |
2798 | 2920 |
2799 static PurplePluginProtocolInfo prpl_info = | 2921 static PurplePluginProtocolInfo prpl_info = |
2800 { | 2922 { |
2801 OPT_PROTO_MAIL_CHECK, | 2923 OPT_PROTO_MAIL_CHECK, |
2802 NULL, /* user_splits */ | 2924 NULL, /* user_splits */ |
2803 NULL, /* protocol_options */ | 2925 NULL, /* protocol_options */ |
2804 {"png,gif", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_SEND}, /* icon_spec */ | 2926 {"png,gif", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_SEND}, /* icon_spec */ |
2805 msn_list_icon, /* list_icon */ | 2927 msn_list_icon, /* list_icon */ |
2806 msn_list_emblems, /* list_emblems */ | 2928 msn_list_emblems, /* list_emblems */ |
2807 msn_status_text, /* status_text */ | 2929 msn_status_text, /* status_text */ |
2808 msn_tooltip_text, /* tooltip_text */ | 2930 msn_tooltip_text, /* tooltip_text */ |
2809 msn_status_types, /* away_states */ | 2931 msn_status_types, /* away_states */ |
2810 msn_blist_node_menu, /* blist_node_menu */ | 2932 msn_blist_node_menu, /* blist_node_menu */ |
2811 NULL, /* chat_info */ | 2933 NULL, /* chat_info */ |
2812 NULL, /* chat_info_defaults */ | 2934 NULL, /* chat_info_defaults */ |
2813 msn_login, /* login */ | 2935 msn_login, /* login */ |
2814 msn_close, /* close */ | 2936 msn_close, /* close */ |
2815 msn_send_im, /* send_im */ | 2937 msn_send_im, /* send_im */ |
2816 NULL, /* set_info */ | 2938 NULL, /* set_info */ |
2817 msn_send_typing, /* send_typing */ | 2939 msn_send_typing, /* send_typing */ |
2818 msn_get_info, /* get_info */ | 2940 msn_get_info, /* get_info */ |
2819 msn_set_status, /* set_away */ | 2941 msn_set_status, /* set_away */ |
2820 msn_set_idle, /* set_idle */ | 2942 msn_set_idle, /* set_idle */ |
2821 NULL, /* change_passwd */ | 2943 NULL, /* change_passwd */ |
2822 msn_add_buddy, /* add_buddy */ | 2944 msn_add_buddy, /* add_buddy */ |
2823 NULL, /* add_buddies */ | 2945 NULL, /* add_buddies */ |
2824 msn_rem_buddy, /* remove_buddy */ | 2946 msn_rem_buddy, /* remove_buddy */ |
2825 NULL, /* remove_buddies */ | 2947 NULL, /* remove_buddies */ |
2826 msn_add_permit, /* add_permit */ | 2948 msn_add_permit, /* add_permit */ |
2827 msn_add_deny, /* add_deny */ | 2949 msn_add_deny, /* add_deny */ |
2828 msn_rem_permit, /* rem_permit */ | 2950 msn_rem_permit, /* rem_permit */ |
2829 msn_rem_deny, /* rem_deny */ | 2951 msn_rem_deny, /* rem_deny */ |
2830 msn_set_permit_deny, /* set_permit_deny */ | 2952 msn_set_permit_deny, /* set_permit_deny */ |
2831 NULL, /* join_chat */ | 2953 NULL, /* join_chat */ |
2832 NULL, /* reject chat invite */ | 2954 NULL, /* reject chat invite */ |
2833 NULL, /* get_chat_name */ | 2955 NULL, /* get_chat_name */ |
2834 msn_chat_invite, /* chat_invite */ | 2956 msn_chat_invite, /* chat_invite */ |
2835 msn_chat_leave, /* chat_leave */ | 2957 msn_chat_leave, /* chat_leave */ |
2836 NULL, /* chat_whisper */ | 2958 NULL, /* chat_whisper */ |
2837 msn_chat_send, /* chat_send */ | 2959 msn_chat_send, /* chat_send */ |
2838 msn_keepalive, /* keepalive */ | 2960 msn_keepalive, /* keepalive */ |
2839 NULL, /* register_user */ | 2961 NULL, /* register_user */ |
2840 NULL, /* get_cb_info */ | 2962 NULL, /* get_cb_info */ |
2841 NULL, /* get_cb_away */ | 2963 NULL, /* get_cb_away */ |
2842 msn_alias_buddy, /* alias_buddy */ | 2964 msn_alias_buddy, /* alias_buddy */ |
2843 msn_group_buddy, /* group_buddy */ | 2965 msn_group_buddy, /* group_buddy */ |
2844 msn_rename_group, /* rename_group */ | 2966 msn_rename_group, /* rename_group */ |
2845 NULL, /* buddy_free */ | 2967 NULL, /* buddy_free */ |
2846 msn_convo_closed, /* convo_closed */ | 2968 msn_convo_closed, /* convo_closed */ |
2847 msn_normalize, /* normalize */ | 2969 msn_normalize, /* normalize */ |
2848 msn_set_buddy_icon, /* set_buddy_icon */ | 2970 msn_set_buddy_icon, /* set_buddy_icon */ |
2849 msn_remove_group, /* remove_group */ | 2971 msn_remove_group, /* remove_group */ |
2850 NULL, /* get_cb_real_name */ | 2972 NULL, /* get_cb_real_name */ |
2851 NULL, /* set_chat_topic */ | 2973 NULL, /* set_chat_topic */ |
2852 NULL, /* find_blist_chat */ | 2974 NULL, /* find_blist_chat */ |
2853 NULL, /* roomlist_get_list */ | 2975 NULL, /* roomlist_get_list */ |
2854 NULL, /* roomlist_cancel */ | 2976 NULL, /* roomlist_cancel */ |
2855 NULL, /* roomlist_expand_category */ | 2977 NULL, /* roomlist_expand_category */ |
2856 msn_can_receive_file, /* can_receive_file */ | 2978 msn_can_receive_file, /* can_receive_file */ |
2857 msn_send_file, /* send_file */ | 2979 msn_send_file, /* send_file */ |
2858 msn_new_xfer, /* new_xfer */ | 2980 msn_new_xfer, /* new_xfer */ |
2859 msn_offline_message, /* offline_message */ | 2981 msn_offline_message, /* offline_message */ |
2860 NULL, /* whiteboard_prpl_ops */ | 2982 NULL, /* whiteboard_prpl_ops */ |
2861 NULL, /* send_raw */ | 2983 NULL, /* send_raw */ |
2862 NULL, /* roomlist_room_serialize */ | 2984 NULL, /* roomlist_room_serialize */ |
2863 NULL, /* unregister_user */ | 2985 NULL, /* unregister_user */ |
2864 msn_send_attention, /* send_attention */ | 2986 msn_send_attention, /* send_attention */ |
2865 msn_attention_types, /* attention_types */ | 2987 msn_attention_types, /* attention_types */ |
2866 sizeof(PurplePluginProtocolInfo), /* struct_size */ | 2988 sizeof(PurplePluginProtocolInfo), /* struct_size */ |
2867 msn_get_account_text_table, /* get_account_text_table */ | 2989 msn_get_account_text_table, /* get_account_text_table */ |
2868 NULL, /* initiate_media */ | 2990 NULL, /* initiate_media */ |
2869 NULL, /* get_media_caps */ | 2991 NULL, /* get_media_caps */ |
2870 NULL /* get_moods */ | 2992 NULL, /* get_moods */ |
2993 msn_set_public_alias, /* set_public_alias */ | |
2994 msn_get_public_alias /* get_public_alias */ | |
2871 }; | 2995 }; |
2872 | 2996 |
2873 static PurplePluginInfo info = | 2997 static PurplePluginInfo info = |
2874 { | 2998 { |
2875 PURPLE_PLUGIN_MAGIC, | 2999 PURPLE_PLUGIN_MAGIC, |