[telepathy-gabble/master] Factor out code to add the status, caps and vcard to a presence
Sjoerd Simons
sjoerd.simons at collabora.co.uk
Mon Jan 4 02:34:13 PST 2010
---
src/presence.c | 80 +++++++++++++++++++++++++++++++++----------------------
src/presence.h | 3 ++
2 files changed, 51 insertions(+), 32 deletions(-)
diff --git a/src/presence.c b/src/presence.c
index 19a1df1..0d96724 100644
--- a/src/presence.c
+++ b/src/presence.c
@@ -465,26 +465,11 @@ OUT:
return ret;
}
-LmMessage *
-gabble_presence_as_message (GabblePresence *presence,
- const gchar *to)
+void
+gabble_presence_add_status_and_vcard (GabblePresence *presence,
+ WockyXmppStanza *stanza)
{
- GabblePresencePrivate *priv = GABBLE_PRESENCE_PRIV (presence);
- LmMessage *message;
- LmMessageNode *node, *subnode;
- LmMessageSubType subtype;
- Resource *res = priv->resources->data; /* pick first resource */
-
- g_assert (NULL != res);
-
- if (presence->status == GABBLE_PRESENCE_OFFLINE)
- subtype = LM_MESSAGE_SUB_TYPE_UNAVAILABLE;
- else
- subtype = LM_MESSAGE_SUB_TYPE_AVAILABLE;
-
- message = lm_message_new_with_sub_type (to, LM_MESSAGE_TYPE_PRESENCE,
- subtype);
- node = lm_message_get_node (message);
+ WockyXmppNode *vcard_node;
switch (presence->status)
{
@@ -493,16 +478,20 @@ gabble_presence_as_message (GabblePresence *presence,
case GABBLE_PRESENCE_HIDDEN:
break;
case GABBLE_PRESENCE_AWAY:
- lm_message_node_add_child (node, "show", JABBER_PRESENCE_SHOW_AWAY);
+ wocky_xmpp_node_add_child_with_content (stanza->node, "show",
+ JABBER_PRESENCE_SHOW_AWAY);
break;
case GABBLE_PRESENCE_CHAT:
- lm_message_node_add_child (node, "show", JABBER_PRESENCE_SHOW_CHAT);
+ wocky_xmpp_node_add_child_with_content (stanza->node, "show",
+ JABBER_PRESENCE_SHOW_CHAT);
break;
case GABBLE_PRESENCE_DND:
- lm_message_node_add_child (node, "show", JABBER_PRESENCE_SHOW_DND);
+ wocky_xmpp_node_add_child_with_content (stanza->node, "show",
+ JABBER_PRESENCE_SHOW_DND);
break;
case GABBLE_PRESENCE_XA:
- lm_message_node_add_child (node, "show", JABBER_PRESENCE_SHOW_XA);
+ wocky_xmpp_node_add_child_with_content (stanza->node, "show",
+ JABBER_PRESENCE_SHOW_XA);
break;
default:
g_critical ("%s: Unexpected Telepathy presence type", G_STRFUNC);
@@ -510,23 +499,50 @@ gabble_presence_as_message (GabblePresence *presence,
}
if (presence->status_message)
- lm_message_node_add_child (node, "status", presence->status_message);
+ wocky_xmpp_node_add_child_with_content (stanza->node, "status",
+ presence->status_message);
+
+ vcard_node = wocky_xmpp_node_add_child_ns (stanza->node, "x",
+ NS_VCARD_TEMP_UPDATE);
+
+ if (presence->avatar_sha1 != NULL)
+ {
+ wocky_xmpp_node_add_child_with_content (vcard_node, "photo",
+ presence->avatar_sha1);
+ }
+}
+
+LmMessage *
+gabble_presence_as_message (GabblePresence *presence,
+ const gchar *to)
+{
+ GabblePresencePrivate *priv = GABBLE_PRESENCE_PRIV (presence);
+ LmMessage *message;
+ LmMessageSubType subtype;
+ Resource *res = priv->resources->data; /* pick first resource */
+
+ g_assert (NULL != res);
+
+ if (presence->status == GABBLE_PRESENCE_OFFLINE)
+ subtype = LM_MESSAGE_SUB_TYPE_UNAVAILABLE;
+ else
+ subtype = LM_MESSAGE_SUB_TYPE_AVAILABLE;
+
+ message = lm_message_new_with_sub_type (to, LM_MESSAGE_TYPE_PRESENCE,
+ subtype);
+
+ gabble_presence_add_status_and_vcard (presence, WOCKY_XMPP_STANZA (message));
if (res->priority)
{
gchar *priority = g_strdup_printf ("%d", res->priority);
+ LmMessageNode *node;
+
+ node = lm_message_get_node (message);
lm_message_node_add_child (node, "priority", priority);
g_free (priority);
}
- subnode = lm_message_node_add_child (node, "x", "");
- lm_message_node_set_attribute (subnode, "xmlns", NS_VCARD_TEMP_UPDATE);
- /* NULL means we make no particular assertion about the avatar. */
- if (presence->avatar_sha1 != NULL)
- {
- lm_message_node_add_child (subnode, "photo", presence->avatar_sha1);
- }
-
return message;
}
diff --git a/src/presence.h b/src/presence.h
index b1422b2..2735013 100644
--- a/src/presence.h
+++ b/src/presence.h
@@ -96,6 +96,9 @@ gboolean gabble_presence_resource_has_caps (GabblePresence *presence,
LmMessage *gabble_presence_as_message (GabblePresence *presence,
const gchar *to);
+void gabble_presence_add_status_and_vcard (GabblePresence *presence,
+ WockyXmppStanza *stanza);
+
gchar *gabble_presence_dump (GabblePresence *presence);
gboolean gabble_presence_added_to_view (GabblePresence *presence);
--
1.5.6.5
More information about the telepathy-commits
mailing list