aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/empathy-accounts-dialog.c532
-rw-r--r--src/empathy-accounts-dialog.ui2
-rw-r--r--src/empathy-chat-window.c1
-rw-r--r--src/empathy-debug-dialog.c4
-rw-r--r--src/empathy-event-manager.c1
-rw-r--r--src/empathy-import-dialog.c4
-rw-r--r--src/empathy-main-window.c5
-rw-r--r--src/empathy-new-chatroom-dialog.c12
-rw-r--r--src/empathy-status-icon.c17
-rw-r--r--src/empathy-tube-dispatch.c1
-rw-r--r--src/empathy.c286
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;
}
-