]> git.0d.be Git - empathy.git/commitdiff
Use the channel wrapper to log chats instead of connecting to the signals directly.
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Fri, 6 Mar 2009 11:51:48 +0000 (11:51 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 6 Mar 2009 11:51:48 +0000 (11:51 +0000)
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
svn path=/trunk/; revision=2587

src/empathy.c

index 7462c830dc46a36fce498e486991b43714e95c1f..ce380588f77776e96f057dbdcc5ca23cc555b241 100644 (file)
@@ -130,94 +130,21 @@ 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)
+received_message_cb (EmpathyTpChat  *tp_chat,
+                    EmpathyMessage *message,
+                    gboolean        is_chatroom)
 {
-       EmpathyMessage        *message;
-       EmpathyContact        *sender, *recipient;
-       EmpathyContactFactory *contact_factory;
-       EmpathyLogManager     *log_manager;
-       McAccount             *account;
-       TpHandleType           handle_type;
-       gboolean               is_chatroom;
+       EmpathyLogManager *log_manager;
+       EmpathyContact    *contact;
 
-       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);
+       contact = empathy_tp_chat_get_remote_contact (tp_chat);
 
        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);
+               empathy_contact_get_id (contact), is_chatroom, message);
 
-       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 (contact);
        g_object_unref (log_manager);
 }
 
@@ -231,28 +158,21 @@ observe_cb (EmpathyDispatcher        *dispatcher,
        channel_type = empathy_dispatch_operation_get_channel_type_id (operation);
 
        if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT) {
+               EmpathyTpChat *tp_chat;
                TpChannel *channel;
-               GError *error = NULL;
+               TpHandleType handle_type;
+               gboolean is_chatroom;
 
-               channel = empathy_dispatch_operation_get_channel (operation);
-
-               tp_cli_channel_type_text_connect_to_received (channel,
-                       received_message_cb, NULL, NULL, NULL, &error);
+               tp_chat = EMPATHY_TP_CHAT (
+                       empathy_dispatch_operation_get_channel_wrapper (operation));
 
-               if (error) {
-                       DEBUG ("Could not connect to Received: %s",
-                               error->message ? error->message : "No error message");
-                       g_error_free (error);
-               }
+               channel = empathy_dispatch_operation_get_channel (operation);
+               tp_channel_get_handle (channel, &handle_type);
 
-               tp_cli_channel_type_text_connect_to_sent (channel,
-                       sent_message_cb, NULL, NULL, NULL, &error);
+               is_chatroom = (handle_type == TP_HANDLE_TYPE_ROOM);
 
-               if (error) {
-                       DEBUG ("Could not connect to Sent: %s",
-                               error->message ? error->message : "No error message");
-                       g_error_free (error);
-               }
+               g_signal_connect (tp_chat, "message-received",
+                       G_CALLBACK (received_message_cb), GINT_TO_POINTER (is_chatroom));
        }
 }