542
* Set the User status text
515
545
msn_status_text(PurpleBuddy *buddy)
517
547
PurplePresence *presence;
518
548
PurpleStatus *status;
520
551
presence = purple_buddy_get_presence(buddy);
521
552
status = purple_presence_get_active_status(presence);
523
if (!purple_presence_is_available(presence) && !purple_presence_is_idle(presence))
525
return g_strdup(purple_status_get_name(status));
554
/* I think status message should take precedence over media */
555
msg = purple_status_get_attr_string(status, "message");
557
return g_markup_escape_text(msg, -1);
559
if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_TUNE)) {
560
const char *title, *artist;
562
status = purple_presence_get_status(presence, "tune");
563
title = purple_status_get_attr_string(status, PURPLE_TUNE_TITLE);
564
artist = purple_status_get_attr_string(status, PURPLE_TUNE_ARTIST);
566
media = g_strdup_printf("%s%s%s", title, artist ? " - " : "",
567
artist ? artist : "");
568
esc = g_markup_escape_text(media, -1);
538
583
user = buddy->proto_data;
541
585
if (purple_presence_is_online(presence))
543
purple_notify_user_info_add_pair(user_info, _("Status"),
544
(purple_presence_is_idle(presence) ? _("Idle") : purple_status_get_name(status)));
549
purple_notify_user_info_add_pair(user_info, _("Has you"),
550
((user->list_op & (1 << MSN_LIST_RL)) ? _("Yes") : _("No")));
587
const char *psm, *name;
588
char *currentmedia = NULL;
591
psm = purple_status_get_attr_string(status, "message");
592
if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_TUNE)) {
593
PurpleStatus *tune = purple_presence_get_status(presence, "tune");
594
const char *title = purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE);
595
const char *artist = purple_status_get_attr_string(tune, PURPLE_TUNE_ARTIST);
596
currentmedia = g_strdup_printf("%s%s%s", title, artist ? " - " : "",
597
artist ? artist : "");
598
/* We could probably just use user->media.title etc. here */
601
if (!purple_status_is_available(status)) {
602
name = purple_status_get_name(status);
607
if (name != NULL && *name) {
610
if (purple_presence_is_idle(presence)) {
611
tmp2 = g_markup_printf_escaped("%s/%s", name, _("Idle"));
613
tmp2 = g_markup_escape_text(name, -1);
616
if (psm != NULL && *psm) {
617
tmp = g_markup_escape_text(psm, -1);
618
purple_notify_user_info_add_pair(user_info, tmp2, tmp);
621
purple_notify_user_info_add_pair(user_info, _("Status"), tmp2);
626
if (psm != NULL && *psm) {
627
tmp = g_markup_escape_text(psm, -1);
628
if (purple_presence_is_idle(presence)) {
629
purple_notify_user_info_add_pair(user_info, _("Idle"), tmp);
631
purple_notify_user_info_add_pair(user_info, _("Status"), tmp);
635
if (purple_presence_is_idle(presence)) {
636
purple_notify_user_info_add_pair(user_info, _("Status"),
639
purple_notify_user_info_add_pair(user_info, _("Status"),
640
purple_status_get_name(status));
646
tmp = g_markup_escape_text(currentmedia, -1);
647
purple_notify_user_info_add_pair(user_info, _("Current media"), tmp);
649
g_free(currentmedia);
553
653
/* XXX: This is being shown in non-full tooltips because the
554
654
* XXX: blocked icon overlay isn't always accurate for MSN.
555
655
* XXX: This can die as soon as purple_privacy_check() knows that
556
656
* XXX: this prpl always honors both the allow and deny lists. */
657
/* While the above comment may be strictly correct (the privacy API needs
658
* rewriteing), purple_privacy_check() is going to be more accurate at
659
* indicating whether a particular buddy is going to be able to message
660
* you, which is the important information that this is trying to convey.
559
664
purple_notify_user_info_add_pair(user_info, _("Blocked"),
560
665
((user->list_op & (1 << MSN_LIST_BL)) ? _("Yes") : _("No")));
567
672
PurpleStatusType *status;
568
673
GList *types = NULL;
570
status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE,
571
NULL, NULL, FALSE, TRUE, FALSE);
572
types = g_list_append(types, status);
574
status = purple_status_type_new_full(PURPLE_STATUS_AWAY,
575
NULL, NULL, FALSE, TRUE, FALSE);
576
types = g_list_append(types, status);
578
status = purple_status_type_new_full(PURPLE_STATUS_AWAY,
579
"brb", _("Be Right Back"), FALSE, TRUE, FALSE);
580
types = g_list_append(types, status);
582
status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE,
583
"busy", _("Busy"), FALSE, TRUE, FALSE);
584
types = g_list_append(types, status);
586
status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE,
587
"phone", _("On the Phone"), FALSE, TRUE, FALSE);
588
types = g_list_append(types, status);
590
status = purple_status_type_new_full(PURPLE_STATUS_AWAY,
591
"lunch", _("Out to Lunch"), FALSE, TRUE, FALSE);
675
status = purple_status_type_new_with_attrs(
676
PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE,
677
"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
679
types = g_list_append(types, status);
681
status = purple_status_type_new_with_attrs(
682
PURPLE_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE,
683
"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
685
types = g_list_append(types, status);
687
status = purple_status_type_new_with_attrs(
688
PURPLE_STATUS_AWAY, "brb", _("Be Right Back"), TRUE, TRUE, FALSE,
689
"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
691
types = g_list_append(types, status);
693
status = purple_status_type_new_with_attrs(
694
PURPLE_STATUS_UNAVAILABLE, "busy", _("Busy"), TRUE, TRUE, FALSE,
695
"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
697
types = g_list_append(types, status);
698
status = purple_status_type_new_with_attrs(
699
PURPLE_STATUS_UNAVAILABLE, "phone", _("On the Phone"), TRUE, TRUE, FALSE,
700
"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
702
types = g_list_append(types, status);
703
status = purple_status_type_new_with_attrs(
704
PURPLE_STATUS_AWAY, "lunch", _("Out to Lunch"), TRUE, TRUE, FALSE,
705
"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
592
707
types = g_list_append(types, status);
594
709
status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE,
603
718
"mobile", NULL, FALSE, FALSE, TRUE);
604
719
types = g_list_append(types, status);
721
status = purple_status_type_new_with_attrs(PURPLE_STATUS_TUNE,
722
"tune", NULL, TRUE, TRUE, TRUE,
723
PURPLE_TUNE_ARTIST, _("Artist"), purple_value_new(PURPLE_TYPE_STRING),
724
PURPLE_TUNE_ALBUM, _("Album"), purple_value_new(PURPLE_TYPE_STRING),
725
PURPLE_TUNE_TITLE, _("Title"), purple_value_new(PURPLE_TYPE_STRING),
727
types = g_list_append(types, status);
803
929
msn_import_html(message, &msgformat, &msgtext);
805
if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564)
930
if(msn_user_is_online(account, who)||
931
msn_user_is_yahoo(account, who)){
932
/*User online,then send Online Instant Message*/
934
if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564)
942
msg = msn_message_new_plain(msgtext);
943
msg->remote_user = g_strdup(who);
944
msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat);
807
946
g_free(msgformat);
813
msg = msn_message_new_plain(msgtext);
814
msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat);
819
if (g_ascii_strcasecmp(who, purple_account_get_username(account)))
949
purple_debug_info("MSNP14","prepare to send online Message\n");
950
if (g_ascii_strcasecmp(who, purple_account_get_username(account)))
953
MsnSwitchBoard *swboard;
955
session = gc->proto_data;
956
if(msn_user_is_yahoo(account,who)){
957
/*we send the online and offline Message to Yahoo User via UBM*/
958
purple_debug_info("MSNP14","send to Yahoo User\n");
959
uum_send_msg(session,msg);
961
purple_debug_info("MSNP14","send via switchboard\n");
962
swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM);
963
msn_switchboard_send_msg(swboard, msg, TRUE);
968
char *body_str, *body_enc, *pre, *post;
970
MsnIMData *imdata = g_new0(MsnIMData, 1);
972
* In MSN, you can't send messages to yourself, so
973
* we'll fake like we received it ;)
975
body_str = msn_message_to_string(msg);
976
body_enc = g_markup_escape_text(body_str, -1);
979
format = msn_message_get_attr(msg, "X-MMS-IM-Format");
980
msn_parse_format(format, &pre, &post);
981
body_str = g_strdup_printf("%s%s%s", pre ? pre : "",
982
body_enc ? body_enc : "", post ? post : "");
987
serv_got_typing_stopped(gc, who);
990
imdata->msg = body_str;
991
imdata->flags = flags;
992
imdata->when = time(NULL);
993
purple_timeout_add(0, msn_send_me_im, imdata);
996
msn_message_destroy(msg);
998
/*send Offline Instant Message,only to MSN Passport User*/
821
999
MsnSession *session;
822
MsnSwitchBoard *swboard;
1002
purple_debug_info("MSNP14","prepare to send offline Message\n");
824
1003
session = gc->proto_data;
825
swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM);
827
msn_switchboard_send_msg(swboard, msg, TRUE);
831
char *body_str, *body_enc, *pre, *post;
833
MsnIMData *imdata = g_new0(MsnIMData, 1);
835
* In MSN, you can't send messages to yourself, so
836
* we'll fake like we received it ;)
838
body_str = msn_message_to_string(msg);
839
body_enc = g_markup_escape_text(body_str, -1);
842
format = msn_message_get_attr(msg, "X-MMS-IM-Format");
843
msn_parse_format(format, &pre, &post);
844
body_str = g_strdup_printf("%s%s%s", pre ? pre : "",
845
body_enc ? body_enc : "", post ? post : "");
850
serv_got_typing_stopped(gc, who);
853
imdata->msg = body_str;
854
imdata->flags = flags;
855
imdata->when = time(NULL);
856
g_idle_add(msn_send_me_im, imdata);
859
msn_message_destroy(msg);
1005
friendname = msn_encode_mime(account->username);
1006
msn_oim_prep_send_msg_info(session->oim,
1007
purple_account_get_username(account),
1008
friendname, who, message);
1009
msn_oim_send_msg(session->oim);
1062
1214
if (!session->logged_in)
1065
if (user != NULL && user->list_op & MSN_LIST_BL_OP)
1066
msn_userlist_rem_buddy(userlist, who, MSN_LIST_BL, NULL);
1068
msn_userlist_add_buddy(userlist, who, MSN_LIST_AL, NULL);
1217
if (user != NULL && user->list_op & MSN_LIST_BL_OP) {
1218
msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_BL);
1220
/* delete contact from Block list and add it to Allow in the callback */
1221
msn_del_contact_from_list(session->contact, NULL, who, MSN_LIST_BL);
1223
/* just add the contact to Allow list */
1224
msn_add_contact_to_list(session->contact, NULL, who, MSN_LIST_AL);
1228
msn_userlist_add_buddy_to_list(userlist, who, MSN_LIST_AL);
1082
1242
if (!session->logged_in)
1085
if (user != NULL && user->list_op & MSN_LIST_AL_OP)
1086
msn_userlist_rem_buddy(userlist, who, MSN_LIST_AL, NULL);
1088
msn_userlist_add_buddy(userlist, who, MSN_LIST_BL, NULL);
1245
if (user != NULL && user->list_op & MSN_LIST_AL_OP) {
1246
msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_AL);
1248
/* delete contact from Allow list and add it to Block in the callback */
1249
msn_del_contact_from_list(session->contact, NULL, who, MSN_LIST_AL);
1251
/* just add the contact to Block list */
1252
msn_add_contact_to_list(session->contact, NULL, who, MSN_LIST_BL);
1255
msn_userlist_add_buddy_to_list(userlist, who, MSN_LIST_BL);
1125
1294
user = msn_userlist_find_user(userlist, who);
1127
msn_userlist_rem_buddy(userlist, who, MSN_LIST_BL, NULL);
1296
msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_BL);
1298
msn_del_contact_from_list(session->contact, NULL, who, MSN_LIST_BL);
1129
1300
if (user != NULL && user->list_op & MSN_LIST_RL_OP)
1130
msn_userlist_add_buddy(userlist, who, MSN_LIST_AL, NULL);
1301
msn_userlist_add_buddy_to_list(userlist, who, MSN_LIST_AL);
1134
1305
msn_set_permit_deny(PurpleConnection *gc)
1136
PurpleAccount *account;
1137
MsnSession *session;
1138
MsnCmdProc *cmdproc;
1140
account = purple_connection_get_account(gc);
1141
session = gc->proto_data;
1142
cmdproc = session->notification->cmdproc;
1144
if (account->perm_deny == PURPLE_PRIVACY_ALLOW_ALL ||
1145
account->perm_deny == PURPLE_PRIVACY_DENY_USERS)
1147
msn_cmdproc_send(cmdproc, "BLP", "%s", "AL");
1151
msn_cmdproc_send(cmdproc, "BLP", "%s", "BL");
1307
msn_send_privacy(gc);
1286
1441
PurpleGroup *group, GList *moved_buddies)
1288
1443
MsnSession *session;
1289
MsnCmdProc *cmdproc;
1291
const char *enc_new_group_name;
1293
1445
session = gc->proto_data;
1294
cmdproc = session->notification->cmdproc;
1295
enc_new_group_name = purple_url_encode(group->name);
1297
old_gid = msn_userlist_find_group_id(session->userlist, old_name);
1447
g_return_if_fail(session != NULL);
1448
g_return_if_fail(session->userlist != NULL);
1450
if (msn_userlist_find_group_with_name(session->userlist, old_name) != NULL)
1301
msn_cmdproc_send(cmdproc, "REG", "%d %s 0", old_gid,
1302
enc_new_group_name);
1452
msn_contact_rename_group(session, old_name, group->name);
1306
msn_cmdproc_send(cmdproc, "ADG", "%s 0", enc_new_group_name);
1457
msn_add_group(session, NULL, group->name);
1364
1515
MsnSession *session;
1365
1516
MsnCmdProc *cmdproc;
1368
1518
session = gc->proto_data;
1369
1519
cmdproc = session->notification->cmdproc;
1371
if ((group_id = msn_userlist_find_group_id(session->userlist, group->name)) >= 0)
1521
purple_debug_info("MSN", "Remove group %s\n", group->name);
1522
/*we can't delete the default group*/
1523
if(!strcmp(group->name, MSN_INDIVIDUALS_GROUP_NAME)||
1524
!strcmp(group->name, MSN_NON_IM_GROUP_NAME))
1373
msn_cmdproc_send(cmdproc, "RMG", "%d", group_id);
1526
purple_debug_info("MSN", "This group can't be removed, returning.\n");
1530
msn_del_group(session, group->name);