Mercurial > pidgin.yaz
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 |