aboutsummaryrefslogtreecommitdiffstats
path: root/src/empathy.c
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2009-03-06 19:51:45 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2009-03-06 19:51:45 +0800
commit951b54c1ee73aab5351badad88ccaf3964f239f4 (patch)
tree6b778f80c0aac9d5271f69a8e6c6e369d2d91271 /src/empathy.c
parente5e97bf1abebf43b7ca382463ab79f8277cd685e (diff)
downloadgsoc2013-empathy-951b54c1ee73aab5351badad88ccaf3964f239f4.tar
gsoc2013-empathy-951b54c1ee73aab5351badad88ccaf3964f239f4.tar.gz
gsoc2013-empathy-951b54c1ee73aab5351badad88ccaf3964f239f4.tar.bz2
gsoc2013-empathy-951b54c1ee73aab5351badad88ccaf3964f239f4.tar.lz
gsoc2013-empathy-951b54c1ee73aab5351badad88ccaf3964f239f4.tar.xz
gsoc2013-empathy-951b54c1ee73aab5351badad88ccaf3964f239f4.tar.zst
gsoc2013-empathy-951b54c1ee73aab5351badad88ccaf3964f239f4.zip
Move logging to the dispatcher on Received and Sent signals.
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk> svn path=/trunk/; revision=2586
Diffstat (limited to 'src/empathy.c')
-rw-r--r--src/empathy.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/src/empathy.c b/src/empathy.c
index 0c1197a17..7462c830d 100644
--- a/src/empathy.c
+++ b/src/empathy.c
@@ -42,8 +42,10 @@
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-call-factory.h>
#include <libempathy/empathy-chatroom-manager.h>
+#include <libempathy/empathy-contact-factory.h>
#include <libempathy/empathy-dispatcher.h>
#include <libempathy/empathy-dispatch-operation.h>
+#include <libempathy/empathy-log-manager.h>
#include <libempathy/empathy-tp-chat.h>
#include <libempathy/empathy-tp-call.h>
@@ -128,6 +130,133 @@ dispatch_cb (EmpathyDispatcher *dispatcher,
}
static void
+received_message_cb (TpChannel *channel,
+ guint message_id,
+ guint timestamp,
+ guint from_handle,
+ guint message_type,
+ guint message_flags,
+ const gchar *message_body,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyMessage *message;
+ EmpathyContact *sender, *recipient;
+ EmpathyContactFactory *contact_factory;
+ EmpathyLogManager *log_manager;
+ McAccount *account;
+ TpHandleType handle_type;
+ gboolean is_chatroom;
+
+ contact_factory = empathy_contact_factory_dup_singleton ();
+
+ account = empathy_channel_get_account (channel);
+
+ sender = empathy_contact_factory_get_from_handle (contact_factory,
+ account, from_handle);
+ recipient = empathy_contact_factory_get_user (contact_factory, account);
+
+ message = empathy_message_new (message_body);
+ empathy_message_set_tptype (message, message_type);
+ empathy_message_set_sender (message, sender);
+ empathy_message_set_receiver (message, recipient);
+ empathy_message_set_timestamp (message, timestamp);
+ empathy_message_set_id (message, message_id);
+
+ log_manager = empathy_log_manager_dup_singleton ();
+
+ tp_channel_get_handle (channel, &handle_type);
+ is_chatroom = (handle_type == TP_HANDLE_TYPE_ROOM);
+
+ empathy_log_manager_add_message (log_manager,
+ empathy_contact_get_id (sender), FALSE, message);
+
+ g_object_unref (sender);
+ g_object_unref (recipient);
+ g_object_unref (message);
+ g_object_unref (contact_factory);
+ g_object_unref (log_manager);
+}
+
+static void
+sent_message_cb (TpChannel *channel,
+ guint timestamp,
+ guint message_type,
+ const gchar *text,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyContactFactory *contact_factory;
+ EmpathyLogManager *log_manager;
+ EmpathyMessage *message;
+ McAccount *account;
+ EmpathyContact *sender, *recipient;
+ TpHandleType handle_type;
+ gboolean is_chatroom;
+
+ contact_factory = empathy_contact_factory_dup_singleton ();
+
+ account = empathy_channel_get_account (channel);
+
+ sender = empathy_contact_factory_get_user (contact_factory, account);
+ recipient = empathy_contact_factory_get_from_handle (contact_factory,
+ account, tp_channel_get_handle (channel, &handle_type));
+
+ message = empathy_message_new (text);
+ empathy_message_set_tptype (message, message_type);
+ empathy_message_set_sender (message, sender);
+ empathy_message_set_receiver (message, recipient);
+ empathy_message_set_timestamp (message, timestamp);
+
+ log_manager = empathy_log_manager_dup_singleton ();
+
+ is_chatroom = (handle_type == TP_HANDLE_TYPE_ROOM);
+ empathy_log_manager_add_message (log_manager,
+ empathy_contact_get_id (recipient), FALSE, message);
+
+ g_object_unref (sender);
+ g_object_unref (recipient);
+ g_object_unref (message);
+ g_object_unref (contact_factory);
+ g_object_unref (log_manager);
+}
+
+static void
+observe_cb (EmpathyDispatcher *dispatcher,
+ EmpathyDispatchOperation *operation,
+ gpointer user_data)
+{
+ GQuark channel_type;
+
+ channel_type = empathy_dispatch_operation_get_channel_type_id (operation);
+
+ if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT) {
+ TpChannel *channel;
+ GError *error = NULL;
+
+ channel = empathy_dispatch_operation_get_channel (operation);
+
+ tp_cli_channel_type_text_connect_to_received (channel,
+ received_message_cb, NULL, NULL, NULL, &error);
+
+ if (error) {
+ DEBUG ("Could not connect to Received: %s",
+ error->message ? error->message : "No error message");
+ g_error_free (error);
+ }
+
+ tp_cli_channel_type_text_connect_to_sent (channel,
+ sent_message_cb, NULL, NULL, NULL, &error);
+
+ if (error) {
+ DEBUG ("Could not connect to Sent: %s",
+ error->message ? error->message : "No error message");
+ g_error_free (error);
+ }
+ }
+}
+
+static void
service_ended_cb (MissionControl *mc,
gpointer user_data)
{
@@ -545,6 +674,7 @@ main (int argc, char *argv[])
/* Handle channels */
dispatcher = empathy_dispatcher_dup_singleton ();
g_signal_connect (dispatcher, "dispatch", G_CALLBACK (dispatch_cb), NULL);
+ g_signal_connect (dispatcher, "observe", G_CALLBACK (observe_cb), NULL);
chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
empathy_chatroom_manager_observe (chatroom_manager, dispatcher);