]> git.0d.be Git - empathy.git/commitdiff
Move logging to the dispatcher on Received and Sent signals.
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Fri, 6 Mar 2009 11:51:45 +0000 (11:51 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 6 Mar 2009 11:51:45 +0000 (11:51 +0000)
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
svn path=/trunk/; revision=2586

libempathy-gtk/empathy-chat.c
src/empathy.c

index 453209ee37b28aad1d7e6f6a1151cc5084c29cf1..34550965bb5f804b21475c099d9d1f67e1c23803 100644 (file)
@@ -465,15 +465,6 @@ chat_message_received (EmpathyChat *chat, EmpathyMessage *message)
                empathy_contact_get_name (sender),
                empathy_contact_get_handle (sender));
 
-       if (priv->id) {
-               gboolean is_chatroom;
-
-               is_chatroom = priv->handle_type == TP_HANDLE_TYPE_ROOM;
-               empathy_log_manager_add_message (priv->log_manager,
-                                                priv->id, is_chatroom,
-                                                message);
-       }
-
        empathy_chat_view_append_message (chat->view, message);
 
        /* We received a message so the contact is no longer composing */
index 0c1197a1762edabd306fe1a2ff1e8e2399b18704..7462c830dc46a36fce498e486991b43714e95c1f 100644 (file)
 #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>
 
@@ -127,6 +129,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);