diff options
-rw-r--r-- | src/empathy-accounts-dialog.c | 155 |
1 files changed, 72 insertions, 83 deletions
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 72967cbda..c1e59da57 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -34,11 +34,10 @@ #include <libmissioncontrol/mc-account.h> #include <libmissioncontrol/mc-profile.h> -#include <libmissioncontrol/mission-control.h> -#include <libmissioncontrol/mc-account-monitor.h> #include <telepathy-glib/util.h> #include <libempathy/empathy-utils.h> +#include <libempathy/empathy-account-manager.h> #include <libempathy-gtk/empathy-ui-utils.h> #include <libempathy-gtk/empathy-profile-chooser.h> #include <libempathy-gtk/empathy-account-widget.h> @@ -84,9 +83,8 @@ typedef struct { gboolean connecting_show; guint connecting_id; - MissionControl *mc; - McAccountMonitor *monitor; - gpointer token; + EmpathyAccountManager *account_manager; + MissionControl *mc; } EmpathyAccountsDialog; enum { @@ -119,11 +117,11 @@ static void accounts_dialog_model_selection_changed (GtkTreeSelection EmpathyAccountsDialog *dialog); static void accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, McAccount *account); -static void accounts_dialog_account_added_cb (McAccountMonitor *monitor, - gchar *unique_name, +static void accounts_dialog_account_added_cb (EmpathyAccountManager *manager, + McAccount *account, EmpathyAccountsDialog *dialog); -static void accounts_dialog_account_removed_cb (McAccountMonitor *monitor, - gchar *unique_name, +static void accounts_dialog_account_removed_cb (EmpathyAccountManager *manager, + McAccount *account, EmpathyAccountsDialog *dialog); static gboolean accounts_dialog_row_changed_foreach (GtkTreeModel *model, GtkTreePath *path, @@ -131,11 +129,11 @@ static gboolean accounts_dialog_row_changed_foreach (GtkTreeModel gpointer user_data); static gboolean accounts_dialog_flash_connecting_cb (EmpathyAccountsDialog *dialog); static gboolean accounts_dialog_are_accounts_connecting (MissionControl *mc); -static void accounts_dialog_status_changed_cb (MissionControl *mc, - TpConnectionStatus status, - McPresence presence, +static void accounts_dialog_connection_changed_cb (EmpathyAccountManager *manager, + McAccount *account, TpConnectionStatusReason reason, - const gchar *unique_name, + TpConnectionStatus current, + TpConnectionStatus previous, EmpathyAccountsDialog *dialog); static void accounts_dialog_button_create_clicked_cb (GtkWidget *button, EmpathyAccountsDialog *dialog); @@ -636,24 +634,22 @@ accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, COL_ACCOUNT_POINTER, account, -1); - accounts_dialog_status_changed_cb (dialog->mc, - status, - MC_PRESENCE_UNSET, - TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED, - mc_account_get_unique_name (account), - dialog); + accounts_dialog_connection_changed_cb (dialog->account_manager, + account, + TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED, + status, + TP_CONNECTION_STATUS_DISCONNECTED, + dialog); } static void -accounts_dialog_account_added_cb (McAccountMonitor *monitor, - gchar *unique_name, +accounts_dialog_account_added_cb (EmpathyAccountManager *manager, + McAccount *account, EmpathyAccountsDialog *dialog) { - McAccount *account; const gchar *current_name; gchar *account_param = NULL; - account = mc_account_lookup (unique_name); accounts_dialog_add_or_update_account (dialog, account); /* Change the display name to "%s (%s)" % (protocol, account). @@ -674,7 +670,7 @@ accounts_dialog_account_added_cb (McAccountMonitor *monitor, account_param); DEBUG ("Setting new display name for account %s: '%s'", - unique_name, new_name); + mc_account_get_unique_name (account), new_name); mc_account_set_display_name (account, new_name); g_free (new_name); @@ -683,22 +679,16 @@ accounts_dialog_account_added_cb (McAccountMonitor *monitor, /* FIXME: This CM has no account parameter, what can be done? */ } g_free (account_param); - g_object_unref (account); } static void -accounts_dialog_account_removed_cb (McAccountMonitor *monitor, - gchar *unique_name, +accounts_dialog_account_removed_cb (EmpathyAccountManager *manager, + McAccount *account, EmpathyAccountsDialog *dialog) { - McAccount *account; - - account = mc_account_lookup (unique_name); accounts_dialog_model_set_selected (dialog, account); accounts_dialog_model_remove_selected (dialog); - - g_object_unref (account); } static gboolean @@ -753,42 +743,33 @@ accounts_dialog_are_accounts_connecting (MissionControl *mc) } static void -accounts_dialog_status_changed_cb (MissionControl *mc, - TpConnectionStatus status, - McPresence presence, - TpConnectionStatusReason reason, - const gchar *unique_name, - EmpathyAccountsDialog *dialog) +accounts_dialog_connection_changed_cb (EmpathyAccountManager *manager, + McAccount *account, + TpConnectionStatusReason reason, + TpConnectionStatus current, + TpConnectionStatus previous, + EmpathyAccountsDialog *dialog) { GtkTreeModel *model; GtkTreeIter iter; - McAccount *account; - gboolean found = FALSE; + gboolean found; /* Update the status in the model */ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); - account = mc_account_lookup (unique_name); - if (!account) { - return; - } - - DEBUG ("Status changed for account %s: status=%d presence=%d", - unique_name, status, presence); if (accounts_dialog_get_account_iter (dialog, account, &iter)) { GtkTreePath *path; gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COL_STATUS, status, + COL_STATUS, current, -1); path = gtk_tree_model_get_path (model, &iter); gtk_tree_model_row_changed (model, path, &iter); gtk_tree_path_free (path); } - g_object_unref (account); - found = accounts_dialog_are_accounts_connecting (mc); + found = accounts_dialog_are_accounts_connecting (dialog->mc); if (!found && dialog->connecting_id) { g_source_remove (dialog->connecting_id); @@ -802,19 +783,15 @@ accounts_dialog_status_changed_cb (MissionControl *mc, } static void -accounts_dialog_account_enabled_cb (McAccountMonitor *monitor, - gchar *unique_name, - EmpathyAccountsDialog *dialog) +enable_or_disable_account (EmpathyAccountsDialog *dialog, + McAccount *account, + gboolean enabled) { GtkTreeModel *model; GtkTreeIter iter; - McAccount *account; - gboolean enabled; /* Update the status in the model */ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); - account = mc_account_lookup (unique_name); - enabled = mc_account_is_enabled (account); DEBUG ("Account %s is now %s", mc_account_get_display_name (account), @@ -825,24 +802,31 @@ accounts_dialog_account_enabled_cb (McAccountMonitor *monitor, COL_ENABLED, enabled, -1); } +} - g_object_unref (account); +static void +accounts_dialog_account_disabled_cb (EmpathyAccountManager *manager, + McAccount *account, + EmpathyAccountsDialog *dialog) +{ + enable_or_disable_account (dialog, account, FALSE); } static void -accounts_dialog_account_changed_cb (McAccountMonitor *monitor, - gchar *unique_name, - EmpathyAccountsDialog *dialog) +accounts_dialog_account_enabled_cb (EmpathyAccountManager *manager, + McAccount *account, + EmpathyAccountsDialog *dialog) { + enable_or_disable_account (dialog, account, TRUE); +} - McAccount *account; +static void +accounts_dialog_account_changed_cb (EmpathyAccountManager *manager, + McAccount *account, + EmpathyAccountsDialog *dialog) +{ McAccount *selected_account; - account = mc_account_lookup (unique_name); - if (!account) { - return; - } - accounts_dialog_add_or_update_account (dialog, account); selected_account = accounts_dialog_model_get_selected (dialog); if (empathy_account_equal (account, selected_account)) { @@ -1027,19 +1011,24 @@ accounts_dialog_destroy_cb (GtkWidget *widget, GList *accounts, *l; /* Disconnect signals */ - g_signal_handlers_disconnect_by_func (dialog->monitor, + g_signal_handlers_disconnect_by_func (dialog->account_manager, accounts_dialog_account_added_cb, dialog); - g_signal_handlers_disconnect_by_func (dialog->monitor, + g_signal_handlers_disconnect_by_func (dialog->account_manager, accounts_dialog_account_removed_cb, dialog); - g_signal_handlers_disconnect_by_func (dialog->monitor, + g_signal_handlers_disconnect_by_func (dialog->account_manager, accounts_dialog_account_enabled_cb, dialog); - g_signal_handlers_disconnect_by_func (dialog->monitor, + g_signal_handlers_disconnect_by_func (dialog->account_manager, + accounts_dialog_account_disabled_cb, + dialog); + g_signal_handlers_disconnect_by_func (dialog->account_manager, accounts_dialog_account_changed_cb, dialog); - empathy_disconnect_account_status_changed (dialog->token); + g_signal_handlers_disconnect_by_func (dialog->account_manager, + accounts_dialog_connection_changed_cb, + dialog); /* Delete incomplete accounts */ accounts = mc_accounts_list (); @@ -1061,8 +1050,8 @@ accounts_dialog_destroy_cb (GtkWidget *widget, g_source_remove (dialog->connecting_id); } + g_object_unref (dialog->account_manager); g_object_unref (dialog->mc); - g_object_unref (dialog->monitor); g_free (dialog); } @@ -1134,27 +1123,27 @@ empathy_accounts_dialog_show (GtkWindow *parent, dialog); /* Set up signalling */ + dialog->account_manager = empathy_account_manager_new (); dialog->mc = empathy_mission_control_new (); - dialog->monitor = mc_account_monitor_new (); - g_signal_connect (dialog->monitor, "account-created", + g_signal_connect (dialog->account_manager, "account-created", G_CALLBACK (accounts_dialog_account_added_cb), dialog); - g_signal_connect (dialog->monitor, "account-deleted", + g_signal_connect (dialog->account_manager, "account-deleted", G_CALLBACK (accounts_dialog_account_removed_cb), dialog); - g_signal_connect (dialog->monitor, "account-enabled", + g_signal_connect (dialog->account_manager, "account-enabled", G_CALLBACK (accounts_dialog_account_enabled_cb), dialog); - g_signal_connect (dialog->monitor, "account-disabled", - G_CALLBACK (accounts_dialog_account_enabled_cb), + g_signal_connect (dialog->account_manager, "account-disabled", + G_CALLBACK (accounts_dialog_account_disabled_cb), dialog); - g_signal_connect (dialog->monitor, "account-changed", + g_signal_connect (dialog->account_manager, "account-changed", G_CALLBACK (accounts_dialog_account_changed_cb), dialog); - dialog->token = empathy_connect_to_account_status_changed (dialog->mc, - G_CALLBACK (accounts_dialog_status_changed_cb), - dialog, NULL); + g_signal_connect (dialog->account_manager, "account-connection-changed", + G_CALLBACK (accounts_dialog_connection_changed_cb), + dialog); accounts_dialog_model_setup (dialog); |