diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/empathy-accounts-dialog.c | 532 | ||||
-rw-r--r-- | src/empathy-accounts-dialog.ui | 2 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 1 | ||||
-rw-r--r-- | src/empathy-debug-dialog.c | 4 | ||||
-rw-r--r-- | src/empathy-event-manager.c | 1 | ||||
-rw-r--r-- | src/empathy-import-dialog.c | 4 | ||||
-rw-r--r-- | src/empathy-main-window.c | 5 | ||||
-rw-r--r-- | src/empathy-new-chatroom-dialog.c | 12 | ||||
-rw-r--r-- | src/empathy-status-icon.c | 17 | ||||
-rw-r--r-- | src/empathy-tube-dispatch.c | 1 | ||||
-rw-r--r-- | src/empathy.c | 286 |
12 files changed, 506 insertions, 361 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 42485b7d1..50d317fbb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -39,8 +39,6 @@ empathy_handwritten_source = \ empathy-chat-window.c empathy-chat-window.h \ empathy-event-manager.c empathy-event-manager.h \ empathy-ft-manager.c empathy-ft-manager.h \ - empathy-import-dialog.c empathy-import-dialog.h \ - empathy-import-pidgin.c empathy-import-pidgin.h \ empathy-main-window.c empathy-main-window.h \ empathy-misc.c empathy-misc.h \ empathy-new-chatroom-dialog.c empathy-new-chatroom-dialog.h \ diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 98e848566..010493ff2 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -31,20 +31,22 @@ #include <glib/gi18n.h> #include <dbus/dbus-glib.h> -#include <libmissioncontrol/mc-profile.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-protocol-chooser.h> #include <libempathy-gtk/empathy-account-widget.h> #include <libempathy-gtk/empathy-account-widget-irc.h> #include <libempathy-gtk/empathy-account-widget-sip.h> #include <libempathy-gtk/empathy-conf.h> #include "empathy-accounts-dialog.h" +#if 0 +/* FIXME MC-5 */ #include "empathy-import-dialog.h" +#endif #define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT #include <libempathy/empathy-debug.h> @@ -58,7 +60,7 @@ typedef struct { GtkWidget *alignment_settings; GtkWidget *vbox_details; - GtkWidget *frame_no_profile; + GtkWidget *frame_no_protocol; GtkWidget *treeview; @@ -67,7 +69,7 @@ typedef struct { GtkWidget *button_import; GtkWidget *frame_new_account; - GtkWidget *combobox_profile; + GtkWidget *combobox_protocol; GtkWidget *hbox_type; GtkWidget *button_create; GtkWidget *button_back; @@ -82,8 +84,10 @@ typedef struct { gboolean connecting_show; guint connecting_id; + gulong settings_ready_id; + EmpathyAccountSettings *settings_ready; + EmpathyAccountManager *account_manager; - MissionControl *mc; } EmpathyAccountsDialog; enum { @@ -91,11 +95,12 @@ enum { COL_NAME, COL_STATUS, COL_ACCOUNT_POINTER, + COL_ACCOUNT_SETTINGS_POINTER, COL_COUNT }; -static void accounts_dialog_update_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account); +static void accounts_dialog_update (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings); static void accounts_dialog_model_setup (EmpathyAccountsDialog *dialog); static void accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog); static void accounts_dialog_name_editing_started_cb (GtkCellRenderer *renderer, @@ -108,14 +113,11 @@ static void accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn GtkTreeModel *model, GtkTreeIter *iter, EmpathyAccountsDialog *dialog); -static EmpathyAccount *accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog); static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog, - EmpathyAccount *account); + EmpathyAccountSettings *settings); static gboolean accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog); static void accounts_dialog_model_selection_changed (GtkTreeSelection *selection, EmpathyAccountsDialog *dialog); -static void accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account); static void accounts_dialog_account_added_cb (EmpathyAccountManager *manager, EmpathyAccount *account, EmpathyAccountsDialog *dialog); @@ -143,8 +145,11 @@ static void accounts_dialog_button_help_clicked_cb (GtkWidget EmpathyAccountsDialog *dialog); static void accounts_dialog_button_remove_clicked_cb (GtkWidget *button, EmpathyAccountsDialog *dialog); +#if 0 +/* FIXME MC-5 */ static void accounts_dialog_button_import_clicked_cb (GtkWidget *button, EmpathyAccountsDialog *dialog); +#endif static void accounts_dialog_response_cb (GtkWidget *widget, gint response, EmpathyAccountsDialog *dialog); @@ -153,25 +158,92 @@ static void accounts_dialog_destroy_cb (GtkWidget static void accounts_dialog_update_name_label (EmpathyAccountsDialog *dialog, - EmpathyAccount *account) + EmpathyAccountSettings *settings) { gchar *text; text = g_markup_printf_escaped ("<big><b>%s</b></big>", - empathy_account_get_display_name (account)); + empathy_account_settings_get_display_name (settings)); gtk_label_set_markup (GTK_LABEL (dialog->label_name), text); g_free (text); } +typedef GtkWidget *CreateWidget (EmpathyAccountSettings *); + +static GtkWidget * +get_account_setup_widget (EmpathyAccountSettings *settings) +{ + const gchar *cm = empathy_account_settings_get_cm (settings); + const gchar *proto = empathy_account_settings_get_protocol (settings); + struct { + const gchar *cm; + const gchar *proto; + CreateWidget *cb; + } dialogs[] = { + { "gabble", "jabber", empathy_account_widget_jabber_new}, + { "butterfly", "msn", empathy_account_widget_msn_new}, + { "salut", "local-xmpp", empathy_account_widget_salut_new}, + { "idle", "irc", empathy_account_widget_irc_new}, + { "haze", "icq", empathy_account_widget_icq_new}, + { "haze", "aim", empathy_account_widget_aim_new}, + { "haze", "yahoo", empathy_account_widget_yahoo_new}, + { "haze", "groupwise", empathy_account_widget_groupwise_new}, + { "sofiasip", "sip", empathy_account_widget_sip_new}, + { NULL, NULL, NULL } + }; + int i; + + for (i = 0; dialogs[i].cm != NULL; i++) { + if (!tp_strdiff (cm, dialogs[i].cm) + && !tp_strdiff (proto, dialogs[i].proto)) + return dialogs[i].cb (settings); + } + + return empathy_account_widget_generic_new (settings); +} + + +static void +account_dialog_create_settings_widget (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) +{ + dialog->settings_widget = get_account_setup_widget (settings); + + gtk_container_add (GTK_CONTAINER (dialog->alignment_settings), + dialog->settings_widget); + gtk_widget_show (dialog->settings_widget); + + + gtk_image_set_from_icon_name (GTK_IMAGE (dialog->image_type), + empathy_account_settings_get_icon_name (settings), + GTK_ICON_SIZE_DIALOG); + gtk_widget_set_tooltip_text (dialog->image_type, + empathy_account_settings_get_protocol (settings)); + + accounts_dialog_update_name_label (dialog, settings); +} + static void -accounts_dialog_update_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account) +account_dialog_settings_ready_cb (EmpathyAccountSettings *settings, + GParamSpec *spec, EmpathyAccountsDialog *dialog) { - McProfile *profile; - const gchar *config_ui; + if (empathy_account_settings_is_ready (settings)) + account_dialog_create_settings_widget (dialog, settings); +} + +static void +accounts_dialog_update_settings (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) +{ + if (dialog->settings_ready != NULL) { + g_signal_handler_disconnect (dialog->settings_ready, + dialog->settings_ready_id); + dialog->settings_ready = NULL; + dialog->settings_ready_id = 0; + } - if (!account) { + if (!settings) { GtkTreeView *view; GtkTreeModel *model; @@ -183,8 +255,8 @@ accounts_dialog_update_account (EmpathyAccountsDialog *dialog, accounts_dialog_model_select_first (dialog); return; } - if (empathy_profile_chooser_n_profiles ( - EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)) > 0) { + if (empathy_protocol_chooser_n_protocols ( + EMPATHY_PROTOCOL_CHOOSER (dialog->combobox_protocol)) > 0) { /* We have no account configured but we have some * profiles instsalled. The user obviously wants to add * an account. Click on the Add button for him. */ @@ -196,7 +268,7 @@ accounts_dialog_update_account (EmpathyAccountsDialog *dialog, /* No account and no profile, warn the user */ gtk_widget_hide (dialog->vbox_details); gtk_widget_hide (dialog->frame_new_account); - gtk_widget_show (dialog->frame_no_profile); + gtk_widget_show (dialog->frame_no_protocol); gtk_widget_set_sensitive (dialog->button_add, FALSE); gtk_widget_set_sensitive (dialog->button_remove, FALSE); return; @@ -205,7 +277,7 @@ accounts_dialog_update_account (EmpathyAccountsDialog *dialog, /* We have an account selected, destroy old settings and create a new * one for the account selected */ gtk_widget_hide (dialog->frame_new_account); - gtk_widget_hide (dialog->frame_no_profile); + gtk_widget_hide (dialog->frame_no_protocol); gtk_widget_show (dialog->vbox_details); gtk_widget_set_sensitive (dialog->button_add, TRUE); gtk_widget_set_sensitive (dialog->button_remove, TRUE); @@ -215,63 +287,18 @@ accounts_dialog_update_account (EmpathyAccountsDialog *dialog, dialog->settings_widget = NULL; } - profile = empathy_account_get_profile (account); - config_ui = mc_profile_get_configuration_ui (profile); - if (!tp_strdiff (config_ui, "jabber")) { - dialog->settings_widget = - empathy_account_widget_jabber_new (account); - } - else if (!tp_strdiff (config_ui, "msn")) { - dialog ->settings_widget = - empathy_account_widget_msn_new (account); - } - else if (!tp_strdiff (config_ui, "local-xmpp")) { - dialog->settings_widget = - empathy_account_widget_salut_new (account); - } - else if (!tp_strdiff (config_ui, "irc")) { - dialog->settings_widget = - empathy_account_widget_irc_new (account); - } - else if (!tp_strdiff (config_ui, "icq")) { - dialog->settings_widget = - empathy_account_widget_icq_new (account); - } - else if (!tp_strdiff (config_ui, "aim")) { - dialog->settings_widget = - empathy_account_widget_aim_new (account); - } - else if (!tp_strdiff (config_ui, "yahoo")) { - dialog->settings_widget = - empathy_account_widget_yahoo_new (account); - } - else if (!tp_strdiff (config_ui, "sofiasip")) { - dialog->settings_widget = - empathy_account_widget_sip_new (account); - } - else if (!tp_strdiff (config_ui, "groupwise")) { - dialog->settings_widget = - empathy_account_widget_groupwise_new (account); - } - else { - dialog->settings_widget = - empathy_account_widget_generic_new (account); - } - - gtk_container_add (GTK_CONTAINER (dialog->alignment_settings), - dialog->settings_widget); - gtk_widget_show (dialog->settings_widget); - - - gtk_image_set_from_icon_name (GTK_IMAGE (dialog->image_type), - mc_profile_get_icon_name (profile), - GTK_ICON_SIZE_DIALOG); - gtk_widget_set_tooltip_text (dialog->image_type, - mc_profile_get_display_name (profile)); - - accounts_dialog_update_name_label (dialog, account); + if (empathy_account_settings_is_ready (settings)) + { + account_dialog_create_settings_widget (dialog, settings); + } + else + { + dialog->settings_ready = settings; + dialog->settings_ready_id = + g_signal_connect (settings, "notify::ready", + G_CALLBACK (account_dialog_settings_ready_cb), dialog); + } - g_object_unref (profile); } static void @@ -284,7 +311,8 @@ accounts_dialog_model_setup (EmpathyAccountsDialog *dialog) G_TYPE_BOOLEAN, /* enabled */ G_TYPE_STRING, /* name */ G_TYPE_UINT, /* status */ - EMPATHY_TYPE_ACCOUNT); /* account */ + EMPATHY_TYPE_ACCOUNT, /* account */ + EMPATHY_TYPE_ACCOUNT_SETTINGS); /* settings */ gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview), GTK_TREE_MODEL (store)); @@ -310,7 +338,7 @@ accounts_dialog_name_edited_cb (GtkCellRendererText *renderer, gchar *new_text, EmpathyAccountsDialog *dialog) { - EmpathyAccount *account; + EmpathyAccountSettings *settings; GtkTreeModel *model; GtkTreePath *treepath; GtkTreeIter iter; @@ -325,15 +353,16 @@ accounts_dialog_name_edited_cb (GtkCellRendererText *renderer, treepath = gtk_tree_path_new_from_string (path); gtk_tree_model_get_iter (model, &iter, treepath); gtk_tree_model_get (model, &iter, - COL_ACCOUNT_POINTER, &account, + COL_ACCOUNT_SETTINGS_POINTER, &settings, -1); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_NAME, new_text, -1); gtk_tree_path_free (treepath); - empathy_account_set_display_name (account, new_text); - g_object_unref (account); + empathy_account_settings_set_display_name_async (settings, new_text, + NULL, NULL); + g_object_unref (settings); } static void @@ -355,6 +384,9 @@ accounts_dialog_enable_toggled_cb (GtkCellRendererToggle *cell_renderer, -1); gtk_tree_path_free (treepath); + if (account == NULL) + return; + enabled = empathy_account_is_enabled (account); empathy_account_set_enabled (account, !enabled); @@ -445,7 +477,7 @@ accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog) selection = gtk_tree_view_get_selection (view); gtk_tree_selection_select_iter (selection, &iter); } else { - accounts_dialog_update_account (dialog, NULL); + accounts_dialog_update_settings (dialog, NULL); } } @@ -456,17 +488,17 @@ accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column, GtkTreeIter *iter, EmpathyAccountsDialog *dialog) { - EmpathyAccount *account; + EmpathyAccountSettings *settings; const gchar *icon_name; GdkPixbuf *pixbuf; TpConnectionStatus status; gtk_tree_model_get (model, iter, COL_STATUS, &status, - COL_ACCOUNT_POINTER, &account, + COL_ACCOUNT_SETTINGS_POINTER, &settings, -1); - icon_name = empathy_icon_name_from_account (account); + icon_name = empathy_account_settings_get_icon_name (settings); pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON); if (pixbuf) { @@ -495,15 +527,15 @@ accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column, "pixbuf", pixbuf, NULL); - g_object_unref (account); + g_object_unref (settings); if (pixbuf) { g_object_unref (pixbuf); } } static gboolean -accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, - EmpathyAccount *account, +accounts_dialog_get_settings_iter (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings, GtkTreeIter *iter) { GtkTreeView *view; @@ -519,6 +551,42 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, for (ok = gtk_tree_model_get_iter_first (model, iter); ok; ok = gtk_tree_model_iter_next (model, iter)) { + EmpathyAccountSettings *this_settings; + gboolean equal; + + gtk_tree_model_get (model, iter, + COL_ACCOUNT_SETTINGS_POINTER, &this_settings, + -1); + + equal = (this_settings == settings); + g_object_unref (this_settings); + + if (equal) { + return TRUE; + } + } + + return FALSE; +} + +static gboolean +accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, + EmpathyAccount *account, + GtkTreeIter *iter) +{ + GtkTreeView *view; + GtkTreeSelection *selection; + GtkTreeModel *model; + gboolean ok; + + /* Update the status in the model */ + view = GTK_TREE_VIEW (dialog->treeview); + selection = gtk_tree_view_get_selection (view); + model = gtk_tree_view_get_model (view); + + for (ok = gtk_tree_model_get_iter_first (model, iter); + ok; + ok = gtk_tree_model_iter_next (model, iter)) { EmpathyAccount *this_account; gboolean equal; @@ -526,7 +594,7 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, COL_ACCOUNT_POINTER, &this_account, -1); - equal = empathy_account_equal (this_account, account); + equal = (this_account == account); g_object_unref (this_account); if (equal) { @@ -537,8 +605,31 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, return FALSE; } +static EmpathyAccountSettings * +accounts_dialog_model_get_selected_settings (EmpathyAccountsDialog *dialog) +{ + GtkTreeView *view; + GtkTreeModel *model; + GtkTreeSelection *selection; + GtkTreeIter iter; + EmpathyAccountSettings *settings; + + view = GTK_TREE_VIEW (dialog->treeview); + selection = gtk_tree_view_get_selection (view); + + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) { + return NULL; + } + + gtk_tree_model_get (model, &iter, + COL_ACCOUNT_SETTINGS_POINTER, &settings, -1); + + return settings; +} + + static EmpathyAccount * -accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog) +accounts_dialog_model_get_selected_account (EmpathyAccountsDialog *dialog) { GtkTreeView *view; GtkTreeModel *model; @@ -560,13 +651,13 @@ accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog) static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog, - EmpathyAccount *account) + EmpathyAccountSettings *settings) { GtkTreeSelection *selection; GtkTreeIter iter; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview)); - if (accounts_dialog_get_account_iter (dialog, account, &iter)) { + if (accounts_dialog_get_settings_iter (dialog, settings, &iter)) { gtk_tree_selection_select_iter (selection, &iter); } } @@ -578,6 +669,7 @@ accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog) GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; + EmpathyAccount *account; view = GTK_TREE_VIEW (dialog->treeview); selection = gtk_tree_view_get_selection (view); @@ -586,6 +678,13 @@ accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog) return FALSE; } + gtk_tree_model_get (model, &iter, + COL_ACCOUNT_POINTER, &account, + -1); + + if (account != NULL) + empathy_account_remove_async (account, NULL, NULL); + return gtk_list_store_remove (GTK_LIST_STORE (model), &iter); } @@ -593,25 +692,48 @@ static void accounts_dialog_model_selection_changed (GtkTreeSelection *selection, EmpathyAccountsDialog *dialog) { - EmpathyAccount *account; + EmpathyAccountSettings *settings; GtkTreeModel *model; GtkTreeIter iter; gboolean is_selection; is_selection = gtk_tree_selection_get_selected (selection, &model, &iter); - account = accounts_dialog_model_get_selected (dialog); - accounts_dialog_update_account (dialog, account); + settings = accounts_dialog_model_get_selected_settings (dialog); + accounts_dialog_update_settings (dialog, settings); - if (account) { - g_object_unref (account); + if (settings) { + g_object_unref (settings); } } static void -accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, +accounts_dialog_add (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) +{ + GtkTreeModel *model; + GtkTreeIter iter; + const gchar *name; + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); + name = empathy_account_settings_get_display_name (settings); + + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_ENABLED, FALSE, + COL_NAME, name, + COL_STATUS, TP_CONNECTION_STATUS_DISCONNECTED, + COL_ACCOUNT_SETTINGS_POINTER, settings, + -1); +} + + +static void +accounts_dialog_add_account (EmpathyAccountsDialog *dialog, EmpathyAccount *account) { + EmpathyAccountSettings *settings; GtkTreeModel *model; GtkTreeIter iter; TpConnectionStatus status; @@ -623,16 +745,16 @@ accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, name = empathy_account_get_display_name (account); enabled = empathy_account_is_enabled (account); - if (!accounts_dialog_get_account_iter (dialog, account, &iter)) { - DEBUG ("Adding new account"); - gtk_list_store_append (GTK_LIST_STORE (model), &iter); - } + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + + settings = empathy_account_settings_new_for_account (account); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ENABLED, enabled, COL_NAME, name, COL_STATUS, status, COL_ACCOUNT_POINTER, account, + COL_ACCOUNT_SETTINGS_POINTER, settings, -1); accounts_dialog_connection_changed_cb (dialog->account_manager, @@ -641,6 +763,39 @@ accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, status, TP_CONNECTION_STATUS_DISCONNECTED, dialog); + + g_object_unref (settings); +} + +static void +accounts_dialog_update (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) +{ + GtkTreeModel *model; + GtkTreeIter iter; + TpConnectionStatus status = TP_CONNECTION_STATUS_DISCONNECTED; + const gchar *name; + gboolean enabled = FALSE; + EmpathyAccount *account; + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); + name = empathy_account_settings_get_display_name (settings); + + account = empathy_account_settings_get_account (settings); + if (account != NULL) + { + enabled = empathy_account_is_enabled (account); + g_object_get (account, "connection-status", &status, NULL); + } + + accounts_dialog_get_settings_iter (dialog, settings, &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_ENABLED, enabled, + COL_NAME, name, + COL_STATUS, status, + COL_ACCOUNT_POINTER, account, + COL_ACCOUNT_SETTINGS_POINTER, settings, + -1); } static void @@ -648,48 +803,20 @@ accounts_dialog_account_added_cb (EmpathyAccountManager *manager, EmpathyAccount *account, EmpathyAccountsDialog *dialog) { - const gchar *current_name; - gchar *account_param = NULL; - - accounts_dialog_add_or_update_account (dialog, account); - - /* Change the display name to "%s (%s)" % (protocol, account). - * - The protocol is the display name of the profile. - * - The account should be the normalized name of the EmpathyAccount but - * it's not set until first connection, so we get the "account" - * parameter for CM that have it. */ - current_name = empathy_account_get_display_name (account); - account_param = empathy_account_get_param_string (account, "account"); - if (!EMP_STR_EMPTY (account_param)) { - McProfile *profile; - const gchar *profile_name; - gchar *new_name; - - profile = empathy_account_get_profile (account); - profile_name = mc_profile_get_display_name (profile); - new_name = g_strdup_printf ("%s (%s)", profile_name, - account_param); - - DEBUG ("Setting new display name for account %s: '%s'", - empathy_account_get_unique_name (account), new_name); - - empathy_account_set_display_name (account, new_name); - g_free (new_name); - g_object_unref (profile); - } else { - /* FIXME: This CM has no account parameter, what can be done? */ - } - g_free (account_param); + accounts_dialog_add_account (dialog, account); } + static void accounts_dialog_account_removed_cb (EmpathyAccountManager *manager, EmpathyAccount *account, EmpathyAccountsDialog *dialog) { + GtkTreeIter iter; - accounts_dialog_model_set_selected (dialog, account); - accounts_dialog_model_remove_selected (dialog); + if (accounts_dialog_get_account_iter (dialog, account, &iter)) + gtk_list_store_remove (GTK_LIST_STORE ( + gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview))), &iter); } static gboolean @@ -803,88 +930,90 @@ accounts_dialog_account_changed_cb (EmpathyAccountManager *manager, EmpathyAccount *account, EmpathyAccountsDialog *dialog) { - EmpathyAccount *selected_account; + EmpathyAccountSettings *settings, *selected_settings; + GtkTreeModel *model; + GtkTreeIter iter; - accounts_dialog_add_or_update_account (dialog, account); - selected_account = accounts_dialog_model_get_selected (dialog); - if (empathy_account_equal (account, selected_account)) { - accounts_dialog_update_name_label (dialog, account); - } + model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); + + if (!accounts_dialog_get_account_iter (dialog, account, &iter)) + return; + + gtk_tree_model_get (model, &iter, + COL_ACCOUNT_SETTINGS_POINTER, &settings, + -1); + + accounts_dialog_update (dialog, settings); + selected_settings = accounts_dialog_model_get_selected_settings (dialog); + + if (settings == selected_settings) + accounts_dialog_update_name_label (dialog, settings); } static void accounts_dialog_button_create_clicked_cb (GtkWidget *button, EmpathyAccountsDialog *dialog) { - McProfile *profile; - EmpathyAccount *account; + EmpathyAccountSettings *settings; gchar *str; - McProfileCapabilityFlags cap; + TpConnectionManager *cm; + TpConnectionManagerProtocol *proto; - profile = empathy_profile_chooser_dup_selected ( - EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)); + cm = empathy_protocol_chooser_dup_selected ( + EMPATHY_PROTOCOL_CHOOSER (dialog->combobox_protocol), &proto); /* Create account */ - account = empathy_account_manager_create (dialog->account_manager, profile); - if (account == NULL) { - /* We can't display an error to the user as MC doesn't give us - * any clue about the reason of the failure... */ - g_object_unref (profile); - return; - } - /* To translator: %s is the protocol name */ - str = g_strdup_printf (_("New %s account"), - mc_profile_get_display_name (profile)); - empathy_account_set_display_name (account, str); + str = g_strdup_printf (_("New %s account"), proto->name); + + settings = empathy_account_settings_new (cm->name, proto->name, str); + g_free (str); - cap = mc_profile_get_capabilities (profile); - if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) { + if (tp_connection_manager_protocol_can_register (proto)) { gboolean active; active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_register)); if (active) { - empathy_account_set_param_boolean (account, "register", TRUE); + empathy_account_settings_set_boolean (settings, "register", TRUE); } } - accounts_dialog_add_or_update_account (dialog, account); - accounts_dialog_model_set_selected (dialog, account); + accounts_dialog_add (dialog, settings); + accounts_dialog_model_set_selected (dialog, settings); - g_object_unref (account); - g_object_unref (profile); + g_object_unref (settings); + g_object_unref (cm); } static void accounts_dialog_button_back_clicked_cb (GtkWidget *button, EmpathyAccountsDialog *dialog) { - EmpathyAccount *account; + EmpathyAccountSettings *settings; - account = accounts_dialog_model_get_selected (dialog); - accounts_dialog_update_account (dialog, account); + settings = accounts_dialog_model_get_selected_settings (dialog); + accounts_dialog_update (dialog, settings); } static void -accounts_dialog_profile_changed_cb (GtkWidget *widget, +accounts_dialog_protocol_changed_cb (GtkWidget *widget, EmpathyAccountsDialog *dialog) { - McProfile *profile; - McProfileCapabilityFlags cap; + TpConnectionManager *cm; + TpConnectionManagerProtocol *proto; - profile = empathy_profile_chooser_dup_selected ( - EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)); - cap = mc_profile_get_capabilities (profile); + cm = empathy_protocol_chooser_dup_selected ( + EMPATHY_PROTOCOL_CHOOSER (dialog->combobox_protocol), &proto); - if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) { + if (tp_connection_manager_protocol_can_register (proto)) { gtk_widget_show (dialog->radiobutton_register); gtk_widget_show (dialog->radiobutton_reuse); } else { gtk_widget_hide (dialog->radiobutton_register); gtk_widget_hide (dialog->radiobutton_reuse); } - g_object_unref (profile); + g_object_unref (cm); } static void @@ -903,7 +1032,7 @@ accounts_dialog_button_add_clicked_cb (GtkWidget *button, gtk_widget_set_sensitive (dialog->button_add, FALSE); gtk_widget_set_sensitive (dialog->button_remove, FALSE); gtk_widget_hide (dialog->vbox_details); - gtk_widget_hide (dialog->frame_no_profile); + gtk_widget_hide (dialog->frame_no_protocol); gtk_widget_show (dialog->frame_new_account); /* If we have no account, no need of a back button */ @@ -913,11 +1042,11 @@ accounts_dialog_button_add_clicked_cb (GtkWidget *button, gtk_widget_hide (dialog->button_back); } - accounts_dialog_profile_changed_cb (dialog->radiobutton_register, dialog); + accounts_dialog_protocol_changed_cb (dialog->radiobutton_register, dialog); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_reuse), TRUE); - gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_profile), 0); - gtk_widget_grab_focus (dialog->combobox_profile); + gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_protocol), 0); + gtk_widget_grab_focus (dialog->combobox_protocol); } static void @@ -935,9 +1064,9 @@ accounts_dialog_button_remove_clicked_cb (GtkWidget *button, GtkWidget *message_dialog; gint res; - account = accounts_dialog_model_get_selected (dialog); + account = accounts_dialog_model_get_selected_account (dialog); - if (!empathy_account_is_valid (account)) { + if (account == NULL || !empathy_account_is_valid (account)) { accounts_dialog_model_remove_selected (dialog); accounts_dialog_model_select_first (dialog); return; @@ -976,12 +1105,15 @@ accounts_dialog_button_remove_clicked_cb (GtkWidget *button, gtk_widget_destroy (message_dialog); } +#if 0 +/* FIXME MC-5 */ static void accounts_dialog_button_import_clicked_cb (GtkWidget *button, EmpathyAccountsDialog *dialog) { empathy_import_dialog_show (GTK_WINDOW (dialog->window), TRUE); } +#endif static void accounts_dialog_response_cb (GtkWidget *widget, @@ -1040,7 +1172,6 @@ accounts_dialog_destroy_cb (GtkWidget *widget, } g_object_unref (dialog->account_manager); - g_object_unref (dialog->mc); g_free (dialog); } @@ -1067,7 +1198,7 @@ empathy_accounts_dialog_show (GtkWindow *parent, gui = empathy_builder_get_file (filename, "accounts_dialog", &dialog->window, "vbox_details", &dialog->vbox_details, - "frame_no_profile", &dialog->frame_no_profile, + "frame_no_protocol", &dialog->frame_no_protocol, "alignment_settings", &dialog->alignment_settings, "treeview", &dialog->treeview, "frame_new_account", &dialog->frame_new_account, @@ -1091,7 +1222,10 @@ empathy_accounts_dialog_show (GtkWindow *parent, "button_back", "clicked", accounts_dialog_button_back_clicked_cb, "button_add", "clicked", accounts_dialog_button_add_clicked_cb, "button_remove", "clicked", accounts_dialog_button_remove_clicked_cb, +#if 0 +/* FIXME MC-5 */ "button_import", "clicked", accounts_dialog_button_import_clicked_cb, +#endif "button_help", "clicked", accounts_dialog_button_help_clicked_cb, NULL); @@ -1099,19 +1233,18 @@ empathy_accounts_dialog_show (GtkWindow *parent, g_object_unref (gui); - /* Create profile chooser */ - dialog->combobox_profile = empathy_profile_chooser_new (); + /* Create protocol chooser */ + dialog->combobox_protocol = empathy_protocol_chooser_new (); gtk_box_pack_end (GTK_BOX (dialog->hbox_type), - dialog->combobox_profile, + dialog->combobox_protocol, TRUE, TRUE, 0); - gtk_widget_show (dialog->combobox_profile); - g_signal_connect (dialog->combobox_profile, "changed", - G_CALLBACK (accounts_dialog_profile_changed_cb), + gtk_widget_show (dialog->combobox_protocol); + g_signal_connect (dialog->combobox_protocol, "changed", + G_CALLBACK (accounts_dialog_protocol_changed_cb), dialog); /* Set up signalling */ dialog->account_manager = empathy_account_manager_dup_singleton (); - dialog->mc = empathy_mission_control_dup_singleton (); g_signal_connect (dialog->account_manager, "account-created", G_CALLBACK (accounts_dialog_account_added_cb), @@ -1137,13 +1270,19 @@ empathy_accounts_dialog_show (GtkWindow *parent, /* Add existing accounts */ accounts = empathy_account_manager_dup_accounts (dialog->account_manager); for (l = accounts; l; l = l->next) { - accounts_dialog_add_or_update_account (dialog, l->data); + accounts_dialog_add_account (dialog, l->data); g_object_unref (l->data); } g_list_free (accounts); if (selected_account) { - accounts_dialog_model_set_selected (dialog, selected_account); + GtkTreeSelection *selection; + GtkTreeIter iter; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview)); + if (accounts_dialog_get_account_iter (dialog, selected_account, &iter)) { + gtk_tree_selection_select_iter (selection, &iter); + } } else { accounts_dialog_model_select_first (dialog); } @@ -1159,6 +1298,8 @@ empathy_accounts_dialog_show (GtkWindow *parent, EMPATHY_PREFS_IMPORT_ASKED, &import_asked); +#if 0 +/* FIXME MC-5 */ if (empathy_import_dialog_accounts_to_import ()) { if (!import_asked) { @@ -1170,6 +1311,7 @@ empathy_accounts_dialog_show (GtkWindow *parent, } else { gtk_widget_set_sensitive (dialog->button_import, FALSE); } +#endif return dialog->window; } diff --git a/src/empathy-accounts-dialog.ui b/src/empathy-accounts-dialog.ui index da00f45d7..7c899a3cb 100644 --- a/src/empathy-accounts-dialog.ui +++ b/src/empathy-accounts-dialog.ui @@ -362,7 +362,7 @@ </packing> </child> <child> - <object class="GtkFrame" id="frame_no_profile"> + <object class="GtkFrame" id="frame_no_protocol"> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index 8dcb68d2f..03644026b 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -35,7 +35,6 @@ #include <libnotify/notification.h> #include <telepathy-glib/util.h> -#include <libmissioncontrol/mission-control.h> #include <libempathy/empathy-contact.h> #include <libempathy/empathy-message.h> diff --git a/src/empathy-debug-dialog.c b/src/empathy-debug-dialog.c index 9d047bab1..d71542db0 100644 --- a/src/empathy-debug-dialog.c +++ b/src/empathy-debug-dialog.c @@ -284,7 +284,6 @@ debug_dialog_cm_chooser_changed_cb (GtkComboBox *cm_chooser, EmpathyDebugDialog *debug_dialog) { EmpathyDebugDialogPriv *priv = GET_PRIV (debug_dialog); - MissionControl *mc; TpDBusDaemon *dbus; GError *error = NULL; gchar *bus_name; @@ -302,13 +301,11 @@ debug_dialog_cm_chooser_changed_cb (GtkComboBox *cm_chooser, return; } - mc = empathy_mission_control_dup_singleton (); dbus = tp_dbus_daemon_dup (&error); if (error != NULL) { DEBUG ("Failed at duping the dbus daemon: %s", error->message); - g_object_unref (mc); } gtk_tree_model_get (GTK_TREE_MODEL (priv->cms), &iter, @@ -344,7 +341,6 @@ debug_dialog_cm_chooser_changed_cb (GtkComboBox *cm_chooser, debug_dialog_get_messages_cb, debug_dialog, NULL, NULL); g_object_unref (dbus); - g_object_unref (mc); } typedef struct diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c index 1a7ec09cb..1be3ff7ce 100644 --- a/src/empathy-event-manager.c +++ b/src/empathy-event-manager.c @@ -25,6 +25,7 @@ #include <glib/gi18n.h> #include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> #include <libempathy/empathy-account-manager.h> #include <libempathy/empathy-dispatcher.h> diff --git a/src/empathy-import-dialog.c b/src/empathy-import-dialog.c index 1e135892d..1d0854dd0 100644 --- a/src/empathy-import-dialog.c +++ b/src/empathy-import-dialog.c @@ -99,7 +99,9 @@ import_dialog_add_account (EmpathyImportAccountData *data) GValue *username; account_manager = empathy_account_manager_dup_singleton (); - account = empathy_account_manager_create (account_manager, data->profile); + account = empathy_account_manager_create_by_profile (account_manager, + data->profile); + g_object_unref (account_manager); if (account == NULL) { diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c index a600fd429..4a9f80f76 100644 --- a/src/empathy-main-window.c +++ b/src/empathy-main-window.c @@ -49,8 +49,6 @@ #include <libempathy-gtk/empathy-sound.h> #include <libempathy-gtk/empathy-ui-utils.h> -#include <libmissioncontrol/mission-control.h> - #include "empathy-accounts-dialog.h" #include "empathy-main-window.h" #include "ephy-spinner.h" @@ -81,7 +79,6 @@ typedef struct { EmpathyContactListView *list_view; EmpathyContactListStore *list_store; - MissionControl *mc; EmpathyAccountManager *account_manager; EmpathyChatroomManager *chatroom_manager; EmpathyEventManager *event_manager; @@ -654,7 +651,6 @@ main_window_destroy_cb (GtkWidget *widget, g_list_free (window->actions_connected); - g_object_unref (window->mc); g_object_unref (window->account_manager); g_object_unref (window->list_store); g_hash_table_destroy (window->errors); @@ -1252,7 +1248,6 @@ empathy_main_window_show (void) gtk_action_set_visible (show_map_widget, FALSE); #endif - window->mc = empathy_mission_control_dup_singleton (); window->account_manager = empathy_account_manager_dup_singleton (); g_signal_connect (window->account_manager, diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c index e16da91a7..219be371d 100644 --- a/src/empathy-new-chatroom-dialog.c +++ b/src/empathy-new-chatroom-dialog.c @@ -32,9 +32,6 @@ #include <glib/gi18n.h> #include <glib/gprintf.h> -#include <libmissioncontrol/mission-control.h> -#include <libmissioncontrol/mc-profile.h> - #include <libempathy/empathy-tp-roomlist.h> #include <libempathy/empathy-chatroom.h> #include <libempathy/empathy-utils.h> @@ -358,14 +355,16 @@ new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog) { EmpathyAccountChooser *account_chooser; EmpathyAccount *account; - McProfile *profile; const gchar *protocol; const gchar *room; account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); account = empathy_account_chooser_dup_account (account_chooser); - profile = empathy_account_get_profile (account); - protocol = mc_profile_get_protocol_name (profile); + + if (account == NULL) + return; + + protocol = empathy_account_get_protocol (account); gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), ""); @@ -390,7 +389,6 @@ new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog) gtk_widget_grab_focus (dialog->entry_room); g_object_unref (account); - g_object_unref (profile); } static void diff --git a/src/empathy-status-icon.c b/src/empathy-status-icon.c index f6c63c537..aca2d85c2 100644 --- a/src/empathy-status-icon.c +++ b/src/empathy-status-icon.c @@ -305,24 +305,7 @@ status_icon_set_visibility (EmpathyStatusIcon *icon, if (!visible) { empathy_window_iconify (priv->window, priv->icon); } else { - GList *accounts; - GList *l; - gboolean one_enabled = FALSE; - empathy_window_present (GTK_WINDOW (priv->window), TRUE); - - /* Show the accounts dialog if there is no enabled accounts */ - accounts = empathy_account_manager_dup_accounts (priv->account_manager); - for (l = accounts ; l != NULL ; l = g_list_next (l)) { - one_enabled = empathy_account_is_enabled (EMPATHY_ACCOUNT (l->data)) - || one_enabled; - g_object_unref (l->data); - } - g_list_free (accounts); - if (!one_enabled) { - DEBUG ("No enabled account, Showing account dialog"); - empathy_accounts_dialog_show (GTK_WINDOW (priv->window), NULL); - } } } diff --git a/src/empathy-tube-dispatch.c b/src/empathy-tube-dispatch.c index 67db5a3a3..66efa217d 100644 --- a/src/empathy-tube-dispatch.c +++ b/src/empathy-tube-dispatch.c @@ -25,6 +25,7 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> #include <telepathy-glib/proxy-subclass.h> +#include <telepathy-glib/interfaces.h> #include <gtk/gtk.h> #include <glib/gi18n.h> diff --git a/src/empathy.c b/src/empathy.c index 0754eb7ab..4e824bcb4 100644 --- a/src/empathy.c +++ b/src/empathy.c @@ -40,13 +40,16 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> -#include <libmissioncontrol/mission-control.h> +#include <telepathy-glib/connection-manager.h> +#include <telepathy-glib/interfaces.h> #include <libempathy/empathy-idle.h> #include <libempathy/empathy-utils.h> #include <libempathy/empathy-call-factory.h> #include <libempathy/empathy-chatroom-manager.h> +#include <libempathy/empathy-account-settings.h> #include <libempathy/empathy-account-manager.h> +#include <libempathy/empathy-connection-managers.h> #include <libempathy/empathy-debugger.h> #include <libempathy/empathy-dispatcher.h> #include <libempathy/empathy-dispatch-operation.h> @@ -146,89 +149,91 @@ dispatch_cb (EmpathyDispatcher *dispatcher, } static void -service_ended_cb (MissionControl *mc, - gpointer user_data) +use_nm_notify_cb (EmpathyConf *conf, + const gchar *key, + gpointer user_data) { - DEBUG ("Mission Control stopped"); + EmpathyIdle *idle = user_data; + gboolean use_nm; + + if (empathy_conf_get_bool (conf, key, &use_nm)) { + empathy_idle_set_use_nm (idle, use_nm); + } } -static void -operation_error_cb (MissionControl *mc, - guint operation_id, - guint error_code, - gpointer user_data) +/* Salut account creation */ +static gboolean +should_create_salut_account (void) { - const gchar *message; - - switch (error_code) { - case MC_DISCONNECTED_ERROR: - message = "Disconnected"; - break; - case MC_INVALID_HANDLE_ERROR: - message = "Invalid handle"; - break; - case MC_NO_MATCHING_CONNECTION_ERROR: - message = "No matching connection"; - break; - case MC_INVALID_ACCOUNT_ERROR: - message = "Invalid account"; - break; - case MC_PRESENCE_FAILURE_ERROR: - message = "Presence failure"; - break; - case MC_NO_ACCOUNTS_ERROR: - message = "No accounts"; - break; - case MC_NETWORK_ERROR: - message = "Network error"; - break; - case MC_CONTACT_DOES_NOT_SUPPORT_VOICE_ERROR: - message = "Contact does not support voice"; - break; - case MC_LOWMEM_ERROR: - message = "Lowmem"; - break; - case MC_CHANNEL_REQUEST_GENERIC_ERROR: - message = "Channel request generic error"; - break; - case MC_CHANNEL_BANNED_ERROR: - message = "Channel banned"; - break; - case MC_CHANNEL_FULL_ERROR: - message = "Channel full"; - break; - case MC_CHANNEL_INVITE_ONLY_ERROR: - message = "Channel invite only"; - break; - default: - message = "Unknown error code"; + EmpathyAccountManager *manager; + gboolean salut_created = FALSE; + GList *accounts, *l; + + /* Check if we already created a salut account */ + empathy_conf_get_bool (empathy_conf_get (), + EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, + &salut_created); + + if (salut_created) + { + DEBUG ("Gconf says we already created a salut account once"); + return FALSE; + } + + manager = empathy_account_manager_dup_singleton (); + accounts = empathy_account_manager_dup_accounts (manager); + + for (l = accounts; l != NULL; l = g_list_next (l)) { + EmpathyAccount *account = EMPATHY_ACCOUNT (l->data); + + if (!tp_strdiff (empathy_account_get_protocol (account), "local-xmpp")) + salut_created = TRUE; + + g_object_unref (account); } - DEBUG ("Error during operation %d: %s", operation_id, message); + g_object_unref (manager); + + if (salut_created) + { + DEBUG ("Existing salut account already exists, flagging so in gconf"); + empathy_conf_set_bool (empathy_conf_get (), + EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, + TRUE); + } + + return !salut_created; } static void -use_nm_notify_cb (EmpathyConf *conf, - const gchar *key, - gpointer user_data) +salut_account_created (GObject *source, + GAsyncResult *result, gpointer user_data) { - EmpathyIdle *idle = user_data; - gboolean use_nm; + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (source); + EmpathyAccount *account; + GError *error = NULL; + + if (!empathy_account_settings_apply_finish (settings, result, &error)) + { + DEBUG ("Failed to create salut account: %s", error->message); + g_error_free (error); + return; + } - if (empathy_conf_get_bool (conf, key, &use_nm)) { - empathy_idle_set_use_nm (idle, use_nm); - } + account = empathy_account_settings_get_account (settings); + + empathy_account_set_enabled (account, TRUE); + empathy_conf_set_bool (empathy_conf_get (), + EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, + TRUE); } static void -create_salut_account (void) +create_salut_account_if_needed (EmpathyConnectionManagers *managers) { - McProfile *profile; - McProtocol *protocol; - gboolean salut_created = FALSE; - EmpathyAccount *account; - EmpathyAccountManager *account_manager; - GList *accounts; + EmpathyAccountSettings *settings; + TpConnectionManager *manager; + const TpConnectionManagerProtocol *protocol; EBook *book; EContact *contact; gchar *nickname = NULL; @@ -238,56 +243,36 @@ create_salut_account (void) gchar *jid = NULL; GError *error = NULL; - /* Check if we already created a salut account */ - empathy_conf_get_bool (empathy_conf_get (), - EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, - &salut_created); - if (salut_created) { + + if (!should_create_salut_account ()) return; - } - DEBUG ("Try to add a salut account..."); + manager = empathy_connection_managers_get_cm (managers, "salut"); + if (manager == NULL) + { + DEBUG ("Salut not installed, not making a salut account"); + return; + } - /* Check if the salut CM is installed */ - profile = mc_profile_lookup ("salut"); - if (!profile) { - DEBUG ("No salut profile"); - return; - } - protocol = mc_profile_get_protocol (profile); - if (!protocol) { - DEBUG ("Salut not installed"); - g_object_unref (profile); - return; - } - g_object_unref (protocol); + protocol = tp_connection_manager_get_protocol (manager, "local-xmpp"); + if (protocol == NULL) + { + DEBUG ("Salut doesn't support local-xmpp!!"); + return; + } + + DEBUG ("Trying to add a salut account..."); /* Get self EContact from EDS */ if (!e_book_get_self (&contact, &book, &error)) { DEBUG ("Failed to get self econtact: %s", error ? error->message : "No error given"); g_clear_error (&error); - g_object_unref (profile); return; } - empathy_conf_set_bool (empathy_conf_get (), - EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, - TRUE); - - /* Check if there is already a salut account */ - accounts = mc_accounts_list_by_profile (profile); - if (accounts) { - DEBUG ("There is already a salut account"); - mc_accounts_list_free (accounts); - g_object_unref (profile); - return; - } - - account_manager = empathy_account_manager_dup_singleton (); - account = empathy_account_manager_create (account_manager, profile); - empathy_account_set_display_name (account, _("People nearby")); - g_object_unref (account_manager); + settings = empathy_account_settings_new ("salut", "local-xmpp", + _("People nearby")); nickname = e_contact_get (contact, E_CONTACT_NICKNAME); first_name = e_contact_get (contact, E_CONTACT_GIVEN_NAME); @@ -304,24 +289,60 @@ create_salut_account (void) "last-name=%s\nemail=%s\njid=%s\n", nickname, first_name, last_name, email, jid); - empathy_account_set_param_string (account, "nickname", nickname ? nickname : ""); - empathy_account_set_param_string (account, "first-name", first_name ? first_name : ""); - empathy_account_set_param_string (account, "last-name", last_name ? last_name : ""); - empathy_account_set_param_string (account, "email", email ? email : ""); - empathy_account_set_param_string (account, "jid", jid ? jid : ""); + empathy_account_settings_set_string (settings, "nickname", nickname ? nickname : ""); + empathy_account_settings_set_string (settings, "first-name", first_name ? first_name : ""); + empathy_account_settings_set_string (settings, "last-name", last_name ? last_name : ""); + empathy_account_settings_set_string (settings, "email", email ? email : ""); + empathy_account_settings_set_string (settings, "jid", jid ? jid : ""); + + empathy_account_settings_apply_async (settings, + salut_account_created, NULL); g_free (nickname); g_free (first_name); g_free (last_name); g_free (email); g_free (jid); - g_object_unref (account); - g_object_unref (profile); + g_object_unref (settings); g_object_unref (contact); g_object_unref (book); } static void +connection_managers_ready_cb (EmpathyConnectionManagers *managers, + GParamSpec *spec, gpointer user_data) +{ + if (empathy_connection_managers_is_ready (managers)) + { + create_salut_account_if_needed (managers); + g_object_unref (managers); + managers = NULL; + } +} + +static void +create_salut_account (void) +{ + EmpathyConnectionManagers *managers; + + if (!should_create_salut_account ()) + return; + + managers = empathy_connection_managers_dup_singleton (); + + if (empathy_connection_managers_is_ready (managers)) + { + create_salut_account_if_needed (managers); + g_object_unref (managers); + } + else + { + g_signal_connect (managers, "notify::ready", + G_CALLBACK (connection_managers_ready_cb), NULL); + } +} + +static void migrate_config_to_xdg_dir (void) { gchar *xdg_dir, *old_dir, *xdg_filename, *old_filename; @@ -539,6 +560,22 @@ default_log_handler (const gchar *log_domain, } #endif /* ENABLE_DEBUG */ +static void +account_manager_ready_cb (EmpathyAccountManager *manager, + GParamSpec *spec, + gpointer user_data) +{ + if (!empathy_account_manager_is_ready (manager)) + return; + + if (empathy_account_manager_get_count (manager) == 0) + { + empathy_accounts_dialog_show (GTK_WINDOW (empathy_main_window_get ()), + NULL); + } + create_salut_account (); +} + int main (int argc, char *argv[]) { @@ -548,12 +585,12 @@ main (int argc, char *argv[]) #endif EmpathyStatusIcon *icon; EmpathyDispatcher *dispatcher; + EmpathyAccountManager *account_manager; EmpathyLogManager *log_manager; EmpathyChatroomManager *chatroom_manager; EmpathyCallFactory *call_factory; EmpathyFTFactory *ft_factory; GtkWidget *window; - MissionControl *mc; EmpathyIdle *idle; gboolean autoconnect = TRUE; gboolean no_connect = FALSE; @@ -660,15 +697,6 @@ main (int argc, char *argv[]) g_clear_error (&error); } - /* Setting up MC */ - mc = empathy_mission_control_dup_singleton (); - g_signal_connect (mc, "ServiceEnded", - G_CALLBACK (service_ended_cb), - NULL); - g_signal_connect (mc, "Error", - G_CALLBACK (operation_error_cb), - NULL); - if (accounts_dialog) { GtkWidget *dialog; @@ -695,12 +723,15 @@ main (int argc, char *argv[]) if (autoconnect && ! no_connect && tp_connection_presence_type_cmp_availability (empathy_idle_get_state (idle), TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0) { - empathy_idle_set_state (idle, MC_PRESENCE_AVAILABLE); + empathy_idle_set_state (idle, TP_CONNECTION_PRESENCE_TYPE_AVAILABLE); } + /* account management */ + account_manager = empathy_account_manager_dup_singleton (); + g_signal_connect (account_manager, "notify::ready", + G_CALLBACK (account_manager_ready_cb), NULL); migrate_config_to_xdg_dir (); - create_salut_account (); /* Setting up UI */ window = empathy_main_window_show (); @@ -745,9 +776,9 @@ main (int argc, char *argv[]) empathy_idle_set_state (idle, TP_CONNECTION_PRESENCE_TYPE_OFFLINE); - g_object_unref (mc); g_object_unref (idle); g_object_unref (icon); + g_object_unref (account_manager); g_object_unref (log_manager); g_object_unref (dispatcher); g_object_unref (chatroom_manager); @@ -760,4 +791,3 @@ main (int argc, char *argv[]) return EXIT_SUCCESS; } - |