comparison libpurple/protocols/msn/msn.c @ 21229:0b67d509a305

merge of '1bcf84e26d11f259b3c5ec663e3fecc2f01aed33' and 'ce13b5ca4994abbd4934b3bc568c8b115335c426'
author Richard Laager <rlaager@wiktel.com>
date Sun, 14 Oct 2007 02:41:00 +0000
parents 84b9b98070e5 b1fa7765ca4b
children b9680933c2c6
comparison
equal deleted inserted replaced
21098:7e200a629109 21229:0b67d509a305
537 return "msn"; 537 return "msn";
538 } 538 }
539 539
540 /* 540 /*
541 * Set the User status text 541 * Set the User status text
542 * Add the PSM String Using "Name - PSM String" format
543 */ 542 */
544 static char * 543 static char *
545 msn_status_text(PurpleBuddy *buddy) 544 msn_status_text(PurpleBuddy *buddy)
546 { 545 {
547 PurplePresence *presence; 546 PurplePresence *presence;
548 PurpleStatus *status; 547 PurpleStatus *status;
549 const char *msg, *cmedia; 548 const char *msg;
550 549
551 presence = purple_buddy_get_presence(buddy); 550 presence = purple_buddy_get_presence(buddy);
552 status = purple_presence_get_active_status(presence); 551 status = purple_presence_get_active_status(presence);
553 552
553 /* I think status message should take precedence over media */
554 msg = purple_status_get_attr_string(status, "message"); 554 msg = purple_status_get_attr_string(status, "message");
555 cmedia = purple_status_get_attr_string(status, "currentmedia"); 555 if (msg && *msg)
556
557 if (cmedia)
558 return g_markup_escape_text(cmedia, -1);
559 else if (msg)
560 return g_markup_escape_text(msg, -1); 556 return g_markup_escape_text(msg, -1);
557
558 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_TUNE)) {
559 const char *title, *artist;
560 char *media, *esc;
561 status = purple_presence_get_status(presence, "tune");
562 title = purple_status_get_attr_string(status, PURPLE_TUNE_TITLE);
563 artist = purple_status_get_attr_string(status, PURPLE_TUNE_ARTIST);
564
565 media = g_strdup_printf("%s%s%s", title, artist ? " - " : "",
566 artist ? artist : "");
567 esc = g_markup_escape_text(media, -1);
568 g_free(media);
569 return esc;
570 }
571
561 return NULL; 572 return NULL;
562 } 573 }
563 574
564 static void 575 static void
565 msn_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full) 576 msn_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full)
568 PurplePresence *presence = purple_buddy_get_presence(buddy); 579 PurplePresence *presence = purple_buddy_get_presence(buddy);
569 PurpleStatus *status = purple_presence_get_active_status(presence); 580 PurpleStatus *status = purple_presence_get_active_status(presence);
570 581
571 user = buddy->proto_data; 582 user = buddy->proto_data;
572 583
573
574 if (purple_presence_is_online(presence)) 584 if (purple_presence_is_online(presence))
575 { 585 {
576 const char *psm, *currentmedia, *name; 586 const char *psm, *name;
587 char *currentmedia = NULL;
577 char *tmp; 588 char *tmp;
578 589
579 psm = purple_status_get_attr_string(status, "message"); 590 psm = purple_status_get_attr_string(status, "message");
580 currentmedia = purple_status_get_attr_string(status, "currentmedia"); 591 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_TUNE)) {
592 PurpleStatus *tune = purple_presence_get_status(presence, "tune");
593 const char *title = purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE);
594 const char *artist = purple_status_get_attr_string(tune, PURPLE_TUNE_ARTIST);
595 currentmedia = g_strdup_printf("%s%s%s", title, artist ? " - " : "",
596 artist ? artist : "");
597 /* We could probably just use user->media.title etc. here */
598 }
581 599
582 if (!purple_presence_is_available(presence)) { 600 if (!purple_presence_is_available(presence)) {
583 name = purple_status_get_name(status); 601 name = purple_status_get_name(status);
584 } else { 602 } else {
585 name = NULL; 603 name = NULL;
607 625
608 if (currentmedia) { 626 if (currentmedia) {
609 tmp = g_markup_escape_text(currentmedia, -1); 627 tmp = g_markup_escape_text(currentmedia, -1);
610 purple_notify_user_info_add_pair(user_info, _("Current media"), tmp); 628 purple_notify_user_info_add_pair(user_info, _("Current media"), tmp);
611 g_free(tmp); 629 g_free(tmp);
630 g_free(currentmedia);
612 } 631 }
613 } 632 }
614 633
615 /* XXX: This is being shown in non-full tooltips because the 634 /* XXX: This is being shown in non-full tooltips because the
616 * XXX: blocked icon overlay isn't always accurate for MSN. 635 * XXX: blocked icon overlay isn't always accurate for MSN.
630 GList *types = NULL; 649 GList *types = NULL;
631 650
632 status = purple_status_type_new_with_attrs( 651 status = purple_status_type_new_with_attrs(
633 PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, 652 PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE,
634 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 653 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
635 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
636 NULL); 654 NULL);
637 types = g_list_append(types, status); 655 types = g_list_append(types, status);
638 656
639 status = purple_status_type_new_with_attrs( 657 status = purple_status_type_new_with_attrs(
640 PURPLE_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE, 658 PURPLE_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE,
641 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 659 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
642 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
643 NULL); 660 NULL);
644 types = g_list_append(types, status); 661 types = g_list_append(types, status);
645 662
646 status = purple_status_type_new_with_attrs( 663 status = purple_status_type_new_with_attrs(
647 PURPLE_STATUS_AWAY, "brb", _("Be Right Back"), TRUE, TRUE, FALSE, 664 PURPLE_STATUS_AWAY, "brb", _("Be Right Back"), TRUE, TRUE, FALSE,
648 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 665 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
649 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
650 NULL); 666 NULL);
651 types = g_list_append(types, status); 667 types = g_list_append(types, status);
652 668
653 status = purple_status_type_new_with_attrs( 669 status = purple_status_type_new_with_attrs(
654 PURPLE_STATUS_UNAVAILABLE, "busy", _("Busy"), TRUE, TRUE, FALSE, 670 PURPLE_STATUS_UNAVAILABLE, "busy", _("Busy"), TRUE, TRUE, FALSE,
655 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 671 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
656 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
657 NULL); 672 NULL);
658 types = g_list_append(types, status); 673 types = g_list_append(types, status);
659 status = purple_status_type_new_with_attrs( 674 status = purple_status_type_new_with_attrs(
660 PURPLE_STATUS_UNAVAILABLE, "phone", _("On the Phone"), TRUE, TRUE, FALSE, 675 PURPLE_STATUS_UNAVAILABLE, "phone", _("On the Phone"), TRUE, TRUE, FALSE,
661 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 676 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
662 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
663 NULL); 677 NULL);
664 types = g_list_append(types, status); 678 types = g_list_append(types, status);
665 status = purple_status_type_new_with_attrs( 679 status = purple_status_type_new_with_attrs(
666 PURPLE_STATUS_AWAY, "lunch", _("Out to Lunch"), TRUE, TRUE, FALSE, 680 PURPLE_STATUS_AWAY, "lunch", _("Out to Lunch"), TRUE, TRUE, FALSE,
667 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 681 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
668 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
669 NULL); 682 NULL);
670 types = g_list_append(types, status); 683 types = g_list_append(types, status);
671 684
672 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE, 685 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE,
673 NULL, NULL, FALSE, TRUE, FALSE); 686 NULL, NULL, FALSE, TRUE, FALSE);
677 NULL, NULL, FALSE, TRUE, FALSE); 690 NULL, NULL, FALSE, TRUE, FALSE);
678 types = g_list_append(types, status); 691 types = g_list_append(types, status);
679 692
680 status = purple_status_type_new_full(PURPLE_STATUS_MOBILE, 693 status = purple_status_type_new_full(PURPLE_STATUS_MOBILE,
681 "mobile", NULL, FALSE, FALSE, TRUE); 694 "mobile", NULL, FALSE, FALSE, TRUE);
695 types = g_list_append(types, status);
696
697 status = purple_status_type_new_with_attrs(PURPLE_STATUS_TUNE,
698 "tune", NULL, TRUE, TRUE, TRUE,
699 PURPLE_TUNE_ARTIST, _("Artist"), purple_value_new(PURPLE_TYPE_STRING),
700 PURPLE_TUNE_ALBUM, _("Album"), purple_value_new(PURPLE_TYPE_STRING),
701 PURPLE_TUNE_TITLE, _("Title"), purple_value_new(PURPLE_TYPE_STRING),
702 NULL);
682 types = g_list_append(types, status); 703 types = g_list_append(types, status);
683 704
684 return types; 705 return types;
685 } 706 }
686 707