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)