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);