comparison libpurple/protocols/qq/qq.c @ 25438:4b8c4870b13a

propagate from branch 'im.pidgin.pidgin.next.minor' (head 7305b29db7bd00d3261f348c71674c93aa31b327) to branch 'im.pidgin.pidgin' (head d8c03c68d591d9392607d954942ee58b8618d946)
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Mon, 02 Mar 2009 04:18:40 +0000
parents 43b721aa4b76 d673ccc44a6e
children ff4212a5268f
comparison
equal deleted inserted replaced
25437:8998ca47e6d0 25438:4b8c4870b13a
34 #include "roomlist.h" 34 #include "roomlist.h"
35 #include "server.h" 35 #include "server.h"
36 #include "util.h" 36 #include "util.h"
37 37
38 #include "buddy_info.h" 38 #include "buddy_info.h"
39 #include "buddy_memo.h"
39 #include "buddy_opt.h" 40 #include "buddy_opt.h"
40 #include "buddy_list.h" 41 #include "buddy_list.h"
41 #include "char_conv.h" 42 #include "char_conv.h"
42 #include "group.h" 43 #include "group.h"
43 #include "group_im.h" 44 #include "group_im.h"
54 #include "qq_network.h" 55 #include "qq_network.h"
55 #include "send_file.h" 56 #include "send_file.h"
56 #include "utils.h" 57 #include "utils.h"
57 #include "version.h" 58 #include "version.h"
58 59
59 #define OPENQ_VERSION "0.3.2-p19" 60 #define OPENQ_VERSION "0.3.2-p20"
60 61
61 static GList *server_list_build(gchar select) 62 static GList *server_list_build(gchar select)
62 { 63 {
63 GList *list = NULL; 64 GList *list = NULL;
64 65
110 } 111 }
111 112
112 if (qd->use_tcp) { 113 if (qd->use_tcp) {
113 qd->servers = server_list_build('T'); 114 qd->servers = server_list_build('T');
114 return; 115 return;
115 } 116 }
116 117
117 qd->servers = server_list_build('U'); 118 qd->servers = server_list_build('U');
118 } 119 }
119 120
120 static void server_list_remove_all(qq_data *qd) 121 static void server_list_remove_all(qq_data *qd)
121 { 122 {
122 g_return_if_fail(qd != NULL); 123 g_return_if_fail(qd != NULL);
123 124
124 purple_debug_info("QQ", "free server list\n"); 125 purple_debug_info("QQ", "free server list\n");
125 g_list_free(qd->servers); 126 g_list_free(qd->servers);
126 qd->curr_server = NULL; 127 qd->curr_server = NULL;
127 } 128 }
128 129
129 static void qq_login(PurpleAccount *account) 130 static void qq_login(PurpleAccount *account)
130 { 131 {
147 148
148 presence = purple_account_get_presence(account); 149 presence = purple_account_get_presence(account);
149 if(purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) { 150 if(purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) {
150 qd->login_mode = QQ_LOGIN_MODE_HIDDEN; 151 qd->login_mode = QQ_LOGIN_MODE_HIDDEN;
151 } else if(purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY) 152 } else if(purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY)
152 || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY)) { 153 || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY)) {
153 qd->login_mode = QQ_LOGIN_MODE_AWAY; 154 qd->login_mode = QQ_LOGIN_MODE_AWAY;
154 } else { 155 } else {
155 qd->login_mode = QQ_LOGIN_MODE_NORMAL; 156 qd->login_mode = QQ_LOGIN_MODE_NORMAL;
156 } 157 }
157 158
171 } 172 }
172 } 173 }
173 174
174 qd->is_show_notice = purple_account_get_bool(account, "show_notice", TRUE); 175 qd->is_show_notice = purple_account_get_bool(account, "show_notice", TRUE);
175 qd->is_show_news = purple_account_get_bool(account, "show_news", TRUE); 176 qd->is_show_news = purple_account_get_bool(account, "show_news", TRUE);
177 qd->is_show_chat = purple_account_get_bool(account, "show_chat", TRUE);
176 178
177 qd->resend_times = purple_prefs_get_int("/plugins/prpl/qq/resend_times"); 179 qd->resend_times = purple_prefs_get_int("/plugins/prpl/qq/resend_times");
178 if (qd->resend_times <= 1) qd->itv_config.resend = 4; 180 if (qd->resend_times <= 1) qd->itv_config.resend = 4;
179 181
180 qd->itv_config.resend = purple_prefs_get_int("/plugins/prpl/qq/resend_interval"); 182 qd->itv_config.resend = purple_prefs_get_int("/plugins/prpl/qq/resend_interval");
251 return NULL; 253 return NULL;
252 254
253 status = g_string_new(""); 255 status = g_string_new("");
254 256
255 switch(bd->status) { 257 switch(bd->status) {
256 case QQ_BUDDY_OFFLINE: 258 case QQ_BUDDY_OFFLINE:
257 g_string_append(status, _("Offline")); 259 g_string_append(status, _("Offline"));
258 break; 260 break;
259 case QQ_BUDDY_ONLINE_NORMAL: 261 case QQ_BUDDY_ONLINE_NORMAL:
260 g_string_append(status, _("Online")); 262 g_string_append(status, _("Online"));
261 break; 263 break;
262 /* TODO What does this status mean? Labelling it as offline... */ 264 /* TODO What does this status mean? Labelling it as offline... */
263 case QQ_BUDDY_CHANGE_TO_OFFLINE: 265 case QQ_BUDDY_CHANGE_TO_OFFLINE:
264 g_string_append(status, _("Offline")); 266 g_string_append(status, _("Offline"));
265 break; 267 break;
266 case QQ_BUDDY_ONLINE_AWAY: 268 case QQ_BUDDY_ONLINE_AWAY:
267 g_string_append(status, _("Away")); 269 g_string_append(status, _("Away"));
268 break; 270 break;
269 case QQ_BUDDY_ONLINE_INVISIBLE: 271 case QQ_BUDDY_ONLINE_INVISIBLE:
270 g_string_append(status, _("Invisible")); 272 g_string_append(status, _("Invisible"));
271 break; 273 break;
272 case QQ_BUDDY_ONLINE_BUSY: 274 case QQ_BUDDY_ONLINE_BUSY:
273 g_string_append(status, _("Busy")); 275 g_string_append(status, _("Busy"));
274 break; 276 break;
275 default: 277 default:
276 g_string_printf(status, _("Unknown-%d"), bd->status); 278 g_string_printf(status, _("Unknown-%d"), bd->status);
277 } 279 }
278 280
279 return g_string_free(status, FALSE); 281 return g_string_free(status, FALSE);
280 } 282 }
281 283
308 tmp = g_strdup_printf("%d", bd->age); 310 tmp = g_strdup_printf("%d", bd->age);
309 purple_notify_user_info_add_pair(user_info, _("Age"), tmp); 311 purple_notify_user_info_add_pair(user_info, _("Age"), tmp);
310 g_free(tmp); 312 g_free(tmp);
311 313
312 switch (bd->gender) { 314 switch (bd->gender) {
313 case QQ_BUDDY_GENDER_GG: 315 case QQ_BUDDY_GENDER_GG:
314 purple_notify_user_info_add_pair(user_info, _("Gender"), _("Male")); 316 purple_notify_user_info_add_pair(user_info, _("Gender"), _("Male"));
315 break; 317 break;
316 case QQ_BUDDY_GENDER_MM: 318 case QQ_BUDDY_GENDER_MM:
317 purple_notify_user_info_add_pair(user_info, _("Gender"), _("Female")); 319 purple_notify_user_info_add_pair(user_info, _("Gender"), _("Female"));
318 break; 320 break;
319 case QQ_BUDDY_GENDER_UNKNOWN: 321 case QQ_BUDDY_GENDER_UNKNOWN:
320 purple_notify_user_info_add_pair(user_info, _("Gender"), _("Unknown")); 322 purple_notify_user_info_add_pair(user_info, _("Gender"), _("Unknown"));
321 break; 323 break;
322 default: 324 default:
323 tmp = g_strdup_printf("Error (%d)", bd->gender); 325 tmp = g_strdup_printf("Error (%d)", bd->gender);
324 purple_notify_user_info_add_pair(user_info, _("Gender"), tmp); 326 purple_notify_user_info_add_pair(user_info, _("Gender"), tmp);
325 g_free(tmp); 327 g_free(tmp);
326 } 328 }
327 329
328 if (bd->level) { 330 if (bd->level) {
329 tmp = g_strdup_printf("%d", bd->level); 331 tmp = g_strdup_printf("%d", bd->level);
330 purple_notify_user_info_add_pair(user_info, _("Level"), tmp); 332 purple_notify_user_info_add_pair(user_info, _("Level"), tmp);
358 360
359 g_string_free(str, TRUE); 361 g_string_free(str, TRUE);
360 362
361 #ifdef DEBUG 363 #ifdef DEBUG
362 tmp = g_strdup_printf( "%s (%04X)", 364 tmp = g_strdup_printf( "%s (%04X)",
363 qq_get_ver_desc(bd->client_tag), 365 qq_get_ver_desc(bd->client_tag),
364 bd->client_tag ); 366 bd->client_tag );
365 purple_notify_user_info_add_pair(user_info, _("Ver"), tmp); 367 purple_notify_user_info_add_pair(user_info, _("Ver"), tmp);
366 g_free(tmp); 368 g_free(tmp);
367 369
368 tmp = g_strdup_printf( "Ext 0x%X, Comm 0x%X", 370 tmp = g_strdup_printf( "Ext 0x%X, Comm 0x%X",
369 bd->ext_flag, bd->comm_flag ); 371 bd->ext_flag, bd->comm_flag );
370 purple_notify_user_info_add_pair(user_info, _("Flag"), tmp); 372 purple_notify_user_info_add_pair(user_info, _("Flag"), tmp);
371 g_free(tmp); 373 g_free(tmp);
372 #endif 374 #endif
373 } 375 }
374 376
405 { 407 {
406 PurpleStatusType *status; 408 PurpleStatusType *status;
407 GList *types = NULL; 409 GList *types = NULL;
408 410
409 status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE, 411 status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE,
410 "available", _("Available"), FALSE, TRUE, FALSE); 412 "available", _("Available"), TRUE, TRUE, FALSE);
411 types = g_list_append(types, status); 413 types = g_list_append(types, status);
412 414
413 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, 415 status = purple_status_type_new_full(PURPLE_STATUS_AWAY,
414 "away", _("Away"), FALSE, TRUE, FALSE); 416 "away", _("Away"), TRUE, TRUE, FALSE);
415 types = g_list_append(types, status); 417 types = g_list_append(types, status);
416 418
417 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE, 419 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE,
418 "invisible", _("Invisible"), FALSE, TRUE, FALSE); 420 "invisible", _("Invisible"), TRUE, TRUE, FALSE);
419 types = g_list_append(types, status); 421 types = g_list_append(types, status);
420 422
421 status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE, 423 status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE,
422 "busy", _("Busy"), TRUE, TRUE, FALSE); 424 "busy", _("Busy"), TRUE, TRUE, FALSE);
423 types = g_list_append(types, status); 425 types = g_list_append(types, status);
424 426
425 status = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, 427 status = purple_status_type_new_full(PURPLE_STATUS_OFFLINE,
426 "offline", _("Offline"), FALSE, TRUE, FALSE); 428 "offline", _("Offline"), TRUE, TRUE, FALSE);
427 types = g_list_append(types, status); 429 types = g_list_append(types, status);
428 430
429 status = purple_status_type_new_full(PURPLE_STATUS_MOBILE, 431 status = purple_status_type_new_full(PURPLE_STATUS_MOBILE,
430 "mobile", NULL, FALSE, FALSE, TRUE); 432 "mobile", NULL, FALSE, FALSE, TRUE);
431 types = g_list_append(types, status); 433 types = g_list_append(types, status);
624 626
625 info = g_string_new("<html><body>"); 627 info = g_string_new("<html><body>");
626 g_string_append(info, _("<p><b>Original Author</b>:<br>\n")); 628 g_string_append(info, _("<p><b>Original Author</b>:<br>\n"));
627 g_string_append(info, "puzzlebird<br>\n"); 629 g_string_append(info, "puzzlebird<br>\n");
628 g_string_append(info, "<br>\n"); 630 g_string_append(info, "<br>\n");
631
629 g_string_append(info, _("<p><b>Code Contributors</b>:<br>\n")); 632 g_string_append(info, _("<p><b>Code Contributors</b>:<br>\n"));
630 g_string_append(info, "gfhuang(poppyer) : patches for libpurple 2.0.0beta2, maintainer<br>\n"); 633 g_string_append(info, "gfhuang(poppyer) : patches for libpurple 2.0.0beta2, maintainer<br>\n");
631 g_string_append(info, "Yuan Qingyun : patches for libpurple 1.5.0, maintainer<br>\n"); 634 g_string_append(info, "Yuan Qingyun : patches for libpurple 1.5.0, maintainer<br>\n");
632 g_string_append(info, "henryouly : file transfer, udp sock5 proxy and qq_show, maintainer<br>\n"); 635 g_string_append(info, "henryouly : file transfer, udp sock5 proxy and qq_show, maintainer<br>\n");
633 g_string_append(info, "hzhr : maintainer<br>\n"); 636 g_string_append(info, "hzhr : maintainer<br>\n");
639 g_string_append(info, "markhuetsch : OpenQ merge into libpurple, maintainer 2006-2007<br>\n"); 642 g_string_append(info, "markhuetsch : OpenQ merge into libpurple, maintainer 2006-2007<br>\n");
640 g_string_append(info, "ccpaging : maintainer since 2007<br>\n"); 643 g_string_append(info, "ccpaging : maintainer since 2007<br>\n");
641 g_string_append(info, "icesky : maintainer since 2007<br>\n"); 644 g_string_append(info, "icesky : maintainer since 2007<br>\n");
642 g_string_append(info, "csyfek : faces, maintainer since 2007<br>\n"); 645 g_string_append(info, "csyfek : faces, maintainer since 2007<br>\n");
643 g_string_append(info, "<br>\n"); 646 g_string_append(info, "<br>\n");
647
644 g_string_append(info, _("<p><b>Lovely Patch Writers</b>:<br>\n")); 648 g_string_append(info, _("<p><b>Lovely Patch Writers</b>:<br>\n"));
645 g_string_append(info, "gnap : message displaying, documentation<br>\n"); 649 g_string_append(info, "gnap : message displaying, documentation<br>\n");
646 g_string_append(info, "manphiz : qun processing<br>\n"); 650 g_string_append(info, "manphiz : qun processing<br>\n");
647 g_string_append(info, "moo : qun processing<br>\n"); 651 g_string_append(info, "moo : qun processing<br>\n");
648 g_string_append(info, "Coly Li : qun processing<br>\n"); 652 g_string_append(info, "Coly Li : qun processing<br>\n");
649 g_string_append(info, "Emil Alexiev : captcha verification on login based on LumaQQ for MAC (2007), login, add buddy, remove buddy, message exchange and logout<br>\n"); 653 g_string_append(info, "Emil Alexiev : captcha verification on login based on LumaQQ for MAC (2007), login, add buddy, remove buddy, message exchange and logout<br>\n");
654 g_string_append(info, "Chengming Wang : buddy memo<br>\n");
655 g_string_append(info, "lonicerae : chat room window bugfix, server list bugfix, buddy memo<br>\n");
650 g_string_append(info, "<br>\n"); 656 g_string_append(info, "<br>\n");
657
651 g_string_append(info, _("<p><b>Acknowledgement</b>:<br>\n")); 658 g_string_append(info, _("<p><b>Acknowledgement</b>:<br>\n"));
652 g_string_append(info, "Shufeng Tan : http://sf.net/projects/perl-oicq<br>\n"); 659 g_string_append(info, "Shufeng Tan : http://sf.net/projects/perl-oicq<br>\n");
653 g_string_append(info, "Jeff Ye : http://www.sinomac.com<br>\n"); 660 g_string_append(info, "Jeff Ye : http://www.sinomac.com<br>\n");
654 g_string_append(info, "Hu Zheng : http://forlinux.yeah.net<br>\n"); 661 g_string_append(info, "Hu Zheng : http://forlinux.yeah.net<br>\n");
655 g_string_append(info, "yunfan : http://www.myswear.net<br>\n"); 662 g_string_append(info, "yunfan : http://www.myswear.net<br>\n");
656 g_string_append(info, "OpenQ Team : http://openq.linuxsir.org<br>\n"); 663 g_string_append(info, "OpenQ Team : http://openq.linuxsir.org<br>\n");
657 g_string_append(info, "LumaQQ Team : http://lumaqq.linuxsir.org<br>\n"); 664 g_string_append(info, "LumaQQ Team : http://lumaqq.linuxsir.org<br>\n");
658 g_string_append(info, "khc(at)pidgin.im<br>\n"); 665 g_string_append(info, "Pidgin Team : http://www.pidgin.im<br>\n");
659 g_string_append(info, "qulogic(at)pidgin.im<br>\n");
660 g_string_append(info, "rlaager(at)pidgin.im<br>\n");
661 g_string_append(info, "Huang Guan : http://home.xxsyzx.com<br>\n"); 666 g_string_append(info, "Huang Guan : http://home.xxsyzx.com<br>\n");
662 g_string_append(info, "OpenQ Google Group : http://groups.google.com/group/openq<br>\n"); 667 g_string_append(info, "OpenQ Google Group : http://groups.google.com/group/openq<br>\n");
668 g_string_append(info, "<br>\n");
669
670 g_string_append(info, _("<p><b>Scrupulous Testers</b>:<br>\n"));
671 g_string_append(info, "yegle<br>\n");
672 g_string_append(info, "cnzhangbx<br>\n");
673 g_string_append(info, "casparant<br>\n");
674 g_string_append(info, "wd<br>\n");
675 g_string_append(info, "x6719620<br>\n");
676 g_string_append(info, "netelk<br>\n");
677 g_string_append(info, "and more, please let me know... thank you!<br>\n");
663 g_string_append(info, "<br>\n"); 678 g_string_append(info, "<br>\n");
664 g_string_append(info, _("<p><i>And, all the boys in the backroom...</i><br>\n")); 679 g_string_append(info, _("<p><i>And, all the boys in the backroom...</i><br>\n"));
665 g_string_append(info, _("<i>Feel free to join us!</i> :)")); 680 g_string_append(info, _("<i>Feel free to join us!</i> :)"));
666 g_string_append(info, "</body></html>"); 681 g_string_append(info, "</body></html>");
667 682
671 g_free(title); 686 g_free(title);
672 g_string_free(info, TRUE); 687 g_string_free(info, TRUE);
673 } 688 }
674 689
675 /* 690 /*
676 static void _qq_menu_search_or_add_permanent_group(PurplePluginAction *action) 691 static void _qq_menu_search_or_add_permanent_group(PurplePluginAction *action)
677 { 692 {
678 purple_roomlist_show_with_account(NULL); 693 purple_roomlist_show_with_account(NULL);
679 } 694 }
680 */ 695 */
681 696
682 /* 697 /*
683 static void _qq_menu_create_permanent_group(PurplePluginAction * action) 698 static void _qq_menu_create_permanent_group(PurplePluginAction * action)
684 { 699 {
685 PurpleConnection *gc = (PurpleConnection *) action->context; 700 PurpleConnection *gc = (PurpleConnection *) action->context;
686 purple_request_input(gc, _("Create QQ Qun"), 701 purple_request_input(gc, _("Create QQ Qun"),
687 _("Input Qun name here"), 702 _("Input Qun name here"),
688 _("Only QQ members can create permanent Qun"), 703 _("Only QQ members can create permanent Qun"),
689 "OpenQ", FALSE, FALSE, NULL, 704 "OpenQ", FALSE, FALSE, NULL,
690 _("Create"), G_CALLBACK(qq_create_room), _("Cancel"), NULL, gc); 705 _("Create"), G_CALLBACK(qq_create_room), _("Cancel"), NULL, gc);
691 } 706 }
692 */ 707 */
693 708
694 static void action_chat_quit(PurpleBlistNode * node) 709 static void action_chat_quit(PurpleBlistNode * node)
695 { 710 {
696 PurpleChat *chat = (PurpleChat *)node; 711 PurpleChat *chat = (PurpleChat *)node;
741 qq_buddy_data *bd; 756 qq_buddy_data *bd;
742 757
743 g_return_if_fail (PURPLE_BLIST_NODE_IS_BUDDY (node)); 758 g_return_if_fail (PURPLE_BLIST_NODE_IS_BUDDY (node));
744 buddy = (PurpleBuddy *) node; 759 buddy = (PurpleBuddy *) node;
745 bd = (qq_buddy_data *) buddy->proto_data; 760 bd = (qq_buddy_data *) buddy->proto_data;
746 /* if (is_online (bd->status)) { */ 761 /* if (is_online (bd->status)) { */
747 gc = purple_account_get_connection (buddy->account); 762 gc = purple_account_get_connection (buddy->account);
748 g_return_if_fail (gc != NULL && gc->proto_data != NULL); 763 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
749 qq_send_file(gc, buddy->name, NULL); 764 qq_send_file(gc, buddy->name, NULL);
750 /* } */ 765 /* } */
751 } 766 }
752 #endif 767 #endif
753 768
754 /* protocol related menus */ 769 /* protocol related menus */
755 static GList *qq_actions(PurplePlugin *plugin, gpointer context) 770 static GList *qq_actions(PurplePlugin *plugin, gpointer context)
783 m = g_list_append(m, act); 798 m = g_list_append(m, act);
784 799
785 act = purple_plugin_action_new(_("About OpenQ"), action_about_openq); 800 act = purple_plugin_action_new(_("About OpenQ"), action_about_openq);
786 m = g_list_append(m, act); 801 m = g_list_append(m, act);
787 /* 802 /*
788 act = purple_plugin_action_new(_("Qun: Search a permanent Qun"), _qq_menu_search_or_add_permanent_group); 803 act = purple_plugin_action_new(_("Qun: Search a permanent Qun"), _qq_menu_search_or_add_permanent_group);
789 m = g_list_append(m, act); 804 m = g_list_append(m, act);
790 805
791 act = purple_plugin_action_new(_("Qun: Create a permanent Qun"), _qq_menu_create_permanent_group); 806 act = purple_plugin_action_new(_("Qun: Create a permanent Qun"), _qq_menu_create_permanent_group);
792 m = g_list_append(m, act); 807 m = g_list_append(m, act);
793 */ 808 */
794 809
795 return m; 810 return m;
796 } 811 }
797 812
806 gc = purple_account_get_connection(purple_buddy_get_account(buddy)); 821 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
807 822
808 qq_add_buddy(gc, buddy, NULL); 823 qq_add_buddy(gc, buddy, NULL);
809 } 824 }
810 825
826 static void qq_modify_buddy_memo_from_menu_cb(PurpleBlistNode *node, gpointer data)
827 {
828 PurpleBuddy *buddy;
829 qq_buddy_data *bd;
830 PurpleConnection *gc;
831 guint32 bd_uid;
832
833 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
834
835 buddy = (PurpleBuddy *)node;
836 g_return_if_fail(NULL != buddy);
837
838 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
839 g_return_if_fail(NULL != gc);
840
841 bd = (qq_buddy_data *)purple_buddy_get_protocol_data(buddy);
842 g_return_if_fail(NULL != bd);
843 bd_uid = bd->uid;
844
845 /* param: gc, uid, update_class, action
846 * here, update_class is set to bd_uid. because some memo packages returned
847 * without uid, which will make us confused */
848 qq_request_buddy_memo(gc, bd_uid, bd_uid, QQ_BUDDY_MEMO_MODIFY);
849 }
850
811 static GList *qq_buddy_menu(PurpleBuddy *buddy) 851 static GList *qq_buddy_menu(PurpleBuddy *buddy)
812 { 852 {
813 GList *m = NULL; 853 GList *m = NULL;
814 PurpleMenuAction *act; 854 PurpleMenuAction *act;
815 /*
816 PurpleConnection *gc = purple_account_get_connection(buddy->account);
817 qq_data *qd = gc->proto_data;
818 */
819 qq_buddy_data *bd = purple_buddy_get_protocol_data(buddy); 855 qq_buddy_data *bd = purple_buddy_get_protocol_data(buddy);
820 856
821 if (bd == NULL) { 857 if (bd == NULL) {
822 act = purple_menu_action_new(_("Add Buddy"), 858 act = purple_menu_action_new(_("Add Buddy"),
823 PURPLE_CALLBACK(qq_add_buddy_from_menu_cb), 859 PURPLE_CALLBACK(qq_add_buddy_from_menu_cb),
824 NULL, NULL); 860 NULL, NULL);
825 m = g_list_append(m, act); 861 m = g_list_append(m, act);
826
827 return m; 862 return m;
828 863 }
829 } 864
830 865
831 /* TODO : not working, temp commented out by gfhuang */ 866 act = purple_menu_action_new(_("Modify Buddy Memo"),
867 PURPLE_CALLBACK(qq_modify_buddy_memo_from_menu_cb),
868 NULL, NULL);
869 m = g_list_append(m, act);
870
871
872 /* TODO : not working, temp commented out by gfhuang */
832 #if 0 873 #if 0
833 if (bd && is_online(bd->status)) { 874 if (bd && is_online(bd->status)) {
834 act = purple_menu_action_new(_("Send File"), PURPLE_CALLBACK(_qq_menu_send_file), NULL, NULL); /* add NULL by gfhuang */ 875 act = purple_menu_action_new(_("Send File"), PURPLE_CALLBACK(_qq_menu_send_file), NULL, NULL); /* add NULL by gfhuang */
835 m = g_list_append(m, act); 876 m = g_list_append(m, act);
836 } 877 }
1008 PURPLE_PRIORITY_DEFAULT, /**< priority */ 1049 PURPLE_PRIORITY_DEFAULT, /**< priority */
1009 1050
1010 "prpl-qq", /**< id */ 1051 "prpl-qq", /**< id */
1011 "QQ", /**< name */ 1052 "QQ", /**< name */
1012 DISPLAY_VERSION, /**< version */ 1053 DISPLAY_VERSION, /**< version */
1013 /** summary */ 1054 /** summary */
1014 N_("QQ Protocol Plugin"), 1055 N_("QQ Protocol Plugin"),
1015 /** description */ 1056 /** description */
1016 N_("QQ Protocol Plugin"), 1057 N_("QQ Protocol Plugin"),
1017 NULL, /**< author */ 1058 NULL, /**< author */
1018 PURPLE_WEBSITE, /**< homepage */ 1059 PURPLE_WEBSITE, /**< homepage */
1019 1060
1020 NULL, /**< load */ 1061 NULL, /**< load */
1039 PurpleAccountOption *option; 1080 PurpleAccountOption *option;
1040 PurpleKeyValuePair *kvp; 1081 PurpleKeyValuePair *kvp;
1041 GList *server_list = NULL; 1082 GList *server_list = NULL;
1042 GList *server_kv_list = NULL; 1083 GList *server_kv_list = NULL;
1043 GList *it; 1084 GList *it;
1044 //#ifdef DEBUG 1085 /* #ifdef DEBUG */
1045 GList *version_kv_list = NULL; 1086 GList *version_kv_list = NULL;
1046 //#endif 1087 /* #endif */
1047 1088
1048 server_list = server_list_build('A'); 1089 server_list = server_list_build('A');
1049 1090
1050 purple_prefs_remove("/plugins/prpl/qq/serverlist"); 1091 purple_prefs_remove("/plugins/prpl/qq/serverlist");
1051 1092
1096 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); 1137 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
1097 1138
1098 option = purple_account_option_bool_new(_("Show server news"), "show_news", TRUE); 1139 option = purple_account_option_bool_new(_("Show server news"), "show_news", TRUE);
1099 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); 1140 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
1100 1141
1142 option = purple_account_option_bool_new(_("Show chat room when msg comes"), "show_chat", TRUE);
1143 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
1144
1101 option = purple_account_option_int_new(_("Keep alive interval (seconds)"), "keep_alive_interval", 60); 1145 option = purple_account_option_int_new(_("Keep alive interval (seconds)"), "keep_alive_interval", 60);
1102 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); 1146 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
1103 1147
1104 option = purple_account_option_int_new(_("Update interval (seconds)"), "update_interval", 300); 1148 option = purple_account_option_int_new(_("Update interval (seconds)"), "update_interval", 300);
1105 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); 1149 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
1106 1150
1107 purple_prefs_add_none("/plugins/prpl/qq"); 1151 purple_prefs_add_none("/plugins/prpl/qq");
1108 purple_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE); 1152 purple_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE);
1109 purple_prefs_add_bool("/plugins/prpl/qq/show_fake_video", FALSE); 1153 purple_prefs_add_bool("/plugins/prpl/qq/show_fake_video", FALSE);
1110 purple_prefs_add_bool("/plugins/prpl/qq/auto_popup_conversation", TRUE);
1111 purple_prefs_add_bool("/plugins/prpl/qq/auto_get_authorize_info", TRUE); 1154 purple_prefs_add_bool("/plugins/prpl/qq/auto_get_authorize_info", TRUE);
1112 purple_prefs_add_int("/plugins/prpl/qq/resend_interval", 3); 1155 purple_prefs_add_int("/plugins/prpl/qq/resend_interval", 3);
1113 purple_prefs_add_int("/plugins/prpl/qq/resend_times", 10); 1156 purple_prefs_add_int("/plugins/prpl/qq/resend_times", 10);
1114 } 1157 }
1115 1158