]> git.0d.be Git - empathy.git/commitdiff
Inform the chatroom mgr when we are handling a new room
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 5 Jul 2010 08:58:55 +0000 (10:58 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 5 Jul 2010 08:58:55 +0000 (10:58 +0200)
It can't rely on the internal dispatcher any more.

libempathy/empathy-chatroom-manager.c
libempathy/empathy-chatroom-manager.h
src/empathy-chat-manager.c
src/empathy.c

index be91657b2489886e23480218319894632d376df1..115e4158ce4b78fd6b46513059093930a5c84357 100644 (file)
@@ -754,46 +754,25 @@ chatroom_manager_chat_destroyed_cb (EmpathyTpChat *chat,
     }
 }
 
-static void
-chatroom_manager_observe_channel_cb (EmpathyDispatcher *dispatcher,
-  EmpathyDispatchOperation *operation, gpointer manager)
+/* Called by EmpathyChatManager when we are handling a new group chat */
+void
+empathy_chatroom_manager_chat_handled (EmpathyChatroomManager *self,
+    EmpathyTpChat *chat,
+    TpAccount *account)
 {
   EmpathyChatroom *chatroom;
-  TpChannel *channel;
-  EmpathyTpChat *chat;
   const gchar *roomname;
-  GQuark channel_type;
-  TpHandleType handle_type;
-  TpAccount *account;
-  TpConnection *connection;
-
-  channel_type = empathy_dispatch_operation_get_channel_type_id (operation);
-
-  /* Observe Text channels to rooms only */
-  if (channel_type != TP_IFACE_QUARK_CHANNEL_TYPE_TEXT)
-    return;
-
-  channel = empathy_dispatch_operation_get_channel (operation);
-  tp_channel_get_handle (channel, &handle_type);
-
-  if (handle_type != TP_HANDLE_TYPE_ROOM)
-    return;
-
-  chat = EMPATHY_TP_CHAT (
-    empathy_dispatch_operation_get_channel_wrapper (operation));
-  connection = empathy_tp_chat_get_connection (chat);
-  account = empathy_get_account_for_connection (connection);
 
   roomname = empathy_tp_chat_get_id (chat);
 
-  chatroom = empathy_chatroom_manager_find (manager, account, roomname);
+  chatroom = empathy_chatroom_manager_find (self, account, roomname);
 
   if (chatroom == NULL)
     {
       chatroom = empathy_chatroom_new_full (account, roomname, roomname,
         FALSE);
       empathy_chatroom_set_tp_chat (chatroom, chat);
-      empathy_chatroom_manager_add (manager, chatroom);
+      empathy_chatroom_manager_add (self, chatroom);
       g_object_unref (chatroom);
     }
   else
@@ -805,13 +784,5 @@ chatroom_manager_observe_channel_cb (EmpathyDispatcher *dispatcher,
    * has been invalidated in the dispatcher..  */
   g_signal_connect (chat, "destroy",
     G_CALLBACK (chatroom_manager_chat_destroyed_cb),
-    manager);
-}
-
-void
-empathy_chatroom_manager_observe (EmpathyChatroomManager *manager,
-  EmpathyDispatcher *dispatcher)
-{
-  g_signal_connect (dispatcher, "observe",
-    G_CALLBACK (chatroom_manager_observe_channel_cb), manager);
+    self);
 }
index 9a1de1828642214f97d789701d5949e21fee544d..692a8e4c70a31ebd7bee8ff2ec5ec22603dc208e 100644 (file)
@@ -70,8 +70,10 @@ GList *                empathy_chatroom_manager_get_chatrooms (EmpathyChatroomMa
                                                              TpAccount               *account);
 guint                  empathy_chatroom_manager_get_count     (EmpathyChatroomManager *manager,
                                                              TpAccount               *account);
-void                   empathy_chatroom_manager_observe       (EmpathyChatroomManager *manager,
-                                                             EmpathyDispatcher *dispatcher);
+
+void                  empathy_chatroom_manager_chat_handled  (EmpathyChatroomManager *self,
+                                                              EmpathyTpChat *chat,
+                                                              TpAccount *account);
 
 G_END_DECLS
 
index aceaa5e68545736976285b978e4d16a79b938bf3..c8d5891f60f73482c7bc2aee275ce54e9b779a8a 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <telepathy-glib/telepathy-glib.h>
 
+#include <libempathy/empathy-chatroom-manager.h>
 #include <libempathy/empathy-dispatcher.h>
 
 #include "empathy-chat-window.h"
@@ -128,6 +129,15 @@ process_tp_chat (EmpathyTpChat *tp_chat,
       empathy_tp_chat_join (tp_chat);
     }
 
+  if (empathy_chat_is_room (chat))
+    {
+      EmpathyChatroomManager *chatroom_mgr;
+
+      chatroom_mgr = empathy_chatroom_manager_dup_singleton (NULL);
+      empathy_chatroom_manager_chat_handled (chatroom_mgr, tp_chat, account);
+      g_object_unref (chatroom_mgr);
+    }
+
   g_object_unref (tp_chat);
 }
 
index a148c97965f06ba9a342c1503cc94a4c4ef2277f..81ff77c17de0aa678d8b775c184025deb5fb3ddd 100644 (file)
@@ -574,7 +574,6 @@ main (int argc, char *argv[])
   log_manager = tpl_log_manager_dup_singleton ();
 
   chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
-  empathy_chatroom_manager_observe (chatroom_manager, dispatcher);
 
   g_object_get (chatroom_manager, "ready", &chatroom_manager_ready, NULL);
   if (!chatroom_manager_ready)