]> git.0d.be Git - empathy.git/commitdiff
Moved dispatcher observing and logging into EmpathyLogManager.
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Fri, 6 Mar 2009 11:52:04 +0000 (11:52 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 6 Mar 2009 11:52:04 +0000 (11:52 +0000)
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
svn path=/trunk/; revision=2592

libempathy/empathy-log-manager.c
libempathy/empathy-log-manager.h
src/empathy.c

index 1593ff4d06e9d8b38e9449308bbf649b3735346b..2b001ac0a7e383f31fb2dd21ffbcb1e07657b58c 100644 (file)
@@ -33,6 +33,7 @@
 #include "empathy-log-manager.h"
 #include "empathy-log-source-empathy.h"
 #include "empathy-log-source.h"
+#include "empathy-tp-chat.h"
 #include "empathy-utils.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
@@ -372,3 +373,77 @@ empathy_log_manager_get_date_readable (const gchar *date)
 
   return empathy_time_to_string_local (t, "%a %d %b %Y");
 }
+
+typedef struct
+{
+  EmpathyLogManager *log_manager;
+  TpChannel *channel;
+} MessageObserveData;
+
+static void
+message_observe_data_free (MessageObserveData *data)
+{
+  g_slice_free (MessageObserveData, data);
+}
+
+static void
+log_manager_chat_received_message_cb (EmpathyTpChat *tp_chat,
+                                      EmpathyMessage *message,
+                                      MessageObserveData *data)
+{
+  GError *error = NULL;
+  TpHandleType handle_type;
+
+  tp_channel_get_handle (data->channel, &handle_type);
+
+  if (!empathy_log_manager_add_message (data->log_manager,
+        tp_channel_get_identifier (data->channel),
+        handle_type == TP_HANDLE_TYPE_ROOM,
+        message, &error))
+    {
+      DEBUG ("Failed to write message: %s",
+          error ? error->message : "No error message");
+
+      if (error)
+        g_error_free (error);
+    }
+}
+
+static void
+log_manager_dispatcher_observe_cb (EmpathyDispatcher *dispatcher,
+                                   EmpathyDispatchOperation *operation,
+                                   EmpathyLogManager *log_manager)
+{
+  GQuark channel_type;
+
+  channel_type = empathy_dispatch_operation_get_channel_type_id (operation);
+
+  if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT)
+    {
+      EmpathyTpChat *tp_chat;
+      TpChannel *channel;
+      MessageObserveData *data;
+
+      tp_chat = EMPATHY_TP_CHAT (
+          empathy_dispatch_operation_get_channel_wrapper (operation));
+
+      channel = empathy_dispatch_operation_get_channel (operation);
+
+      data = g_slice_new0 (MessageObserveData);
+      data->log_manager = log_manager;
+      data->channel = channel;
+
+      g_signal_connect_data (tp_chat, "message-received",
+          G_CALLBACK (log_manager_chat_received_message_cb), data,
+          (GClosureNotify) message_observe_data_free, 0);
+    }
+}
+
+
+void
+empathy_log_manager_observe (EmpathyLogManager *log_manager,
+                             EmpathyDispatcher *dispatcher)
+{
+  g_signal_connect (dispatcher, "observe",
+      G_CALLBACK (log_manager_dispatcher_observe_cb), log_manager);
+}
index 688cb11ffe7b4510902a3017b3226c370d158fff..4ec2c901987d38e4486f27fa6b000a7764a76c4e 100644 (file)
@@ -29,6 +29,7 @@
 #include <libmissioncontrol/mc-account.h>
 
 #include "empathy-message.h"
+#include "empathy-dispatcher.h"
 
 G_BEGIN_DECLS
 
@@ -92,6 +93,8 @@ GList *empathy_log_manager_search_new (EmpathyLogManager *manager,
 void empathy_log_manager_search_free (GList *hits);
 gchar *empathy_log_manager_get_date_readable (const gchar *date);
 void empathy_log_manager_search_hit_free (EmpathyLogSearchHit *hit);
+void empathy_log_manager_observe (EmpathyLogManager *log_manager,
+    EmpathyDispatcher *dispatcher);
 
 G_END_DECLS
 
index 5ad38a9e846f252bc20bd0bc11058a4a15bd5813..10a2ce75f2e10e1afa4ace9ab8c726f7e535fe56 100644 (file)
@@ -129,58 +129,6 @@ dispatch_cb (EmpathyDispatcher *dispatcher,
        }
 }
 
-static void
-received_message_cb (EmpathyTpChat  *tp_chat,
-                    EmpathyMessage *message,
-                    TpChannel      *channel)
-{
-       EmpathyLogManager *log_manager;
-       GError            *error = NULL;
-       TpHandleType       handle_type;
-
-       tp_channel_get_handle (channel, &handle_type);
-
-       log_manager = empathy_log_manager_dup_singleton ();
-
-       if (!empathy_log_manager_add_message (log_manager,
-                                            tp_channel_get_identifier (channel),
-                                            handle_type == TP_HANDLE_TYPE_ROOM,
-                                            message,
-                                            &error)) {
-               DEBUG ("Failed to write message: %s",
-                       error ? error->message : "No error message");
-
-               if (error) {
-                       g_error_free (error);
-               }
-       }
-
-       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) {
-               EmpathyTpChat *tp_chat;
-               TpChannel *channel;
-
-               tp_chat = EMPATHY_TP_CHAT (
-                       empathy_dispatch_operation_get_channel_wrapper (operation));
-
-               channel = empathy_dispatch_operation_get_channel (operation);
-
-               g_signal_connect (tp_chat, "message-received",
-                       G_CALLBACK (received_message_cb), channel);
-       }
-}
-
 static void
 service_ended_cb (MissionControl *mc,
                  gpointer        user_data)
@@ -464,6 +412,7 @@ main (int argc, char *argv[])
        guint32            startup_timestamp;
        EmpathyStatusIcon *icon;
        EmpathyDispatcher *dispatcher;
+       EmpathyLogManager *log_manager;
        EmpathyChatroomManager *chatroom_manager;
        EmpathyCallFactory *call_factory;
        GtkWidget         *window;
@@ -599,7 +548,10 @@ 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);
+
+       /* Logging */
+       log_manager = empathy_log_manager_dup_singleton ();
+       empathy_log_manager_observe (log_manager, dispatcher);
 
        chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
        empathy_chatroom_manager_observe (chatroom_manager, dispatcher);
@@ -617,6 +569,7 @@ main (int argc, char *argv[])
        g_object_unref (mc);
        g_object_unref (idle);
        g_object_unref (icon);
+       g_object_unref (log_manager);
        g_object_unref (dispatcher);
        g_object_unref (chatroom_manager);