Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/msn.c @ 20449:4403cecc7cd6
propagate from branch 'im.pidgin.pidgin' (head 850e223e9597fdc482eebe75c00efda941b3bdb6)
to branch 'im.pidgin.cpw.khc.msnp14' (head 92f5b4953a29318b630e01b296e54d1037fe96d3)
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Sun, 03 Jun 2007 00:40:27 +0000 |
parents | 02abb6713cf2 8e722e947e00 |
children | 69febfa6d307 |
comparison
equal
deleted
inserted
replaced
17667:98f27c7f0ef5 | 20449:4403cecc7cd6 |
---|---|
35 #include "state.h" | 35 #include "state.h" |
36 #include "util.h" | 36 #include "util.h" |
37 #include "cmds.h" | 37 #include "cmds.h" |
38 #include "core.h" | 38 #include "core.h" |
39 #include "prpl.h" | 39 #include "prpl.h" |
40 #include "msn-utils.h" | 40 #include "msnutils.h" |
41 #include "version.h" | 41 #include "version.h" |
42 | 42 |
43 #include "switchboard.h" | 43 #include "switchboard.h" |
44 #include "notification.h" | 44 #include "notification.h" |
45 #include "sync.h" | 45 #include "sync.h" |
121 purple_conversation_write(conv, NULL, _("You have just sent a Nudge!"), PURPLE_MESSAGE_SYSTEM, time(NULL)); | 121 purple_conversation_write(conv, NULL, _("You have just sent a Nudge!"), PURPLE_MESSAGE_SYSTEM, time(NULL)); |
122 | 122 |
123 return PURPLE_CMD_RET_OK; | 123 return PURPLE_CMD_RET_OK; |
124 } | 124 } |
125 | 125 |
126 static void | 126 void |
127 msn_act_id(PurpleConnection *gc, const char *entry) | 127 msn_act_id(PurpleConnection *gc, const char *entry) |
128 { | 128 { |
129 MsnCmdProc *cmdproc; | 129 MsnCmdProc *cmdproc; |
130 MsnSession *session; | 130 MsnSession *session; |
131 PurpleAccount *account; | 131 PurpleAccount *account; |
132 const char *alias; | 132 const char *alias; |
133 | |
134 char *soapbody; | |
135 MsnSoapReq *soap_request; | |
133 | 136 |
134 session = gc->proto_data; | 137 session = gc->proto_data; |
135 cmdproc = session->notification->cmdproc; | 138 cmdproc = session->notification->cmdproc; |
136 account = purple_connection_get_account(gc); | 139 account = purple_connection_get_account(gc); |
137 | 140 |
145 purple_notify_error(gc, NULL, | 148 purple_notify_error(gc, NULL, |
146 _("Your new MSN friendly name is too long."), NULL); | 149 _("Your new MSN friendly name is too long."), NULL); |
147 return; | 150 return; |
148 } | 151 } |
149 | 152 |
150 msn_cmdproc_send(cmdproc, "REA", "%s %s", | 153 if (*alias == '\0') { |
151 purple_account_get_username(account), | 154 alias = purple_url_encode(purple_account_get_username(account)); |
152 alias); | 155 } |
156 | |
157 msn_cmdproc_send(cmdproc, "PRP", "MFN %s", alias); | |
158 | |
159 soapbody = g_strdup_printf(MSN_CONTACT_UPDATE_TEMPLATE, alias); | |
160 /*build SOAP and POST it*/ | |
161 soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, | |
162 MSN_ADDRESS_BOOK_POST_URL, | |
163 MSN_CONTACT_UPDATE_SOAP_ACTION, | |
164 soapbody, | |
165 NULL, | |
166 NULL); | |
167 | |
168 session->contact->soapconn->read_cb = NULL; | |
169 msn_soap_post(session->contact->soapconn, | |
170 soap_request, | |
171 msn_contact_connect_init); | |
172 | |
173 g_free(soapbody); | |
153 } | 174 } |
154 | 175 |
155 static void | 176 static void |
156 msn_set_prp(PurpleConnection *gc, const char *type, const char *entry) | 177 msn_set_prp(PurpleConnection *gc, const char *type, const char *entry) |
157 { | 178 { |
430 PurpleXfer *xfer; | 451 PurpleXfer *xfer; |
431 | 452 |
432 session = gc->proto_data; | 453 session = gc->proto_data; |
433 | 454 |
434 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); | 455 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); |
456 | |
435 if (xfer) | 457 if (xfer) |
436 { | 458 { |
437 slplink = msn_session_get_slplink(session, who); | 459 slplink = msn_session_get_slplink(session, who); |
438 | 460 |
439 xfer->data = slplink; | 461 xfer->data = slplink; |
481 msn_list_icon(PurpleAccount *a, PurpleBuddy *b) | 503 msn_list_icon(PurpleAccount *a, PurpleBuddy *b) |
482 { | 504 { |
483 return "msn"; | 505 return "msn"; |
484 } | 506 } |
485 | 507 |
508 /* | |
509 * Set the User status text | |
510 * Add the PSM String Using "Name - PSM String" format | |
511 */ | |
486 static char * | 512 static char * |
487 msn_status_text(PurpleBuddy *buddy) | 513 msn_status_text(PurpleBuddy *buddy) |
488 { | 514 { |
489 PurplePresence *presence; | 515 PurplePresence *presence; |
490 PurpleStatus *status; | 516 PurpleStatus *status; |
517 const char *msg, *name, *cmedia; | |
518 char *psm_str, *tmp2, *text; | |
491 | 519 |
492 presence = purple_buddy_get_presence(buddy); | 520 presence = purple_buddy_get_presence(buddy); |
493 status = purple_presence_get_active_status(presence); | 521 status = purple_presence_get_active_status(presence); |
494 | 522 |
495 if (!purple_presence_is_available(presence) && !purple_presence_is_idle(presence)) | 523 msg = purple_status_get_attr_string(status, "message"); |
496 { | 524 cmedia=purple_status_get_attr_string(status, "currentmedia"); |
497 return g_strdup(purple_status_get_name(status)); | 525 |
526 if (!purple_presence_is_available(presence) && !purple_presence_is_idle(presence)){ | |
527 name = purple_status_get_name(status); | |
528 }else{ | |
529 name = NULL; | |
530 } | |
531 | |
532 if (cmedia != NULL) { | |
533 if(name) { | |
534 tmp2 = g_strdup_printf("%s - %s", name, cmedia); | |
535 text = g_markup_escape_text(tmp2, -1); | |
536 } else { | |
537 text = g_markup_escape_text(cmedia, -1); | |
538 } | |
539 return text; | |
540 } else if (msg != NULL) { | |
541 tmp2 = purple_markup_strip_html(msg); | |
542 if (name){ | |
543 psm_str = g_strdup_printf("%s - %s", name, tmp2); | |
544 g_free(tmp2); | |
545 }else{ | |
546 psm_str = tmp2; | |
547 } | |
548 text = g_markup_escape_text(psm_str, -1); | |
549 g_free(psm_str); | |
550 return text; | |
551 } else { | |
552 if (!purple_presence_is_available(presence) && !purple_presence_is_idle(presence)){ | |
553 psm_str = g_strdup(purple_status_get_name(status)); | |
554 text = g_markup_escape_text(psm_str, -1); | |
555 g_free(psm_str); | |
556 return text; | |
557 } | |
498 } | 558 } |
499 | 559 |
500 return NULL; | 560 return NULL; |
501 } | 561 } |
502 | 562 |
510 user = buddy->proto_data; | 570 user = buddy->proto_data; |
511 | 571 |
512 | 572 |
513 if (purple_presence_is_online(presence)) | 573 if (purple_presence_is_online(presence)) |
514 { | 574 { |
575 const char *psm, *currentmedia; | |
576 char *tmp; | |
577 | |
578 psm = purple_status_get_attr_string(status, "message"); | |
579 currentmedia = purple_status_get_attr_string(status, "currentmedia"); | |
580 | |
515 purple_notify_user_info_add_pair(user_info, _("Status"), | 581 purple_notify_user_info_add_pair(user_info, _("Status"), |
516 (purple_presence_is_idle(presence) ? _("Idle") : purple_status_get_name(status))); | 582 (purple_presence_is_idle(presence) ? _("Idle") : purple_status_get_name(status))); |
583 if (psm) { | |
584 tmp = g_markup_escape_text(psm, -1); | |
585 purple_notify_user_info_add_pair(user_info, _("PSM"), tmp); | |
586 g_free(tmp); | |
587 } | |
588 if (currentmedia) { | |
589 tmp = g_markup_escape_text(currentmedia, -1); | |
590 purple_notify_user_info_add_pair(user_info, _("Current media"), tmp); | |
591 g_free(tmp); | |
592 } | |
517 } | 593 } |
518 | 594 |
519 if (full && user) | 595 if (full && user) |
520 { | 596 { |
521 purple_notify_user_info_add_pair(user_info, _("Has you"), | 597 purple_notify_user_info_add_pair(user_info, _("Has you"), |
536 static GList * | 612 static GList * |
537 msn_status_types(PurpleAccount *account) | 613 msn_status_types(PurpleAccount *account) |
538 { | 614 { |
539 PurpleStatusType *status; | 615 PurpleStatusType *status; |
540 GList *types = NULL; | 616 GList *types = NULL; |
541 | 617 #if 0 |
542 status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE, | 618 status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE, |
543 NULL, NULL, FALSE, TRUE, FALSE); | 619 NULL, NULL, FALSE, TRUE, FALSE); |
620 #endif | |
621 status = purple_status_type_new_with_attrs( | |
622 PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, | |
623 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), | |
624 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING), | |
625 NULL); | |
544 types = g_list_append(types, status); | 626 types = g_list_append(types, status); |
545 | 627 |
546 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, | 628 status = purple_status_type_new_with_attrs( |
547 NULL, NULL, FALSE, TRUE, FALSE); | 629 PURPLE_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE, |
630 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), | |
631 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING), | |
632 NULL); | |
548 types = g_list_append(types, status); | 633 types = g_list_append(types, status); |
549 | 634 |
550 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, | 635 status = purple_status_type_new_with_attrs( |
551 "brb", _("Be Right Back"), FALSE, TRUE, FALSE); | 636 PURPLE_STATUS_AWAY, "brb", _("Be Right Back"), TRUE, TRUE, FALSE, |
637 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), | |
638 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING), | |
639 NULL); | |
552 types = g_list_append(types, status); | 640 types = g_list_append(types, status); |
553 | 641 |
554 status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE, | 642 status = purple_status_type_new_with_attrs( |
555 "busy", _("Busy"), FALSE, TRUE, FALSE); | 643 PURPLE_STATUS_UNAVAILABLE, "busy", _("Busy"), TRUE, TRUE, FALSE, |
644 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), | |
645 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING), | |
646 NULL); | |
556 types = g_list_append(types, status); | 647 types = g_list_append(types, status); |
557 | 648 status = purple_status_type_new_with_attrs( |
558 status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE, | 649 PURPLE_STATUS_UNAVAILABLE, "phone", _("On the Phone"), TRUE, TRUE, FALSE, |
559 "phone", _("On the Phone"), FALSE, TRUE, FALSE); | 650 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
651 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING), | |
652 NULL); | |
560 types = g_list_append(types, status); | 653 types = g_list_append(types, status); |
561 | 654 status = purple_status_type_new_with_attrs( |
562 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, | 655 PURPLE_STATUS_AWAY, "lunch", _("Out to Lunch"), TRUE, TRUE, FALSE, |
563 "lunch", _("Out to Lunch"), FALSE, TRUE, FALSE); | 656 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
657 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING), | |
658 NULL); | |
564 types = g_list_append(types, status); | 659 types = g_list_append(types, status); |
565 | 660 |
566 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE, | 661 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE, |
567 NULL, NULL, FALSE, TRUE, FALSE); | 662 NULL, NULL, FALSE, TRUE, FALSE); |
568 types = g_list_append(types, status); | 663 types = g_list_append(types, status); |
569 | 664 |
570 status = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, | 665 status = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, |
571 NULL, NULL, FALSE, TRUE, FALSE); | 666 NULL, NULL, FALSE, TRUE, FALSE); |
572 types = g_list_append(types, status); | 667 types = g_list_append(types, status); |
573 | 668 |
574 status = purple_status_type_new_full(PURPLE_STATUS_MOBILE, | 669 status = purple_status_type_new_full(PURPLE_STATUS_MOBILE, |
575 "mobile", NULL, FALSE, FALSE, TRUE); | 670 "mobile", NULL, FALSE, FALSE, TRUE); |
576 types = g_list_append(types, status); | 671 types = g_list_append(types, status); |
577 | 672 |
578 return types; | 673 return types; |
579 } | 674 } |
580 | 675 |
581 static GList * | 676 static GList * |
582 msn_actions(PurplePlugin *plugin, gpointer context) | 677 msn_actions(PurplePlugin *plugin, gpointer context) |
755 PurpleBuddy *buddy = purple_find_buddy(gc->account, who); | 850 PurpleBuddy *buddy = purple_find_buddy(gc->account, who); |
756 MsnMessage *msg; | 851 MsnMessage *msg; |
757 char *msgformat; | 852 char *msgformat; |
758 char *msgtext; | 853 char *msgtext; |
759 | 854 |
855 purple_debug_info("MaYuan","send IM {%s} to %s\n",message,who); | |
760 account = purple_connection_get_account(gc); | 856 account = purple_connection_get_account(gc); |
761 | 857 |
762 if (buddy) { | 858 if (buddy) { |
763 PurplePresence *p = purple_buddy_get_presence(buddy); | 859 PurplePresence *p = purple_buddy_get_presence(buddy); |
764 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) { | 860 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) { |
768 return 1; | 864 return 1; |
769 } | 865 } |
770 } | 866 } |
771 | 867 |
772 msn_import_html(message, &msgformat, &msgtext); | 868 msn_import_html(message, &msgformat, &msgtext); |
773 | 869 if(msn_user_is_online(account, who)|| |
774 if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564) | 870 msn_user_is_yahoo(account, who)){ |
775 { | 871 /*User online,then send Online Instant Message*/ |
872 | |
873 if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564) | |
874 { | |
875 g_free(msgformat); | |
876 g_free(msgtext); | |
877 | |
878 return -E2BIG; | |
879 } | |
880 | |
881 msg = msn_message_new_plain(msgtext); | |
882 msg->remote_user = g_strdup(who); | |
883 msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat); | |
884 | |
776 g_free(msgformat); | 885 g_free(msgformat); |
777 g_free(msgtext); | 886 g_free(msgtext); |
778 | 887 |
779 return -E2BIG; | 888 purple_debug_info("MaYuan","prepare to send online Message\n"); |
780 } | 889 if (g_ascii_strcasecmp(who, purple_account_get_username(account))) |
781 | 890 { |
782 msg = msn_message_new_plain(msgtext); | 891 MsnSession *session; |
783 msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat); | 892 MsnSwitchBoard *swboard; |
784 | 893 |
785 g_free(msgformat); | 894 session = gc->proto_data; |
786 g_free(msgtext); | 895 if(msn_user_is_yahoo(account,who)){ |
787 | 896 /*we send the online and offline Message to Yahoo User via UBM*/ |
788 if (g_ascii_strcasecmp(who, purple_account_get_username(account))) | 897 purple_debug_info("MaYuan","send to Yahoo User\n"); |
789 { | 898 uum_send_msg(session,msg); |
899 }else{ | |
900 purple_debug_info("MaYuan","send via switchboard\n"); | |
901 swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM); | |
902 msn_switchboard_send_msg(swboard, msg, TRUE); | |
903 } | |
904 } | |
905 else | |
906 { | |
907 char *body_str, *body_enc, *pre, *post; | |
908 const char *format; | |
909 MsnIMData *imdata = g_new0(MsnIMData, 1); | |
910 /* | |
911 * In MSN, you can't send messages to yourself, so | |
912 * we'll fake like we received it ;) | |
913 */ | |
914 body_str = msn_message_to_string(msg); | |
915 body_enc = g_markup_escape_text(body_str, -1); | |
916 g_free(body_str); | |
917 | |
918 format = msn_message_get_attr(msg, "X-MMS-IM-Format"); | |
919 msn_parse_format(format, &pre, &post); | |
920 body_str = g_strdup_printf("%s%s%s", pre ? pre : "", | |
921 body_enc ? body_enc : "", post ? post : ""); | |
922 g_free(body_enc); | |
923 g_free(pre); | |
924 g_free(post); | |
925 | |
926 serv_got_typing_stopped(gc, who); | |
927 imdata->gc = gc; | |
928 imdata->who = who; | |
929 imdata->msg = body_str; | |
930 imdata->flags = flags; | |
931 imdata->when = time(NULL); | |
932 g_idle_add(msn_send_me_im, imdata); | |
933 } | |
934 | |
935 msn_message_destroy(msg); | |
936 }else { | |
937 /*send Offline Instant Message,only to MSN Passport User*/ | |
790 MsnSession *session; | 938 MsnSession *session; |
791 MsnSwitchBoard *swboard; | 939 MsnOim *oim; |
792 | 940 char *friendname; |
941 | |
942 purple_debug_info("MaYuan","prepare to send offline Message\n"); | |
793 session = gc->proto_data; | 943 session = gc->proto_data; |
794 swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM); | 944 /* XXX/khc: hack */ |
795 | 945 if (!session->oim) |
796 msn_switchboard_send_msg(swboard, msg, TRUE); | 946 session->oim = msn_oim_new(session); |
797 } | 947 |
798 else | 948 oim = session->oim; |
799 { | 949 friendname = msn_encode_mime(account->username); |
800 char *body_str, *body_enc, *pre, *post; | 950 msn_oim_prep_send_msg_info(oim, purple_account_get_username(account), |
801 const char *format; | 951 friendname, who, message); |
802 MsnIMData *imdata = g_new0(MsnIMData, 1); | 952 msn_oim_send_msg(oim); |
803 /* | 953 } |
804 * In MSN, you can't send messages to yourself, so | |
805 * we'll fake like we received it ;) | |
806 */ | |
807 body_str = msn_message_to_string(msg); | |
808 body_enc = g_markup_escape_text(body_str, -1); | |
809 g_free(body_str); | |
810 | |
811 format = msn_message_get_attr(msg, "X-MMS-IM-Format"); | |
812 msn_parse_format(format, &pre, &post); | |
813 body_str = g_strdup_printf("%s%s%s", pre ? pre : "", | |
814 body_enc ? body_enc : "", post ? post : ""); | |
815 g_free(body_enc); | |
816 g_free(pre); | |
817 g_free(post); | |
818 | |
819 serv_got_typing_stopped(gc, who); | |
820 imdata->gc = gc; | |
821 imdata->who = who; | |
822 imdata->msg = body_str; | |
823 imdata->flags = flags; | |
824 imdata->when = time(NULL); | |
825 g_idle_add(msn_send_me_im, imdata); | |
826 } | |
827 | |
828 msn_message_destroy(msg); | |
829 | 954 |
830 return 1; | 955 return 1; |
831 } | 956 } |
832 | 957 |
833 static unsigned int | 958 static unsigned int |
962 | 1087 |
963 session = gc->proto_data; | 1088 session = gc->proto_data; |
964 userlist = session->userlist; | 1089 userlist = session->userlist; |
965 who = msn_normalize(gc->account, buddy->name); | 1090 who = msn_normalize(gc->account, buddy->name); |
966 | 1091 |
1092 purple_debug_info("MaYuan","add user:{%s} to group:{%s}\n",who,group->name); | |
967 if (!session->logged_in) | 1093 if (!session->logged_in) |
968 { | 1094 { |
969 #if 0 | 1095 #if 0 |
970 fake_userlist_add_buddy(session->sync_userlist, who, MSN_LIST_FL, | 1096 fake_userlist_add_buddy(session->sync_userlist, who, MSN_LIST_FL, |
971 group ? group->name : NULL); | 1097 group ? group->name : NULL); |
1254 msn_rename_group(PurpleConnection *gc, const char *old_name, | 1380 msn_rename_group(PurpleConnection *gc, const char *old_name, |
1255 PurpleGroup *group, GList *moved_buddies) | 1381 PurpleGroup *group, GList *moved_buddies) |
1256 { | 1382 { |
1257 MsnSession *session; | 1383 MsnSession *session; |
1258 MsnCmdProc *cmdproc; | 1384 MsnCmdProc *cmdproc; |
1259 int old_gid; | 1385 const char *old_gid; |
1260 const char *enc_new_group_name; | 1386 const char *enc_new_group_name; |
1261 | 1387 |
1262 session = gc->proto_data; | 1388 session = gc->proto_data; |
1263 cmdproc = session->notification->cmdproc; | 1389 cmdproc = session->notification->cmdproc; |
1264 enc_new_group_name = purple_url_encode(group->name); | 1390 enc_new_group_name = purple_url_encode(group->name); |
1265 | 1391 |
1392 purple_debug_info("MaYuan","rename group:old{%s},new{%s}",old_name,enc_new_group_name); | |
1266 old_gid = msn_userlist_find_group_id(session->userlist, old_name); | 1393 old_gid = msn_userlist_find_group_id(session->userlist, old_name); |
1267 | 1394 |
1268 if (old_gid >= 0) | 1395 if (old_gid != NULL) |
1269 { | 1396 { |
1397 /*find a Group*/ | |
1270 msn_cmdproc_send(cmdproc, "REG", "%d %s 0", old_gid, | 1398 msn_cmdproc_send(cmdproc, "REG", "%d %s 0", old_gid, |
1271 enc_new_group_name); | 1399 enc_new_group_name); |
1272 } | 1400 } |
1273 else | 1401 else |
1274 { | 1402 { |
1403 /*not found*/ | |
1275 msn_cmdproc_send(cmdproc, "ADG", "%s 0", enc_new_group_name); | 1404 msn_cmdproc_send(cmdproc, "ADG", "%s 0", enc_new_group_name); |
1276 } | 1405 } |
1277 } | 1406 } |
1278 | 1407 |
1279 static void | 1408 static void |
1330 static void | 1459 static void |
1331 msn_remove_group(PurpleConnection *gc, PurpleGroup *group) | 1460 msn_remove_group(PurpleConnection *gc, PurpleGroup *group) |
1332 { | 1461 { |
1333 MsnSession *session; | 1462 MsnSession *session; |
1334 MsnCmdProc *cmdproc; | 1463 MsnCmdProc *cmdproc; |
1335 int group_id; | 1464 const char *group_id; |
1336 | 1465 |
1337 session = gc->proto_data; | 1466 session = gc->proto_data; |
1338 cmdproc = session->notification->cmdproc; | 1467 cmdproc = session->notification->cmdproc; |
1339 | 1468 |
1340 if ((group_id = msn_userlist_find_group_id(session->userlist, group->name)) >= 0) | 1469 /*we can't delete the default group*/ |
1341 { | 1470 if(!strcmp(group->name,MSN_INDIVIDUALS_GROUP_NAME)|| |
1342 msn_cmdproc_send(cmdproc, "RMG", "%d", group_id); | 1471 !strcmp(group->name,MSN_NON_IM_GROUP_NAME)) |
1472 { | |
1473 return ; | |
1474 } | |
1475 group_id = msn_userlist_find_group_id(session->userlist, group->name); | |
1476 if (group_id != NULL) | |
1477 { | |
1478 msn_del_group(session,group_id); | |
1343 } | 1479 } |
1344 } | 1480 } |
1345 | 1481 |
1346 /** | 1482 /** |
1347 * Extract info text from info_data and add it to user_info | 1483 * Extract info text from info_data and add it to user_info |
1388 static char * | 1524 static char * |
1389 msn_get_photo_url(const char *url_text) | 1525 msn_get_photo_url(const char *url_text) |
1390 { | 1526 { |
1391 char *p, *q; | 1527 char *p, *q; |
1392 | 1528 |
1393 if ((p = strstr(url_text, " contactparams:photopreauthurl=\"")) != NULL) | 1529 if ((p = strstr(url_text, PHOTO_URL)) != NULL) |
1394 { | 1530 { |
1395 p += strlen(" contactparams:photopreauthurl=\""); | 1531 p += strlen(PHOTO_URL); |
1396 } | 1532 } |
1397 | 1533 if (p && (strncmp(p, "http://",strlen("http://")) == 0) && ((q = strchr(p, '"')) != NULL)) |
1398 if (p && (strncmp(p, "http://", 8) == 0) && ((q = strchr(p, '"')) != NULL)) | |
1399 return g_strndup(p, q - p); | 1534 return g_strndup(p, q - p); |
1400 | 1535 |
1401 return NULL; | 1536 return NULL; |
1402 } | 1537 } |
1403 | 1538 |
1458 #if PHOTO_SUPPORT | 1593 #if PHOTO_SUPPORT |
1459 char *photo_url_text = NULL; | 1594 char *photo_url_text = NULL; |
1460 MsnGetInfoStepTwoData *info2_data = NULL; | 1595 MsnGetInfoStepTwoData *info2_data = NULL; |
1461 #endif | 1596 #endif |
1462 | 1597 |
1463 purple_debug_info("msn", "In msn_got_info\n"); | 1598 purple_debug_info("msn", "In msn_got_info,url_text:{%s}\n",url_text); |
1464 | 1599 |
1465 /* Make sure the connection is still valid */ | 1600 /* Make sure the connection is still valid */ |
1466 if (g_list_find(purple_connections_get_all(), info_data->gc) == NULL) | 1601 if (g_list_find(purple_connections_get_all(), info_data->gc) == NULL) |
1467 { | 1602 { |
1468 purple_debug_warning("msn", "invalid connection. ignoring buddy info.\n"); | 1603 purple_debug_warning("msn", "invalid connection. ignoring buddy info.\n"); |
1842 g_free(tmp); | 1977 g_free(tmp); |
1843 | 1978 |
1844 #if PHOTO_SUPPORT | 1979 #if PHOTO_SUPPORT |
1845 /* Find the URL to the photo; must be before the marshalling [Bug 994207] */ | 1980 /* Find the URL to the photo; must be before the marshalling [Bug 994207] */ |
1846 photo_url_text = msn_get_photo_url(url_text); | 1981 photo_url_text = msn_get_photo_url(url_text); |
1982 purple_debug_info("Ma Yuan","photo url:{%s}\n",photo_url_text); | |
1847 | 1983 |
1848 /* Marshall the existing state */ | 1984 /* Marshall the existing state */ |
1849 info2_data = g_malloc0(sizeof(MsnGetInfoStepTwoData)); | 1985 info2_data = g_malloc0(sizeof(MsnGetInfoStepTwoData)); |
1850 info2_data->info_data = info_data; | 1986 info2_data->info_data = info_data; |
1851 info2_data->stripped = stripped; | 1987 info2_data->stripped = stripped; |
2066 NULL, /* remove_buddies */ | 2202 NULL, /* remove_buddies */ |
2067 msn_add_permit, /* add_permit */ | 2203 msn_add_permit, /* add_permit */ |
2068 msn_add_deny, /* add_deny */ | 2204 msn_add_deny, /* add_deny */ |
2069 msn_rem_permit, /* rem_permit */ | 2205 msn_rem_permit, /* rem_permit */ |
2070 msn_rem_deny, /* rem_deny */ | 2206 msn_rem_deny, /* rem_deny */ |
2071 msn_set_permit_deny, /* set_permit_deny */ | 2207 msn_set_permit_deny, /* set_permit_deny */ |
2072 NULL, /* join_chat */ | 2208 NULL, /* join_chat */ |
2073 NULL, /* reject chat invite */ | 2209 NULL, /* reject chat invite */ |
2074 NULL, /* get_chat_name */ | 2210 NULL, /* get_chat_name */ |
2075 msn_chat_invite, /* chat_invite */ | 2211 msn_chat_invite, /* chat_invite */ |
2076 msn_chat_leave, /* chat_leave */ | 2212 msn_chat_leave, /* chat_leave */ |
2122 | 2258 |
2123 "prpl-msn", /**< id */ | 2259 "prpl-msn", /**< id */ |
2124 "MSN", /**< name */ | 2260 "MSN", /**< name */ |
2125 VERSION, /**< version */ | 2261 VERSION, /**< version */ |
2126 /** summary */ | 2262 /** summary */ |
2127 N_("MSN Protocol Plugin"), | 2263 N_("Windows Live Messenger Protocol Plugin"), |
2128 /** description */ | 2264 /** description */ |
2129 N_("MSN Protocol Plugin"), | 2265 N_("Windows Live Messenger Protocol Plugin"), |
2130 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ | 2266 "Christian Hammond <chipx86@gnupdate.org>, " |
2267 "MaYuan <mayuan2006@gmail.com>", /**< author */ | |
2131 PURPLE_WEBSITE, /**< homepage */ | 2268 PURPLE_WEBSITE, /**< homepage */ |
2132 | 2269 |
2133 msn_load, /**< load */ | 2270 msn_load, /**< load */ |
2134 msn_unload, /**< unload */ | 2271 msn_unload, /**< unload */ |
2135 NULL, /**< destroy */ | 2272 NULL, /**< destroy */ |
2150 init_plugin(PurplePlugin *plugin) | 2287 init_plugin(PurplePlugin *plugin) |
2151 { | 2288 { |
2152 PurpleAccountOption *option; | 2289 PurpleAccountOption *option; |
2153 | 2290 |
2154 option = purple_account_option_string_new(_("Server"), "server", | 2291 option = purple_account_option_string_new(_("Server"), "server", |
2155 MSN_SERVER); | 2292 WLM_SERVER); |
2156 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | 2293 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
2157 option); | 2294 option); |
2158 | 2295 |
2159 option = purple_account_option_int_new(_("Port"), "port", 1863); | 2296 option = purple_account_option_int_new(_("Port"), "port", WLM_PORT); |
2160 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | 2297 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
2161 option); | 2298 option); |
2162 | 2299 |
2163 option = purple_account_option_bool_new(_("Use HTTP Method"), | 2300 option = purple_account_option_bool_new(_("Use HTTP Method"), |
2164 "http_method", FALSE); | 2301 "http_method", FALSE); |