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