[empathy: 6/8] empathy_dispatcher_join_muc: get an account instead of a connection



commit d339921eaf86de17aaae585070ae479cfbf4734f
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Wed Aug 11 15:28:09 2010 +0200

    empathy_dispatcher_join_muc: get an account instead of a connection

 libempathy-gtk/empathy-chat.c     |    9 +++--
 libempathy/empathy-dispatcher.c   |   13 +++++--
 libempathy/empathy-dispatcher.h   |    2 +-
 src/empathy-chat-manager.c        |   62 ++++++-------------------------------
 src/empathy-main-window.c         |    5 +--
 src/empathy-new-chatroom-dialog.c |    6 ++--
 src/empathy.c                     |    9 ++---
 7 files changed, 32 insertions(+), 74 deletions(-)
---
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index 9c6a632..71fb2e8 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -244,8 +244,8 @@ account_reconnected (EmpathyChat *chat,
 				account, priv->id, EMPATHY_DISPATCHER_NON_USER_ACTION);
 			break;
 		case TP_HANDLE_TYPE_ROOM:
-			empathy_dispatcher_join_muc (tp_account_get_connection (account),
-				priv->id, EMPATHY_DISPATCHER_NON_USER_ACTION);
+			empathy_dispatcher_join_muc (account, priv->id,
+				EMPATHY_DISPATCHER_NON_USER_ACTION);
 			break;
 		case TP_HANDLE_TYPE_NONE:
 		case TP_HANDLE_TYPE_LIST:
@@ -710,8 +710,9 @@ chat_command_join (EmpathyChat *chat,
 			TpConnection *connection;
 
 			connection = empathy_tp_chat_get_connection (priv->tp_chat);
-			empathy_dispatcher_join_muc (connection, rooms[i],
-						     gtk_get_current_event_time ());
+			empathy_dispatcher_join_muc (
+				empathy_get_account_for_connection (connection), rooms[i],
+				gtk_get_current_event_time ());
 		}
 		i++;
 	}
diff --git a/libempathy/empathy-dispatcher.c b/libempathy/empathy-dispatcher.c
index e5abfde..a286d50 100644
--- a/libempathy/empathy-dispatcher.c
+++ b/libempathy/empathy-dispatcher.c
@@ -1305,9 +1305,9 @@ dispatcher_request_handles_cb (TpConnection *connection,
 }
 
 void
