[next] telepathy-glib: stop using tp_message_peek() internally
Guillaume Desmottes
gdesmott at kemper.freedesktop.org
Thu Mar 6 04:20:08 PST 2014
Module: telepathy-glib
Branch: next
Commit: c1e1489c017c8d830e6b41074a740c2433e692f5
URL: http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=c1e1489c017c8d830e6b41074a740c2433e692f5
Author: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
Date: Thu Feb 27 12:09:16 2014 +0100
stop using tp_message_peek() internally
---
telepathy-glib/message-mixin.c | 9 ++--
telepathy-glib/message.c | 88 ++++++++++++++++++++++--------------
telepathy-glib/signalled-message.c | 13 ++++--
3 files changed, 70 insertions(+), 40 deletions(-)
diff --git a/telepathy-glib/message-mixin.c b/telepathy-glib/message-mixin.c
index 128fe66..6dc7c44 100644
--- a/telepathy-glib/message-mixin.c
+++ b/telepathy-glib/message-mixin.c
@@ -685,14 +685,15 @@ tp_message_mixin_has_pending_messages (GObject *object,
if (msg != NULL && first_sender != NULL)
{
- const GHashTable *header = tp_message_peek (msg, 0);
- gboolean valid = TRUE;
- TpHandle h = tp_asv_get_uint32 (header, "message-sender", &valid);
+ GVariant *header = tp_message_dup_part (msg, 0);
+ TpHandle h;
- if (valid)
+ if (g_variant_lookup (header, "message-sender", "u", &h))
*first_sender = h;
else
WARNING ("oldest message's message-sender is mistyped");
+
+ g_variant_unref (header);
}
return (msg != NULL);
diff --git a/telepathy-glib/message.c b/telepathy-glib/message.c
index 1845e3a..1565666 100644
--- a/telepathy-glib/message.c
+++ b/telepathy-glib/message.c
@@ -736,6 +736,22 @@ tp_message_is_mutable (TpMessage *self)
return self->priv->mutable;
}
+static gboolean
+lookup_in_header (TpMessage *self,
+ const gchar *key,
+ const gchar *type,
+ gpointer out)
+{
+ GVariant *header;
+ gboolean result;
+
+ header = tp_message_dup_part (self, 0);
+ result = g_variant_lookup (header, key, type, out);
+
+ g_variant_unref (header);
+ return result;
+}
+
/**
* tp_message_dup_token:
* @self: a message
@@ -754,16 +770,12 @@ tp_message_is_mutable (TpMessage *self)
gchar *
tp_message_dup_token (TpMessage *self)
{
- const gchar *token;
+ gchar *token = NULL;
g_return_val_if_fail (TP_IS_MESSAGE (self), NULL);
- token = tp_asv_get_string (tp_message_peek (self, 0), "message-token");
-
- if (tp_str_empty (token))
- return NULL;
- else
- return g_strdup (token);
+ lookup_in_header (self, "message-token", "s", &token);
+ return token;
}
/**
@@ -779,10 +791,11 @@ tp_message_dup_token (TpMessage *self)
TpChannelTextMessageType
tp_message_get_message_type (TpMessage *self)
{
- g_return_val_if_fail (TP_IS_MESSAGE (self),
- TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL);
+ TpChannelTextMessageType msg_type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL;
+
/* if message-type is absent or invalid we just return 0, which is NORMAL */
- return tp_asv_get_uint32 (tp_message_peek (self, 0), "message-type", NULL);
+ lookup_in_header (self, "message-type", "u", &msg_type);
+ return msg_type;
}
/**
@@ -804,8 +817,12 @@ tp_message_get_message_type (TpMessage *self)
gint64
tp_message_get_sent_timestamp (TpMessage *self)
{
+ gint64 sent = 0;
+
g_return_val_if_fail (TP_IS_MESSAGE (self), 0);
- return tp_asv_get_int64 (tp_message_peek (self, 0), "message-sent", NULL);
+
+ lookup_in_header (self, "message-sent", "x", &sent);
+ return sent;
}
/**
@@ -823,9 +840,12 @@ tp_message_get_sent_timestamp (TpMessage *self)
gint64
tp_message_get_received_timestamp (TpMessage *self)
{
+ gint64 received = 0;
+
g_return_val_if_fail (TP_IS_MESSAGE (self), 0);
- return tp_asv_get_int64 (tp_message_peek (self, 0), "message-received",
- NULL);
+
+ lookup_in_header (self, "message-received", "x", &received);
+ return received;
}
/**
@@ -842,8 +862,12 @@ tp_message_get_received_timestamp (TpMessage *self)
gboolean
tp_message_is_scrollback (TpMessage *self)
{
+ gboolean scrollback = FALSE;
+
g_return_val_if_fail (TP_IS_MESSAGE (self), FALSE);
- return tp_asv_get_boolean (tp_message_peek (self, 0), "scrollback", NULL);
+
+ lookup_in_header (self, "scrollback", "b", &scrollback);
+ return scrollback;
}
/**
@@ -865,8 +889,12 @@ tp_message_is_scrollback (TpMessage *self)
gboolean
tp_message_is_rescued (TpMessage *self)
{
+ gboolean rescued = FALSE;
+
g_return_val_if_fail (TP_IS_MESSAGE (self), FALSE);
- return tp_asv_get_boolean (tp_message_peek (self, 0), "rescued", NULL);
+
+ lookup_in_header (self, "rescued", "b", &rescued);
+ return rescued;
}
/**
@@ -884,16 +912,12 @@ tp_message_is_rescued (TpMessage *self)
gchar *
tp_message_dup_supersedes (TpMessage *self)
{
- const gchar *token;
+ gchar *token = NULL;
g_return_val_if_fail (TP_IS_MESSAGE (self), NULL);
- token = tp_asv_get_string (tp_message_peek (self, 0), "supersedes");
-
- if (tp_str_empty (token))
- return NULL;
- else
- return g_strdup (token);
+ lookup_in_header (self, "supersedes", "s", &token);
+ return token;
}
/**
@@ -912,15 +936,12 @@ tp_message_dup_supersedes (TpMessage *self)
gchar *
tp_message_dup_specific_to_interface (TpMessage *self)
{
- const gchar *interface;
+ gchar *interface = NULL;
g_return_val_if_fail (TP_IS_MESSAGE (self), NULL);
- interface = tp_asv_get_string (tp_message_peek (self, 0), "interface");
- if (interface == NULL)
- return NULL;
-
- return g_strdup (interface);
+ lookup_in_header (self, "supersedes", "s", &interface);
+ return interface;
}
/**
@@ -937,12 +958,11 @@ tp_message_dup_specific_to_interface (TpMessage *self)
gboolean
tp_message_is_delivery_report (TpMessage *self)
{
- gboolean valid;
+ TpDeliveryStatus status = TP_DELIVERY_STATUS_UNKNOWN;
g_return_val_if_fail (TP_IS_MESSAGE (self), FALSE);
- tp_asv_get_uint32 (tp_message_peek (self, 0), "delivery-status", &valid);
- return valid;
+ return lookup_in_header (self, "delivery-status", "u", &status);
}
/**
@@ -962,10 +982,12 @@ guint32
tp_message_get_pending_message_id (TpMessage *self,
gboolean *valid)
{
+ guint32 id = 0;
+
g_return_val_if_fail (TP_IS_MESSAGE (self), FALSE);
- return tp_asv_get_uint32 (tp_message_peek (self, 0),
- "pending-message-id", valid);
+ lookup_in_header (self, "pending-message-id", "u", &id);
+ return id;
}
/*
diff --git a/telepathy-glib/signalled-message.c b/telepathy-glib/signalled-message.c
index fc34ee7..55ac107 100644
--- a/telepathy-glib/signalled-message.c
+++ b/telepathy-glib/signalled-message.c
@@ -242,17 +242,24 @@ guint
_tp_signalled_message_get_pending_message_id (TpMessage *message,
gboolean *valid)
{
- const GHashTable *part0;
+ guint id;
+ GVariant *part0;
+ gboolean ok;
g_return_val_if_fail (TP_IS_SIGNALLED_MESSAGE (message), 0);
g_return_val_if_fail (valid != NULL, 0);
- part0 = tp_message_peek (message, 0);
+ part0 = tp_message_dup_part (message, 0);
if (part0 == NULL)
{
*valid = FALSE;
return 0;
}
- return tp_asv_get_uint32 (part0, "pending-message-id", valid);
+ ok = g_variant_lookup (part0, "pending-message-id", "u", &id);
+ if (valid != NULL)
+ *valid = ok;
+
+ g_variant_unref (part0);
+ return id;
}
More information about the telepathy-commits
mailing list