Mercurial > pidgin
comparison libpurple/protocols/qq/qq.c @ 24653:fecedf6d9ee1
propagate from branch 'im.pidgin.pidgin' (head 97d295a04f3a9852a3b29cf0df43d56d1ddcc672)
to branch 'im.pidgin.pidgin.openq' (head a0d99396d1603b53838d74cad4391ece34f3ebbf)
author | SHiNE CsyFeK <csyfek@gmail.com> |
---|---|
date | Fri, 05 Dec 2008 14:51:36 +0000 |
parents | 565df7f3ed49 807ff8a4b47b |
children | e8c5688afdcd |
comparison
equal
deleted
inserted
replaced
24590:c457c635eb8f | 24653:fecedf6d9ee1 |
---|---|
89 static void server_list_create(PurpleAccount *account) | 89 static void server_list_create(PurpleAccount *account) |
90 { | 90 { |
91 PurpleConnection *gc; | 91 PurpleConnection *gc; |
92 qq_data *qd; | 92 qq_data *qd; |
93 PurpleProxyInfo *gpi; | 93 PurpleProxyInfo *gpi; |
94 const gchar *user_server; | 94 const gchar *custom_server; |
95 | 95 |
96 gc = purple_account_get_connection(account); | 96 gc = purple_account_get_connection(account); |
97 g_return_if_fail(gc != NULL && gc->proto_data != NULL); | 97 g_return_if_fail(gc != NULL && gc->proto_data != NULL); |
98 qd = gc->proto_data; | 98 qd = gc->proto_data; |
99 | 99 |
100 gpi = purple_proxy_get_setup(account); | 100 gpi = purple_proxy_get_setup(account); |
101 | 101 |
102 qd->use_tcp = purple_account_get_bool(account, "use_tcp", TRUE); | 102 qd->use_tcp = purple_account_get_bool(account, "use_tcp", TRUE); |
103 | 103 |
104 user_server = purple_account_get_string(account, "server", NULL); | 104 custom_server = purple_account_get_string(account, "server", NULL); |
105 purple_debug_info("QQ", "Select server '%s'\n", user_server); | 105 purple_debug_info("QQ", "Select server '%s'\n", custom_server); |
106 if ( (user_server != NULL && strlen(user_server) > 0) && strcasecmp(user_server, "auto") != 0) { | 106 if ( (custom_server != NULL && strlen(custom_server) > 0) && strcasecmp(custom_server, "auto") != 0) { |
107 qd->servers = g_list_append(qd->servers, g_strdup(user_server)); | 107 qd->servers = g_list_append(qd->servers, g_strdup(custom_server)); |
108 return; | 108 return; |
109 } | 109 } |
110 | 110 |
111 if (qd->use_tcp) { | 111 if (qd->use_tcp) { |
112 qd->servers = server_list_build('T'); | 112 qd->servers = server_list_build('T'); |
435 static void qq_change_status(PurpleAccount *account, PurpleStatus *status) | 435 static void qq_change_status(PurpleAccount *account, PurpleStatus *status) |
436 { | 436 { |
437 PurpleConnection *gc = purple_account_get_connection(account); | 437 PurpleConnection *gc = purple_account_get_connection(account); |
438 | 438 |
439 qq_request_change_status(gc, 0); | 439 qq_request_change_status(gc, 0); |
440 } | |
441 | |
442 static void qq_add_deny(PurpleConnection *gc, const char *who) | |
443 { | |
444 qq_data *qd; | |
445 g_return_if_fail(NULL != gc && NULL != gc->proto_data); | |
446 | |
447 qd = (qq_data *) gc->proto_data; | |
448 if (!qd->is_login) | |
449 return; | |
450 | |
451 if (!who || who[0] == '\0') | |
452 return; | |
453 | |
454 purple_debug_info("QQ", "Add deny for %s\n", who); | |
455 } | |
456 | |
457 static void qq_rem_deny(PurpleConnection *gc, const char *who) | |
458 { | |
459 qq_data *qd; | |
460 g_return_if_fail(NULL != gc && NULL != gc->proto_data); | |
461 | |
462 qd = (qq_data *) gc->proto_data; | |
463 if (!qd->is_login) | |
464 return; | |
465 | |
466 if (!who || who[0] == '\0') | |
467 return; | |
468 | |
469 purple_debug_info("QQ", "Rem deny for %s\n", who); | |
470 } | |
471 | |
472 static void qq_set_permit_deny(PurpleConnection *gc) | |
473 { | |
474 PurpleAccount *account; | |
475 GSList *deny; | |
476 | |
477 purple_debug_info("QQ", "Set permit deny\n"); | |
478 account = purple_connection_get_account(gc); | |
479 switch (account->perm_deny) | |
480 { | |
481 case PURPLE_PRIVACY_ALLOW_ALL: | |
482 for (deny = account->deny; deny; deny = deny->next) | |
483 qq_rem_deny(gc, deny->data); | |
484 break; | |
485 | |
486 case PURPLE_PRIVACY_ALLOW_BUDDYLIST: | |
487 case PURPLE_PRIVACY_ALLOW_USERS: | |
488 case PURPLE_PRIVACY_DENY_USERS: | |
489 case PURPLE_PRIVACY_DENY_ALL: | |
490 for (deny = account->deny; deny; deny = deny->next) | |
491 qq_add_deny(gc, deny->data); | |
492 break; | |
493 } | |
494 } | |
495 | |
496 /* IMPORTANT: PurpleConvImFlags -> PurpleMessageFlags */ | |
497 /* send an instant msg to a buddy */ | |
498 static gint qq_send_im(PurpleConnection *gc, const gchar *who, const gchar *message, PurpleMessageFlags flags) | |
499 { | |
500 gint type, uid_to; | |
501 gchar *msg, *msg_with_qq_smiley; | |
502 qq_data *qd; | |
503 | |
504 g_return_val_if_fail(who != NULL, -1); | |
505 | |
506 qd = (qq_data *) gc->proto_data; | |
507 | |
508 g_return_val_if_fail(strlen(message) <= QQ_MSG_IM_MAX, -E2BIG); | |
509 | |
510 type = (flags == PURPLE_MESSAGE_AUTO_RESP ? QQ_IM_AUTO_REPLY : QQ_IM_TEXT); | |
511 uid_to = purple_name_to_uid(who); | |
512 | |
513 /* if msg is to myself, bypass the network */ | |
514 if (uid_to == qd->uid) { | |
515 serv_got_im(gc, who, message, flags, time(NULL)); | |
516 } else { | |
517 msg = utf8_to_qq(message, QQ_CHARSET_DEFAULT); | |
518 msg_with_qq_smiley = purple_smiley_to_qq(msg); | |
519 qq_request_send_im(gc, uid_to, msg_with_qq_smiley, type); | |
520 g_free(msg); | |
521 g_free(msg_with_qq_smiley); | |
522 } | |
523 | |
524 return 1; | |
525 } | |
526 | |
527 /* send a chat msg to a QQ Qun */ | |
528 static int qq_chat_send(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags) | |
529 { | |
530 gchar *msg, *msg_with_qq_smiley; | |
531 guint32 room_id = id; | |
532 | |
533 g_return_val_if_fail(message != NULL, -1); | |
534 g_return_val_if_fail(strlen(message) <= QQ_MSG_IM_MAX, -E2BIG); | |
535 | |
536 purple_debug_info("QQ_MESG", "Send qun mesg in utf8: %s\n", message); | |
537 msg = utf8_to_qq(message, QQ_CHARSET_DEFAULT); | |
538 msg_with_qq_smiley = purple_smiley_to_qq(msg); | |
539 qq_request_room_send_im(gc, room_id, msg_with_qq_smiley); | |
540 g_free(msg); | |
541 g_free(msg_with_qq_smiley); | |
542 | |
543 return 1; | |
544 } | 440 } |
545 | 441 |
546 /* send packet to get who's detailed information */ | 442 /* send packet to get who's detailed information */ |
547 static void qq_show_buddy_info(PurpleConnection *gc, const gchar *who) | 443 static void qq_show_buddy_info(PurpleConnection *gc, const gchar *who) |
548 { | 444 { |
758 g_string_append(info, "OpenQ Team : http://openq.linuxsir.org<br>\n"); | 654 g_string_append(info, "OpenQ Team : http://openq.linuxsir.org<br>\n"); |
759 g_string_append(info, "LumaQQ Team : http://lumaqq.linuxsir.org<br>\n"); | 655 g_string_append(info, "LumaQQ Team : http://lumaqq.linuxsir.org<br>\n"); |
760 g_string_append(info, "khc(at)pidgin.im<br>\n"); | 656 g_string_append(info, "khc(at)pidgin.im<br>\n"); |
761 g_string_append(info, "qulogic(at)pidgin.im<br>\n"); | 657 g_string_append(info, "qulogic(at)pidgin.im<br>\n"); |
762 g_string_append(info, "rlaager(at)pidgin.im<br>\n"); | 658 g_string_append(info, "rlaager(at)pidgin.im<br>\n"); |
659 g_string_append(info, "Huang Guan : http://home.xxsyzx.com<br>\n"); | |
763 g_string_append(info, "OpenQ Google Group : http://groups.google.com/group/openq<br>\n"); | 660 g_string_append(info, "OpenQ Google Group : http://groups.google.com/group/openq<br>\n"); |
764 g_string_append(info, "<br>\n"); | 661 g_string_append(info, "<br>\n"); |
765 g_string_append(info, _("<p><i>And, all the boys in the backroom...</i><br>\n")); | 662 g_string_append(info, _("<p><i>And, all the boys in the backroom...</i><br>\n")); |
766 g_string_append(info, _("<i>Feel free to join us!</i> :)")); | 663 g_string_append(info, _("<i>Feel free to join us!</i> :)")); |
767 g_string_append(info, "</body></html>"); | 664 g_string_append(info, "</body></html>"); |
803 g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); | 700 g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); |
804 | 701 |
805 g_return_if_fail(components != NULL); | 702 g_return_if_fail(components != NULL); |
806 | 703 |
807 num_str = g_hash_table_lookup(components, QQ_ROOM_KEY_INTERNAL_ID); | 704 num_str = g_hash_table_lookup(components, QQ_ROOM_KEY_INTERNAL_ID); |
808 room_id = strtol(num_str, NULL, 10); | 705 room_id = strtoul(num_str, NULL, 10); |
809 g_return_if_fail(room_id != 0); | 706 g_return_if_fail(room_id != 0); |
810 | 707 |
811 qq_room_quit(gc, room_id); | 708 qq_room_quit(gc, room_id); |
812 } | 709 } |
813 | 710 |
822 g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); | 719 g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); |
823 | 720 |
824 g_return_if_fail(components != NULL); | 721 g_return_if_fail(components != NULL); |
825 | 722 |
826 num_str = g_hash_table_lookup(components, QQ_ROOM_KEY_INTERNAL_ID); | 723 num_str = g_hash_table_lookup(components, QQ_ROOM_KEY_INTERNAL_ID); |
827 room_id = strtol(num_str, NULL, 10); | 724 room_id = strtoul(num_str, NULL, 10); |
828 g_return_if_fail(room_id != 0); | 725 g_return_if_fail(room_id != 0); |
829 | 726 |
830 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, room_id, NULL, 0, | 727 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, room_id, NULL, 0, |
831 0, QQ_ROOM_INFO_DISPLAY); | 728 0, QQ_ROOM_INFO_DISPLAY); |
832 } | 729 } |
1035 qq_status_text, /* status_text */ | 932 qq_status_text, /* status_text */ |
1036 qq_tooltip_text, /* tooltip_text */ | 933 qq_tooltip_text, /* tooltip_text */ |
1037 qq_status_types, /* away_states */ | 934 qq_status_types, /* away_states */ |
1038 qq_blist_node_menu, /* blist_node_menu */ | 935 qq_blist_node_menu, /* blist_node_menu */ |
1039 qq_chat_info, /* chat_info */ | 936 qq_chat_info, /* chat_info */ |
1040 qq_chat_info_defaults, /* chat_info_defaults */ | 937 qq_chat_info_defaults, /* chat_info_defaults */ |
1041 qq_login, /* open */ | 938 qq_login, /* open */ |
1042 qq_close, /* close */ | 939 qq_close, /* close */ |
1043 qq_send_im, /* send_im */ | 940 qq_send_im, /* send_im */ |
1044 NULL, /* set_info */ | 941 NULL, /* set_info */ |
1045 NULL, /* send_typing */ | 942 NULL, /* send_typing */ |
1046 qq_show_buddy_info, /* get_info */ | 943 qq_show_buddy_info, /* get_info */ |
1047 qq_change_status, /* change status */ | 944 qq_change_status, /* change status */ |
1048 NULL, /* set_idle */ | 945 NULL, /* set_idle */ |
1049 NULL, /* change_passwd */ | 946 NULL, /* change_passwd */ |
1050 qq_add_buddy, /* add_buddy */ | 947 qq_add_buddy, /* add_buddy */ |
1051 NULL, /* add_buddies */ | 948 NULL, /* add_buddies */ |
1052 qq_remove_buddy, /* remove_buddy */ | 949 qq_remove_buddy, /* remove_buddy */ |
1053 NULL, /* remove_buddies */ | 950 NULL, /* remove_buddies */ |
1054 NULL, /* add_permit */ | 951 NULL, /* add_permit */ |
1055 qq_add_deny, /* add_deny */ | 952 NULL, /* add_deny */ |
1056 NULL, /* rem_permit */ | 953 NULL, /* rem_permit */ |
1057 NULL, /* rem_deny */ | 954 NULL, /* rem_deny */ |
1058 qq_set_permit_deny, /* set_permit_deny */ | 955 NULL, /* set_permit_deny */ |
1059 qq_group_join, /* join_chat */ | 956 qq_group_join, /* join_chat */ |
1060 NULL, /* reject chat invite */ | 957 NULL, /* reject chat invite */ |
1061 NULL, /* get_chat_name */ | 958 NULL, /* get_chat_name */ |
1062 NULL, /* chat_invite */ | 959 NULL, /* chat_invite */ |
1063 NULL, /* chat_leave */ | 960 NULL, /* chat_leave */ |
1064 NULL, /* chat_whisper */ | 961 NULL, /* chat_whisper */ |
1073 NULL, /* buddy_free */ | 970 NULL, /* buddy_free */ |
1074 NULL, /* convo_closed */ | 971 NULL, /* convo_closed */ |
1075 NULL, /* normalize */ | 972 NULL, /* normalize */ |
1076 qq_set_custom_icon, | 973 qq_set_custom_icon, |
1077 NULL, /* remove_group */ | 974 NULL, /* remove_group */ |
1078 qq_get_chat_buddy_real_name, /* get_cb_real_name */ | 975 qq_get_chat_buddy_real_name, /* get_cb_real_name */ |
1079 NULL, /* set_chat_topic */ | 976 NULL, /* set_chat_topic */ |
1080 NULL, /* find_blist_chat */ | 977 NULL, /* find_blist_chat */ |
1081 qq_roomlist_get_list, /* roomlist_get_list */ | 978 qq_roomlist_get_list, /* roomlist_get_list */ |
1082 qq_roomlist_cancel, /* roomlist_cancel */ | 979 qq_roomlist_cancel, /* roomlist_cancel */ |
1083 NULL, /* roomlist_expand_category */ | 980 NULL, /* roomlist_expand_category */ |
1084 NULL, /* can_receive_file */ | 981 NULL, /* can_receive_file */ |
1085 NULL, /* qq_send_file send_file */ | 982 NULL, /* qq_send_file send_file */ |
1086 NULL, /* new xfer */ | 983 NULL, /* new xfer */ |
1087 NULL, /* offline_message */ | 984 NULL, /* offline_message */ |
1168 g_list_free(server_list); | 1065 g_list_free(server_list); |
1169 | 1066 |
1170 option = purple_account_option_list_new(_("Select Server"), "server", server_kv_list); | 1067 option = purple_account_option_list_new(_("Select Server"), "server", server_kv_list); |
1171 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | 1068 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
1172 | 1069 |
1173 //#ifdef DEBUG | |
1174 kvp = g_new0(PurpleKeyValuePair, 1); | 1070 kvp = g_new0(PurpleKeyValuePair, 1); |
1175 kvp->key = g_strdup(_("QQ2005")); | 1071 kvp->key = g_strdup(_("QQ2005")); |
1176 kvp->value = g_strdup("qq2005"); | 1072 kvp->value = g_strdup("qq2005"); |
1177 version_kv_list = g_list_append(version_kv_list, kvp); | 1073 version_kv_list = g_list_append(version_kv_list, kvp); |
1178 | 1074 |
1186 kvp->value = g_strdup("qq2008"); | 1082 kvp->value = g_strdup("qq2008"); |
1187 version_kv_list = g_list_append(version_kv_list, kvp); | 1083 version_kv_list = g_list_append(version_kv_list, kvp); |
1188 | 1084 |
1189 option = purple_account_option_list_new(_("Client Version"), "client_version", version_kv_list); | 1085 option = purple_account_option_list_new(_("Client Version"), "client_version", version_kv_list); |
1190 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | 1086 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
1191 //#endif | |
1192 | 1087 |
1193 option = purple_account_option_bool_new(_("Connect by TCP"), "use_tcp", TRUE); | 1088 option = purple_account_option_bool_new(_("Connect by TCP"), "use_tcp", TRUE); |
1194 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | 1089 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
1195 | 1090 |
1196 option = purple_account_option_bool_new(_("Show server notice"), "show_notice", TRUE); | 1091 option = purple_account_option_bool_new(_("Show server notice"), "show_notice", TRUE); |
1206 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | 1101 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
1207 | 1102 |
1208 purple_prefs_add_none("/plugins/prpl/qq"); | 1103 purple_prefs_add_none("/plugins/prpl/qq"); |
1209 purple_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE); | 1104 purple_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE); |
1210 purple_prefs_add_bool("/plugins/prpl/qq/show_fake_video", FALSE); | 1105 purple_prefs_add_bool("/plugins/prpl/qq/show_fake_video", FALSE); |
1211 purple_prefs_add_bool("/plugins/prpl/qq/auto_popup_conversation", FALSE); | 1106 purple_prefs_add_bool("/plugins/prpl/qq/auto_popup_conversation", TRUE); |
1212 purple_prefs_add_bool("/plugins/prpl/qq/auto_get_authorize_info", TRUE); | 1107 purple_prefs_add_bool("/plugins/prpl/qq/auto_get_authorize_info", TRUE); |
1213 purple_prefs_add_int("/plugins/prpl/qq/resend_interval", 3); | 1108 purple_prefs_add_int("/plugins/prpl/qq/resend_interval", 3); |
1214 purple_prefs_add_int("/plugins/prpl/qq/resend_times", 10); | 1109 purple_prefs_add_int("/plugins/prpl/qq/resend_times", 10); |
1215 } | 1110 } |
1216 | 1111 |