Mercurial > pidgin
comparison libpurple/protocols/qq/qq.c @ 24134:bdfcfd71449c
patch 20080922 from ccpaging <ccpaging(at)gmail.com>
author | SHiNE CsyFeK <csyfek@gmail.com> |
---|---|
date | Wed, 22 Oct 2008 14:33:20 +0000 |
parents | d57928c9dd8f |
children | dbc7a9742f8d |
comparison
equal
deleted
inserted
replaced
24133:a3cd7c3d9da1 | 24134:bdfcfd71449c |
---|---|
42 #include "group_find.h" | 42 #include "group_find.h" |
43 #include "group_im.h" | 43 #include "group_im.h" |
44 #include "group_info.h" | 44 #include "group_info.h" |
45 #include "group_join.h" | 45 #include "group_join.h" |
46 #include "group_opt.h" | 46 #include "group_opt.h" |
47 #include "header_info.h" | 47 #include "qq_define.h" |
48 #include "im.h" | 48 #include "im.h" |
49 #include "qq_process.h" | 49 #include "qq_process.h" |
50 #include "qq_base.h" | 50 #include "qq_base.h" |
51 #include "packet_parse.h" | 51 #include "packet_parse.h" |
52 #include "qq.h" | 52 #include "qq.h" |
126 static void qq_login(PurpleAccount *account) | 126 static void qq_login(PurpleAccount *account) |
127 { | 127 { |
128 PurpleConnection *gc; | 128 PurpleConnection *gc; |
129 qq_data *qd; | 129 qq_data *qd; |
130 PurplePresence *presence; | 130 PurplePresence *presence; |
131 const gchar *version_str; | |
131 | 132 |
132 g_return_if_fail(account != NULL); | 133 g_return_if_fail(account != NULL); |
133 | 134 |
134 gc = purple_account_get_connection(account); | 135 gc = purple_account_get_connection(account); |
135 g_return_if_fail(gc != NULL); | 136 g_return_if_fail(gc != NULL); |
151 qd->login_mode = QQ_LOGIN_MODE_NORMAL; | 152 qd->login_mode = QQ_LOGIN_MODE_NORMAL; |
152 } | 153 } |
153 | 154 |
154 server_list_create(account); | 155 server_list_create(account); |
155 purple_debug_info("QQ", "Server list has %d\n", g_list_length(qd->servers)); | 156 purple_debug_info("QQ", "Server list has %d\n", g_list_length(qd->servers)); |
157 | |
158 version_str = purple_account_get_string(account, "client_version", NULL); | |
159 qd->client_version = QQ_CLIENT_0D55; /* set default as QQ2005 */ | |
160 qd->is_above_2007 = FALSE; | |
161 if (version_str != NULL && strlen(version_str) != 0) { | |
162 if (strcmp(version_str, "qq2007") == 0) { | |
163 qd->client_version = QQ_CLIENT_111D; | |
164 qd->is_above_2007 = TRUE; | |
165 } | |
166 } | |
156 | 167 |
157 qd->is_show_notice = purple_account_get_bool(account, "show_notice", TRUE); | 168 qd->is_show_notice = purple_account_get_bool(account, "show_notice", TRUE); |
158 qd->is_show_news = purple_account_get_bool(account, "show_news", TRUE); | 169 qd->is_show_news = purple_account_get_bool(account, "show_news", TRUE); |
159 | 170 |
160 qd->resend_times = purple_prefs_get_int("/plugins/prpl/qq/resend_times"); | 171 qd->resend_times = purple_prefs_get_int("/plugins/prpl/qq/resend_times"); |
201 purple_timeout_remove(qd->connect_watcher); | 212 purple_timeout_remove(qd->connect_watcher); |
202 qd->connect_watcher = 0; | 213 qd->connect_watcher = 0; |
203 } | 214 } |
204 | 215 |
205 qq_disconnect(gc); | 216 qq_disconnect(gc); |
217 | |
218 if (qd->ld.token) g_free(qd->ld.token); | |
219 if (qd->captcha.token) g_free(qd->captcha.token); | |
220 if (qd->captcha.data) g_free(qd->captcha.data); | |
221 | |
206 server_list_remove_all(qd); | 222 server_list_remove_all(qd); |
207 | 223 |
208 g_free(qd); | 224 g_free(qd); |
209 gc->proto_data = NULL; | 225 gc->proto_data = NULL; |
210 } | 226 } |
534 PurpleConnection *gc = (PurpleConnection *) action->context; | 550 PurpleConnection *gc = (PurpleConnection *) action->context; |
535 qq_data *qd; | 551 qq_data *qd; |
536 GString *info; | 552 GString *info; |
537 | 553 |
538 qd = (qq_data *) gc->proto_data; | 554 qd = (qq_data *) gc->proto_data; |
539 info = g_string_new("<html><body>\n"); | 555 info = g_string_new("<html><body>"); |
540 | 556 |
541 g_string_append_printf(info, _("<b>Current Online</b>: %d<br>\n"), qd->total_online); | 557 g_string_append_printf(info, _("<b>This Login</b>: %s<br>\n"), ctime(&qd->login_time)); |
542 g_string_append_printf(info, _("<b>Last Refresh</b>: %s<br>\n"), ctime(&qd->last_get_online)); | 558 g_string_append_printf(info, _("<b>Online Buddies</b>: %d<br>\n"), qd->online_total); |
543 | 559 g_string_append_printf(info, _("<b>Last Refresh</b>: %s<br>\n"), ctime(&qd->online_last_update)); |
544 g_string_append(info, "<hr>\n"); | 560 |
561 g_string_append(info, "<hr>"); | |
545 | 562 |
546 g_string_append_printf(info, _("<b>Server</b>: %s<br>\n"), qd->curr_server); | 563 g_string_append_printf(info, _("<b>Server</b>: %s<br>\n"), qd->curr_server); |
564 g_string_append_printf(info, _("<b>Client Version</b>: %s<br>\n"), qq_get_ver_desc(qd->client_version)); | |
547 g_string_append_printf(info, _("<b>Connection Mode</b>: %s<br>\n"), qd->use_tcp ? "TCP" : "UDP"); | 565 g_string_append_printf(info, _("<b>Connection Mode</b>: %s<br>\n"), qd->use_tcp ? "TCP" : "UDP"); |
548 g_string_append_printf(info, _("<b>My Internet Address</b>: %s<br>\n"), inet_ntoa(qd->my_ip)); | 566 g_string_append_printf(info, _("<b>My Internet IP</b>: %s<br>\n"), inet_ntoa(qd->my_ip)); |
549 | 567 |
550 g_string_append(info, "<hr>\n"); | 568 g_string_append(info, "<hr>"); |
551 g_string_append(info, "<i>Network Status</i><br>\n"); | 569 g_string_append(info, "<i>Network Status</i><br>\n"); |
552 g_string_append_printf(info, _("<b>Sent</b>: %lu<br>\n"), qd->net_stat.sent); | 570 g_string_append_printf(info, _("<b>Sent</b>: %lu<br>\n"), qd->net_stat.sent); |
553 g_string_append_printf(info, _("<b>Resend</b>: %lu<br>\n"), qd->net_stat.resend); | 571 g_string_append_printf(info, _("<b>Resend</b>: %lu<br>\n"), qd->net_stat.resend); |
554 g_string_append_printf(info, _("<b>Lost</b>: %lu<br>\n"), qd->net_stat.lost); | 572 g_string_append_printf(info, _("<b>Lost</b>: %lu<br>\n"), qd->net_stat.lost); |
555 g_string_append_printf(info, _("<b>Received</b>: %lu<br>\n"), qd->net_stat.rcved); | 573 g_string_append_printf(info, _("<b>Received</b>: %lu<br>\n"), qd->net_stat.rcved); |
556 g_string_append_printf(info, _("<b>Received Duplicate</b>: %lu<br>\n"), qd->net_stat.rcved_dup); | 574 g_string_append_printf(info, _("<b>Received Duplicate</b>: %lu<br>\n"), qd->net_stat.rcved_dup); |
557 | 575 |
558 g_string_append(info, "<hr>\n"); | 576 g_string_append(info, "<hr>"); |
559 g_string_append(info, "<i>Information below may not be accurate</i><br>\n"); | 577 g_string_append(info, "<i>Information below may not be accurate</i><br>\n"); |
560 | 578 |
561 g_string_append_printf(info, _("<b>Login Time</b>: %s<br>\n"), ctime(&qd->login_time)); | 579 g_string_append_printf(info, _("<b>Last Login</b>: %s\n"), ctime(&qd->last_login_time)); |
562 g_string_append_printf(info, _("<b>Last Login IP</b>: %s<br>\n"), qd->last_login_ip); | 580 g_string_append_printf(info, _("<b>Last Login IP</b>: %s<br>\n"), qd->last_login_ip); |
563 g_string_append_printf(info, _("<b>Last Login Time</b>: %s\n"), ctime(&qd->last_login_time)); | |
564 | 581 |
565 g_string_append(info, "</body></html>"); | 582 g_string_append(info, "</body></html>"); |
566 | 583 |
567 purple_notify_formatted(gc, NULL, _("Login Information"), NULL, info->str, NULL, NULL); | 584 purple_notify_formatted(gc, NULL, _("Login Information"), NULL, info->str, NULL, NULL); |
568 | 585 |
846 | 863 |
847 static void init_plugin(PurplePlugin *plugin) | 864 static void init_plugin(PurplePlugin *plugin) |
848 { | 865 { |
849 PurpleAccountOption *option; | 866 PurpleAccountOption *option; |
850 PurpleKeyValuePair *kvp; | 867 PurpleKeyValuePair *kvp; |
851 GList *list = NULL; | 868 GList *server_list = NULL; |
852 GList *kvlist = NULL; | 869 GList *server_kv_list = NULL; |
853 GList *entry; | 870 GList *it; |
854 | 871 GList *version_kv_list = NULL; |
855 list = server_list_build('A'); | 872 |
856 | 873 server_list = server_list_build('A'); |
857 purple_prefs_add_string_list("/plugins/prpl/qq/serverlist", list); | 874 |
858 list = purple_prefs_get_string_list("/plugins/prpl/qq/serverlist"); | 875 purple_prefs_add_string_list("/plugins/prpl/qq/serverlist", server_list); |
859 | 876 server_list = purple_prefs_get_string_list("/plugins/prpl/qq/serverlist"); |
860 kvlist = NULL; | 877 |
878 server_kv_list = NULL; | |
861 kvp = g_new0(PurpleKeyValuePair, 1); | 879 kvp = g_new0(PurpleKeyValuePair, 1); |
862 kvp->key = g_strdup(_("Auto")); | 880 kvp->key = g_strdup(_("Auto")); |
863 kvp->value = g_strdup("auto"); | 881 kvp->value = g_strdup("auto"); |
864 kvlist = g_list_append(kvlist, kvp); | 882 server_kv_list = g_list_append(server_kv_list, kvp); |
865 | 883 |
866 entry = list; | 884 it = server_list; |
867 while(entry) { | 885 while(it) { |
868 if (entry->data != NULL && strlen(entry->data) > 0) { | 886 if (it->data != NULL && strlen(it->data) > 0) { |
869 kvp = g_new0(PurpleKeyValuePair, 1); | 887 kvp = g_new0(PurpleKeyValuePair, 1); |
870 kvp->key = g_strdup(entry->data); | 888 kvp->key = g_strdup(it->data); |
871 kvp->value = g_strdup(entry->data); | 889 kvp->value = g_strdup(it->data); |
872 kvlist = g_list_append(kvlist, kvp); | 890 server_kv_list = g_list_append(server_kv_list, kvp); |
873 } | 891 } |
874 entry = entry->next; | 892 it = it->next; |
875 } | 893 } |
876 | 894 |
877 option = purple_account_option_list_new(_("Server"), "server", kvlist); | 895 g_list_free(server_list); |
896 | |
897 option = purple_account_option_list_new(_("Select Server"), "server", server_kv_list); | |
878 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | 898 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
899 | |
900 #ifdef DEBUG | |
901 kvp = g_new0(PurpleKeyValuePair, 1); | |
902 kvp->key = g_strdup(_("QQ2005")); | |
903 kvp->value = g_strdup("qq2005"); | |
904 version_kv_list = g_list_append(version_kv_list, kvp); | |
905 | |
906 kvp = g_new0(PurpleKeyValuePair, 1); | |
907 kvp->key = g_strdup(_("QQ2007")); | |
908 kvp->value = g_strdup("qq2007"); | |
909 version_kv_list = g_list_append(version_kv_list, kvp); | |
910 | |
911 option = purple_account_option_list_new(_("Client Version"), "client_version", version_kv_list); | |
912 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
913 #endif | |
879 | 914 |
880 option = purple_account_option_bool_new(_("Connect by TCP"), "use_tcp", TRUE); | 915 option = purple_account_option_bool_new(_("Connect by TCP"), "use_tcp", TRUE); |
881 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | 916 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
882 | 917 |
883 option = purple_account_option_bool_new(_("Show server notice"), "show_notice", TRUE); | 918 option = purple_account_option_bool_new(_("Show server notice"), "show_notice", TRUE); |