Mercurial > pidgin.yaz
diff src/protocols/jabber/jabber.c @ 8194:22b3974dc1af
[gaim-migrate @ 8916]
a bunch of tweaks to jabber roster handling, and a fix for a segfault when you delete the priority buddy in a contact
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sun, 01 Feb 2004 01:06:10 +0000 |
parents | e0a70b763872 |
children | f24172f53650 |
line wrap: on
line diff
--- a/src/protocols/jabber/jabber.c Sat Jan 31 22:30:29 2004 +0000 +++ b/src/protocols/jabber/jabber.c Sun Feb 01 01:06:10 2004 +0000 @@ -917,36 +917,60 @@ { JabberBuddy *jb = jabber_buddy_find(b->account->gc->proto_data, b->name, FALSE); - JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, NULL); - char *ret = NULL; - - if(jbr) { - char *text = NULL; - if(jbr->status) { - char *stripped; - stripped = gaim_markup_strip_html(jbr->status); - text = g_markup_escape_text(stripped, -1); - g_free(stripped); - } + GString *ret = g_string_new(""); + char *r = NULL; - ret = g_strdup_printf("<b>%s:</b> %s%s%s", - _("Status"), - jabber_get_state_string(jbr->state), - text ? ": " : "", - text ? text : ""); - if(text) - g_free(text); - } else if(jb && !GAIM_BUDDY_IS_ONLINE(b) && jb->error_msg) { - ret = g_strdup_printf("<b>%s:</b> %s", - _("Error"), jb->error_msg); - } else if(jb && !GAIM_BUDDY_IS_ONLINE(b) && - (jb->subscription & JABBER_SUB_PENDING || - !(jb->subscription & JABBER_SUB_TO))) { - ret = g_strdup_printf("<b>%s:</b> %s", - _("Status"), _("Not Authorized")); + if(jb) { + JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, NULL); + const char *sub; + if(jb->subscription & JABBER_SUB_FROM) { + if(jb->subscription & JABBER_SUB_TO) + sub = _("Both"); + else if(jb->subscription & JABBER_SUB_PENDING) + sub = _("From (To pending)"); + else + sub = _("From"); + } else { + if(jb->subscription & JABBER_SUB_TO) + sub = _("To"); + else if(jb->subscription & JABBER_SUB_PENDING) + sub = _("None (To pending)"); + else + sub = _("None"); + } + g_string_append_printf(ret, "<b>%s:</b> %s\n", _("Subscription"), sub); + + if(jbr) { + char *text = NULL; + if(jbr->status) { + char *stripped; + stripped = gaim_markup_strip_html(jbr->status); + text = g_markup_escape_text(stripped, -1); + g_free(stripped); + } + + g_string_append_printf(ret, "<b>%s:</b> %s%s%s\n", + _("Status"), + jabber_get_state_string(jbr->state), + text ? ": " : "", + text ? text : ""); + if(text) + g_free(text); + } else if(!GAIM_BUDDY_IS_ONLINE(b) && jb->error_msg) { + g_string_append_printf(ret, "<b>%s:</b> %s\n", + _("Error"), jb->error_msg); + } } - return ret; + if(ret->len > 0) { + g_string_truncate(ret, ret->len-1); + r = ret->str; + g_string_free(ret, FALSE); + } else { + g_string_free(ret, TRUE); + } + + return r; } static GList *jabber_away_states(GaimConnection *gc)