[empathy: 12/59] dispatcher: port to new tp-glib account API
- From: Jonny Lamb <jonnylamb src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [empathy: 12/59] dispatcher: port to new tp-glib account API
- Date: Mon, 2 Nov 2009 13:38:47 +0000 (UTC)
commit aecaf4269593a29ca5234f6fcd07bb7f0ab0a120
Author: Jonny Lamb <jonnylamb gnome org>
Date: Sat Oct 24 15:34:59 2009 +0100
dispatcher: port to new tp-glib account API
Signed-off-by: Jonny Lamb <jonnylamb gnome org>
libempathy/empathy-dispatcher.c | 75 +++++++++++++++++++++++++--------------
1 files changed, 48 insertions(+), 27 deletions(-)
---
diff --git a/libempathy/empathy-dispatcher.c b/libempathy/empathy-dispatcher.c
index d4c2908..c210aec 100644
--- a/libempathy/empathy-dispatcher.c
+++ b/libempathy/empathy-dispatcher.c
@@ -28,6 +28,7 @@
#include <glib/gi18n-lib.h>
+#include <telepathy-glib/account-manager.h>
#include <telepathy-glib/enums.h>
#include <telepathy-glib/connection.h>
#include <telepathy-glib/util.h>
@@ -45,7 +46,6 @@
#include "empathy-handler.h"
#include "empathy-utils.h"
#include "empathy-tube-handler.h"
-#include "empathy-account-manager.h"
#include "empathy-tp-contact-factory.h"
#include "empathy-chatroom-manager.h"
#include "empathy-utils.h"
@@ -58,7 +58,7 @@ typedef struct
{
gboolean dispose_has_run;
- EmpathyAccountManager *account_manager;
+ TpAccountManager *account_manager;
/* connection to connection data mapping */
GHashTable *connections;
GHashTable *outstanding_classes_requests;
@@ -890,11 +890,18 @@ dispatcher_init_connection_if_needed (EmpathyDispatcher *self,
}
static void
-dispatcher_new_connection_cb (EmpathyAccountManager *manager,
- TpConnection *connection,
+dispatcher_new_connection_cb (TpAccount *account,
+ guint old_status,
+ guint new_status,
+ guint reason,
+ gchar *dbus_error_name,
+ GHashTable *details,
EmpathyDispatcher *self)
{
- dispatcher_init_connection_if_needed (self, connection);
+ TpConnection *conn = tp_account_get_connection (account);
+
+ if (conn != NULL)
+ dispatcher_init_connection_if_needed (self, conn);
}
static void
@@ -993,9 +1000,6 @@ dispatcher_finalize (GObject *object)
g_hash_table_destroy (priv->request_channel_class_async_ids);
}
- g_signal_handlers_disconnect_by_func (priv->account_manager,
- dispatcher_new_connection_cb, object);
-
for (l = priv->channels; l; l = l->next)
{
g_signal_handlers_disconnect_by_func (l->data,
@@ -1111,18 +1115,41 @@ empathy_dispatcher_class_init (EmpathyDispatcherClass *klass)
}
static void
+account_manager_prepared_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GList *accounts, *l;
+ EmpathyDispatcher *self = user_data;
+ TpAccountManager *account_manager = TP_ACCOUNT_MANAGER (source_object);
+
+ if (!tp_account_manager_prepare_finish (account_manager, result, NULL))
+ return;
+
+ accounts = tp_account_manager_get_valid_accounts (account_manager);
+ for (l = accounts; l; l = l->next)
+ {
+ TpAccount *a = l->data;
+ TpConnection *conn = tp_account_get_connection (a);
+
+ if (conn != NULL)
+ dispatcher_new_connection_cb (a, 0, 0, 0, NULL, NULL, self);
+
+ empathy_signal_connect_weak (a, "status-changed",
+ G_CALLBACK (dispatcher_new_connection_cb),
+ G_OBJECT (self));
+ }
+ g_list_free (accounts);
+}
+
+static void
empathy_dispatcher_init (EmpathyDispatcher *self)
{
- GList *connections, *l;
EmpathyDispatcherPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
EMPATHY_TYPE_DISPATCHER, EmpathyDispatcherPriv);
self->priv = priv;
- priv->account_manager = empathy_account_manager_dup_singleton ();
-
- g_signal_connect (priv->account_manager, "new-connection",
- G_CALLBACK (dispatcher_new_connection_cb),
- self);
+ priv->account_manager = tp_account_manager_dup ();
priv->connections = g_hash_table_new_full (g_direct_hash, g_direct_equal,
g_object_unref, (GDestroyNotify) free_connection_data);
@@ -1132,15 +1159,8 @@ empathy_dispatcher_init (EmpathyDispatcher *self)
priv->channels = NULL;
- connections = empathy_account_manager_dup_connections (
- priv->account_manager);
- for (l = connections; l; l = l->next)
- {
- dispatcher_new_connection_cb (priv->account_manager, l->data,
- self);
- g_object_unref (l->data);
- }
- g_list_free (connections);
+ tp_account_manager_prepare_async (priv->account_manager, NULL,
+ account_manager_prepared_cb, self);
priv->request_channel_class_async_ids = g_hash_table_new (g_direct_hash,
g_direct_equal);
@@ -1956,15 +1976,16 @@ empathy_dispatcher_handle_channels (EmpathyHandler *handler,
EmpathyDispatcher *self = EMPATHY_DISPATCHER (user_data);
EmpathyDispatcherPriv *priv = GET_PRIV (self);
guint i;
- EmpathyAccount *account;
+ TpAccount *account;
TpConnection *connection;
- account = empathy_account_manager_ensure_account (priv->account_manager,
+ /* FIXME: should probably find out whether the account manager is prepared
+ * before ensuring. */
+ account = tp_account_manager_ensure_account (priv->account_manager,
account_path);
g_assert (account != NULL);
- connection = empathy_account_get_connection_for_path (account,
- connection_path);
+ connection = tp_account_ensure_connection (account, connection_path);
if (connection == NULL)
{
g_set_error_literal (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]