-empathy_dispatcher_join_muc (TpConnection *connection,
-                             const gchar *roomname,
-                             gint64 timestamp)
+empathy_dispatcher_join_muc (TpAccount *account,
+    const gchar *roomname,
+    gint64 timestamp)
 {
   EmpathyDispatcher *self;
   EmpathyDispatcherPriv *priv;
@@ -1315,13 +1315,18 @@ empathy_dispatcher_join_muc (TpConnection *connection,
   ConnectionData *connection_data;
   const gchar *names[] = { roomname, NULL };
   TpProxyPendingCall *call;
+  TpConnection *connection;
 
-  g_return_if_fail (TP_IS_CONNECTION (connection));
+  g_return_if_fail (TP_IS_ACCOUNT (account));
   g_return_if_fail (!EMP_STR_EMPTY (roomname));
 
   self = empathy_dispatcher_dup_singleton ();
   priv = GET_PRIV (self);
 
+  connection = tp_account_get_connection (account);
+  if (connection == NULL)
+    return;
+
   connection_data = g_hash_table_lookup (priv->connections, connection);
   g_assert (connection_data != NULL);
 
diff --git a/libempathy/empathy-dispatcher.h b/libempathy/empathy-dispatcher.h
index 918a428..7991de0 100644
--- a/libempathy/empathy-dispatcher.h
+++ b/libempathy/empathy-dispatcher.h
@@ -83,7 +83,7 @@ void  empathy_dispatcher_chat_with_contact (EmpathyContact *contact,
   gint64 timestamp);
 
 /* Request a muc channel */
-void empathy_dispatcher_join_muc (TpConnection *connection,
+void empathy_dispatcher_join_muc (TpAccount *account,
   const gchar *roomname,
   gint64 timestamp);
 
diff --git a/src/empathy-chat-manager.c b/src/empathy-chat-manager.c
index a3177a3..8b9a73b 100644
--- a/src/empathy-chat-manager.c
+++ b/src/empathy-chat-manager.c
@@ -369,53 +369,11 @@ empathy_chat_manager_closed_chat (EmpathyChatManager *self,
       g_queue_get_length (priv->queue));
 }
 
-static void
-connection_ready_cb (TpConnection *connection,
-    const GError *error,
-    gpointer user_data)
-{
-  ChatData *data = user_data;
-  EmpathyChatManager *self = chat_manager_singleton;
-  EmpathyChatManagerPriv *priv;
-
-  /* Extremely unlikely to happen, but I don't really want to keep refs to the
-   * chat manager in the ChatData structs as it'll then prevent the manager
-   * from being finalized. */
-  if (G_UNLIKELY (self == NULL))
-    goto out;
-
-  priv = GET_PRIV (self);
-
-  /* FIXME: Once empathy_dispatcher_join_muc will take a TpAccount instead of
-   * a TpConnection we won't have to prepare the connection any more. */
-  if (error == NULL)
-    {
-      if (data->room)
-        empathy_dispatcher_join_muc (connection, data->id,
-          EMPATHY_DISPATCHER_NON_USER_ACTION);
-      else
-        empathy_dispatcher_chat_with_contact_id (
-            empathy_get_account_for_connection (connection), data->id,
-            EMPATHY_DISPATCHER_NON_USER_ACTION);
-
-      g_signal_emit (self, signals[CHATS_CHANGED], 0,
-          g_queue_get_length (priv->queue));
-    }
-  else
-    {
-      DEBUG ("Error readying connection, no chat: %s", error->message);
-    }
-
-out:
-  chat_data_free (data);
-}
-
 void
 empathy_chat_manager_undo_closed_chat (EmpathyChatManager *self)
 {
   EmpathyChatManagerPriv *priv = GET_PRIV (self);
   ChatData *data;
-  TpConnection *connection;
 
   data = g_queue_pop_tail (priv->queue);
 
@@ -425,17 +383,17 @@ empathy_chat_manager_undo_closed_chat (EmpathyChatManager *self)
   DEBUG ("Removing %s from queue and starting a chat with: %s",
       data->room ? "room" : "contact", data->id);
 
-  connection = tp_account_get_connection (data->account);
-
-  if (connection != NULL)
-    {
-      tp_connection_call_when_ready (connection, connection_ready_cb, data);
-    }
+  if (data->room)
+    empathy_dispatcher_join_muc (data->account, data->id,
+        EMPATHY_DISPATCHER_NON_USER_ACTION);
   else
-    {
-      DEBUG ("No connection, no chat.");
-      chat_data_free (data);
-    }
+    empathy_dispatcher_chat_with_contact_id (data->account, data->id,
+        EMPATHY_DISPATCHER_NON_USER_ACTION);
+
+  g_signal_emit (self, signals[CHATS_CHANGED], 0,
+      g_queue_get_length (priv->queue));
+
+  chat_data_free (data);
 }
 
 guint
diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c
index d99d2ab..ff8bb5e 100644
--- a/src/empathy-main-window.c
+++ b/src/empathy-main-window.c
@@ -948,16 +948,13 @@ join_chatroom (EmpathyChatroom *chatroom,
 	       gint64 timestamp)
 {
 	TpAccount      *account;
-	TpConnection   *connection;
 	const gchar    *room;
 
 	account = empathy_chatroom_get_account (chatroom);
-	connection = tp_account_get_connection (account);
-	g_assert (connection != NULL);
 	room = empathy_chatroom_get_room (chatroom);
 
 	DEBUG ("Requesting channel for '%s'", room);
-	empathy_dispatcher_join_muc (connection, room, timestamp);
+	empathy_dispatcher_join_muc (account, room, timestamp);
 }
 
 typedef struct
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
index 88003e9..63e7664 100644
--- a/src/empathy-new-chatroom-dialog.c
+++ b/src/empathy-new-chatroom-dialog.c
@@ -714,7 +714,7 @@ static void
 new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog)
 {
 	EmpathyAccountChooser *account_chooser;
-	TpConnection          *connection;
+	TpAccount *account;
 	const gchar           *room;
 	const gchar           *server = NULL;
 	gchar                 *room_name = NULL;
@@ -723,7 +723,7 @@ new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog)
 	server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_server));
 
 	account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser);
-	connection = empathy_account_chooser_get_connection (account_chooser);
+	account = empathy_account_chooser_get_account (account_chooser);
 
 	if (!EMP_STR_EMPTY (server)) {
 		room_name = g_strconcat (room, "@", server, NULL);
@@ -734,7 +734,7 @@ new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog)
 	g_strstrip (room_name);
 
 	DEBUG ("Requesting channel for '%s'", room_name);
-	empathy_dispatcher_join_muc (connection, room_name,
+	empathy_dispatcher_join_muc (account, room_name,
 		gtk_get_current_event_time ());
 
 	g_free (room_name);
diff --git a/src/empathy.c b/src/empathy.c
index aefb934..c128280 100644
--- a/src/empathy.c
+++ b/src/empathy.c
@@ -298,13 +298,10 @@ account_status_changed_cb (TpAccount *account,
     GHashTable *details,
     EmpathyChatroom *room)
 {
-  TpConnection *conn;
-
-  conn = tp_account_get_connection (account);
-  if (conn == NULL)
+  if (new_status != TP_CONNECTION_STATUS_CONNECTED)
     return;
 
-  empathy_dispatcher_join_muc (conn,
+  empathy_dispatcher_join_muc (account,
       empathy_chatroom_get_room (room), EMPATHY_DISPATCHER_NON_USER_ACTION);
 }
 
@@ -352,7 +349,7 @@ account_manager_chatroom_ready_cb (GObject *source_object,
             }
           else
             {
-              empathy_dispatcher_join_muc (conn,
+              empathy_dispatcher_join_muc (account,
                   empathy_chatroom_get_room (room),
                   EMPATHY_DISPATCHER_NON_USER_ACTION);
             }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]