aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2011-04-15 21:17:07 +0800
committerDanielle Madeley <danielle.madeley@collabora.co.uk>2011-04-21 10:25:29 +0800
commit9ebc1143eb2917b95ffd1922621c4d3971d2ac38 (patch)
tree439ebc4c69c4ab77f703198c749ab000bcaf2f94
parentd13d80a35e631dca9aa71e7419d08b4094d075f8 (diff)
downloadgsoc2013-empathy-9ebc1143eb2917b95ffd1922621c4d3971d2ac38.tar
gsoc2013-empathy-9ebc1143eb2917b95ffd1922621c4d3971d2ac38.tar.gz
gsoc2013-empathy-9ebc1143eb2917b95ffd1922621c4d3971d2ac38.tar.bz2
gsoc2013-empathy-9ebc1143eb2917b95ffd1922621c4d3971d2ac38.tar.lz
gsoc2013-empathy-9ebc1143eb2917b95ffd1922621c4d3971d2ac38.tar.xz
gsoc2013-empathy-9ebc1143eb2917b95ffd1922621c4d3971d2ac38.tar.zst
gsoc2013-empathy-9ebc1143eb2917b95ffd1922621c4d3971d2ac38.zip
factor out empathy_message_new_from_tp_message
-rw-r--r--libempathy/empathy-message.c33
-rw-r--r--libempathy/empathy-message.h5
-rw-r--r--libempathy/empathy-tp-chat.c83
3 files changed, 53 insertions, 68 deletions
diff --git a/libempathy/empathy-message.c b/libempathy/empathy-message.c
index f98e955a0..520dbe650 100644
--- a/libempathy/empathy-message.c
+++ b/libempathy/empathy-message.c
@@ -721,3 +721,36 @@ empathy_message_set_flags (EmpathyMessage *self,
g_object_notify (G_OBJECT (self), "flags");
}
+
+EmpathyMessage *
+empathy_message_new_from_tp_message (TpMessage *tp_msg,
+ gboolean incoming)
+{
+ EmpathyMessage *message;
+ gchar *body;
+ TpChannelTextMessageFlags flags;
+ guint id;
+
+ g_return_val_if_fail (TP_IS_MESSAGE (tp_msg), NULL);
+
+ body = tp_message_to_text (tp_msg, &flags);
+
+ message = g_object_new (EMPATHY_TYPE_MESSAGE,
+ "body", body,
+ "type", tp_message_get_message_type (tp_msg),
+ "timestamp", tp_message_get_received_timestamp (tp_msg),
+ "flags", flags,
+ "is-backlog", flags & TP_CHANNEL_TEXT_MESSAGE_FLAG_SCROLLBACK,
+ "incoming", incoming,
+ NULL);
+
+ /* FIXME: this is pretty low level, ideally we shouldn't have to use the
+ * ID directly but we don't use TpTextChannel's ack API everywhere yet. */
+ id = tp_asv_get_uint32 (tp_message_peek (tp_msg, 0),
+ "pending-message-id", NULL);
+
+ empathy_message_set_id (message, id);
+
+ g_free (body);
+ return message;
+}
diff --git a/libempathy/empathy-message.h b/libempathy/empathy-message.h
index 1db0eff60..cb57f0755 100644
--- a/libempathy/empathy-message.h
+++ b/libempathy/empathy-message.h
@@ -26,6 +26,7 @@
#define __EMPATHY_MESSAGE_H__
#include <glib-object.h>
+#include <telepathy-glib/message.h>
#include <telepathy-logger/event.h>
#include "empathy-contact.h"
@@ -53,8 +54,12 @@ struct _EmpathyMessageClass {
};
GType empathy_message_get_type (void) G_GNUC_CONST;
+
EmpathyMessage * empathy_message_new (const gchar *body);
EmpathyMessage * empathy_message_from_tpl_log_event (TplEvent *logevent);
+EmpathyMessage * empathy_message_new_from_tp_message (TpMessage *tp_msg,
+ gboolean incoming);
+
TpChannelTextMessageType empathy_message_get_tptype (EmpathyMessage *message);
void empathy_message_set_tptype (EmpathyMessage *message,
TpChannelTextMessageType type);
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index 656f4a9d0..17ddf2701 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -282,38 +282,30 @@ tp_chat_got_sender_cb (TpConnection *connection,
static void
tp_chat_build_message (EmpathyTpChat *chat,
- gboolean incoming,
- guint id,
- guint type,
- guint timestamp,
- guint from_handle,
- const gchar *message_body,
- TpChannelTextMessageFlags flags)
+ TpMessage *msg,
+ gboolean incoming)
{
EmpathyTpChatPriv *priv;
EmpathyMessage *message;
+ TpContact *sender;
priv = GET_PRIV (chat);
- message = empathy_message_new (message_body);
- empathy_message_set_tptype (message, type);
+ message = empathy_message_new_from_tp_message (msg, incoming);
+ /* FIXME: this is actually a lie for incoming messages. */
empathy_message_set_receiver (message, priv->user);
- empathy_message_set_timestamp (message, timestamp);
- empathy_message_set_id (message, id);
- empathy_message_set_incoming (message, incoming);
- empathy_message_set_flags (message, flags);
-
- if (flags & TP_CHANNEL_TEXT_MESSAGE_FLAG_SCROLLBACK)
- empathy_message_set_is_backlog (message, TRUE);
g_queue_push_tail (priv->messages_queue, message);
- if (from_handle == 0) {
+ sender = tp_signalled_message_get_sender (msg);
+ g_assert (sender != NULL);
+
+ if (tp_contact_get_handle (sender) == 0) {
empathy_message_set_sender (message, priv->user);
tp_chat_emit_queued_messages (chat);
} else {
empathy_tp_contact_factory_get_from_handle (priv->connection,
- from_handle,
+ tp_contact_get_handle (sender),
tp_chat_got_sender_cb,
message, NULL, G_OBJECT (chat));
}
@@ -325,20 +317,9 @@ message_received_cb (TpTextChannel *channel,
EmpathyTpChat *chat)
{
EmpathyTpChatPriv *priv = GET_PRIV (chat);
- guint message_id;
gchar *message_body;
- TpContact *sender;
- TpHandle from_handle;
- TpChannelTextMessageFlags message_flags;
-
- message_id = tp_asv_get_uint32 (tp_message_peek (message, 0),
- "pending-message-id", NULL);
- sender = tp_signalled_message_get_sender (message);
- g_assert (sender != NULL);
- from_handle = tp_contact_get_handle (sender);
-
- message_body = tp_message_to_text (message, &message_flags);
+ message_body = tp_message_to_text (message, NULL);
DEBUG ("Message received from channel %s: %s",
tp_proxy_get_object_path (channel), message_body);
@@ -351,14 +332,7 @@ message_received_cb (TpTextChannel *channel,
return;
}
- tp_chat_build_message (chat,
- TRUE,
- message_id,
- tp_message_get_message_type (message),
- tp_message_get_received_timestamp (message),
- from_handle,
- message_body,
- message_flags);
+ tp_chat_build_message (chat, message, TRUE);
g_free (message_body);
}
@@ -376,14 +350,7 @@ message_sent_cb (TpTextChannel *channel,
DEBUG ("Message sent: %s", message_body);
- tp_chat_build_message (chat,
- FALSE,
- 0,
- tp_message_get_message_type (message),
- tp_message_get_received_timestamp (message),
- 0,
- message_body,
- 0);
+ tp_chat_build_message (chat, message, FALSE);
g_free (message_body);
}
@@ -478,21 +445,8 @@ list_pending_messages (EmpathyTpChat *self)
for (l = messages; l != NULL; l = g_list_next (l)) {
TpMessage *message = l->data;
gchar *message_body;
- guint message_id;
- guint from_handle;
- guint message_flags;
- TpContact *sender;
-
- /* FIXME: this is pretty low level, ideally we shouldn't have to use the
- * ID directly but we don't use TpTextChannel's ack API everywhere yet. */
- message_id = tp_asv_get_uint32 (tp_message_peek (message, 0),
- "pending-message-id", NULL);
-
- sender = tp_signalled_message_get_sender (message);
- g_assert (sender != NULL);
- from_handle = tp_contact_get_handle (sender);
- message_body = tp_message_to_text (message, &message_flags);
+ message_body = tp_message_to_text (message, NULL);
DEBUG ("Message pending: %s", message_body);
@@ -504,14 +458,7 @@ list_pending_messages (EmpathyTpChat *self)
continue;
}
- tp_chat_build_message (self,
- TRUE,
- message_id,
- tp_message_get_message_type (message),
- tp_message_get_received_timestamp (message),
- from_handle,
- message_body,
- message_flags);
+ tp_chat_build_message (self, message, TRUE);
g_free (message_body);
}