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