aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-account-widget.c140
-rw-r--r--libempathy-gtk/empathy-theme-adium.c5
-rw-r--r--src/empathy-accounts-dialog.c95
-rw-r--r--src/empathy-new-chatroom-dialog.c5
4 files changed, 117 insertions, 128 deletions
diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c
index f602cd8bd..8b71e3fff 100644
--- a/libempathy-gtk/empathy-account-widget.c
+++ b/libempathy-gtk/empathy-account-widget.c
@@ -29,11 +29,11 @@
#include <gtk/gtk.h>
#include <glib/gi18n-lib.h>
-#include <libmissioncontrol/mc-protocol.h>
-
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-account.h>
+#include <telepathy-glib/connection-manager.h>
+
#include "empathy-account-widget.h"
#include "empathy-ui-utils.h"
@@ -60,27 +60,9 @@ account_widget_entry_focus_cb (GtkWidget *widget,
gtk_entry_set_text (GTK_ENTRY (widget), value ? value : "");
g_free (value);
} else {
- McProfile *profile;
- const gchar *domain = NULL;
- gchar *dup_str = NULL;
-
- profile = empathy_account_get_profile (account);
- if (mc_profile_get_capabilities (profile) &
- MC_PROFILE_CAPABILITY_SPLIT_ACCOUNT) {
- domain = mc_profile_get_default_account_domain (profile);
- }
-
- if (domain && !strstr (str, "@") &&
- strcmp (param_name, "account") == 0) {
- DEBUG ("Adding @%s suffix to account", domain);
- str = dup_str = g_strconcat (str, "@", domain, NULL);
- gtk_entry_set_text (GTK_ENTRY (widget), str);
- }
DEBUG ("Setting %s to %s", param_name,
strstr (param_name, "password") ? "***" : str);
empathy_account_set_param_string (account, param_name, str);
- g_free (dup_str);
- g_object_unref (profile);
}
return FALSE;
@@ -257,37 +239,19 @@ account_widget_generic_format_param_name (const gchar *param_name)
static void
accounts_widget_generic_setup (EmpathyAccount *account,
+ TpConnectionManagerParam *params,
GtkWidget *table_common_settings,
GtkWidget *table_advanced_settings)
{
- McProtocol *protocol;
- McProfile *profile;
- GSList *params, *l;
-
- profile = empathy_account_get_profile (account);
- protocol = mc_profile_get_protocol (profile);
-
- if (!protocol) {
- /* The CM is not installed, MC shouldn't list them
- * see SF bug #1688779
- * FIXME: We should display something asking the user to
- * install the CM
- */
- g_object_unref (profile);
- return;
- }
+ TpConnectionManagerParam *param;
- params = mc_protocol_get_params (protocol);
-
- for (l = params; l; l = l->next) {
- McProtocolParam *param;
+ for (param = params; param != NULL; param++) {
GtkWidget *table_settings;
guint n_rows = 0;
GtkWidget *widget = NULL;
gchar *param_name_formatted;
- param = l->data;
- if (param->flags & MC_PROTOCOL_PARAM_REQUIRED) {
+ if (param->flags & TP_CONN_MGR_PARAM_FLAG_REQUIRED) {
table_settings = table_common_settings;
} else {
table_settings = table_advanced_settings;
@@ -296,7 +260,7 @@ accounts_widget_generic_setup (EmpathyAccount *account,
g_object_get (table_settings, "n-rows", &n_rows, NULL);
gtk_table_resize (GTK_TABLE (table_settings), ++n_rows, 2);
- if (param->signature[0] == 's') {
+ if (param->dbus_signature[0] == 's') {
gchar *str;
str = g_strdup_printf (_("%s:"), param_name_formatted);
@@ -327,20 +291,20 @@ accounts_widget_generic_setup (EmpathyAccount *account,
gtk_widget_show (widget);
}
/* int types: ynqiuxt. double type is 'd' */
- else if (param->signature[0] == 'y' ||
- param->signature[0] == 'n' ||
- param->signature[0] == 'q' ||
- param->signature[0] == 'i' ||
- param->signature[0] == 'u' ||
- param->signature[0] == 'x' ||
- param->signature[0] == 't' ||
- param->signature[0] == 'd') {
+ else if (param->dbus_signature[0] == 'y' ||
+ param->dbus_signature[0] == 'n' ||
+ param->dbus_signature[0] == 'q' ||
+ param->dbus_signature[0] == 'i' ||
+ param->dbus_signature[0] == 'u' ||
+ param->dbus_signature[0] == 'x' ||
+ param->dbus_signature[0] == 't' ||
+ param->dbus_signature[0] == 'd') {
gchar *str = NULL;
gdouble minint = 0;
gdouble maxint = 0;
gdouble step = 1;
- switch (param->signature[0]) {
+ switch (param->dbus_signature[0]) {
case 'y': minint = G_MININT8; maxint = G_MAXINT8; break;
case 'n': minint = G_MININT16; maxint = G_MAXINT16; break;
case 'q': minint = 0; maxint = G_MAXUINT16; break;
@@ -373,7 +337,7 @@ accounts_widget_generic_setup (EmpathyAccount *account,
0, 0);
gtk_widget_show (widget);
}
- else if (param->signature[0] == 'b') {
+ else if (param->dbus_signature[0] == 'b') {
widget = gtk_check_button_new_with_label (param_name_formatted);
gtk_table_attach (GTK_TABLE (table_settings),
widget,
@@ -384,7 +348,7 @@ accounts_widget_generic_setup (EmpathyAccount *account,
gtk_widget_show (widget);
} else {
DEBUG ("Unknown signature for param %s: %s",
- param_name_formatted, param->signature);
+ param_name_formatted, param->dbus_signature);
}
if (widget) {
@@ -393,10 +357,6 @@ accounts_widget_generic_setup (EmpathyAccount *account,
g_free (param_name_formatted);
}
-
- g_slist_free (params);
- g_object_unref (profile);
- g_object_unref (protocol);
}
static void
@@ -475,27 +435,77 @@ empathy_account_widget_set_default_focus (GtkBuilder *gui,
NULL);
}
+static void
+account_widget_tp_cm_ready_cb (TpConnectionManager *cm, const GError *error,
+ gpointer user_data, GObject *weak_object)
+{
+ GtkBuilder *builder;
+ EmpathyAccount *account;
+ GtkWidget *table_common_settings;
+ GtkWidget *table_advanced_settings;
+ const TpConnectionManagerProtocol *protocol;
+
+ if (error != NULL) {
+ DEBUG ("CM wasn't happy: %s", error->message);
+ return;
+ }
+
+ account = EMPATHY_ACCOUNT (user_data);
+ builder = GTK_BUILDER (weak_object);
+
+ table_common_settings = GTK_WIDGET (gtk_builder_get_object (builder,
+ "table_common_settings"));
+ table_advanced_settings = GTK_WIDGET (gtk_builder_get_object (builder,
+ "table_advanced_settings"));
+
+ protocol = tp_connection_manager_get_protocol (cm,
+ empathy_account_get_protocol (account));
+
+ accounts_widget_generic_setup (account, protocol->params,
+ table_common_settings, table_advanced_settings);
+}
+
GtkWidget *
empathy_account_widget_generic_new (EmpathyAccount *account)
{
GtkBuilder *gui;
GtkWidget *widget;
- GtkWidget *table_common_settings;
- GtkWidget *table_advanced_settings;
gchar *filename;
filename = empathy_file_lookup ("empathy-account-widget-generic.ui",
"libempathy-gtk");
gui = empathy_builder_get_file (filename,
"vbox_generic_settings", &widget,
- "table_common_settings", &table_common_settings,
- "table_advanced_settings", &table_advanced_settings,
NULL);
- g_free (filename);
- accounts_widget_generic_setup (account, table_common_settings, table_advanced_settings);
+ /* If the profile isn't installed get_protocol will return NULL with MC4 */
+ if (empathy_account_get_protocol (account) != NULL) {
+ TpDBusDaemon *dbus;
+ TpConnectionManager *cm;
+ GError *error;
- return empathy_builder_unref_and_keep_widget (gui, widget);
+ dbus = tp_dbus_daemon_dup (NULL);
+
+ cm = tp_connection_manager_new (dbus,
+ empathy_account_get_connection_manager (account), NULL, &error);
+
+ if (cm == NULL) {
+ DEBUG ("failed to get the cm: %s", error->message);
+ g_error_free (error);
+ g_object_unref (gui);
+ return NULL;
+ }
+
+ tp_connection_manager_call_when_ready (cm, account_widget_tp_cm_ready_cb,
+ account, g_object_unref, G_OBJECT (gui));
+
+ g_object_unref (dbus);
+ } else {
+ /* no protocol information available :(( */
+ return empathy_builder_unref_and_keep_widget (gui, widget);
+ }
+
+ return g_object_ref (widget);
}
GtkWidget *
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index 1f1b3b06d..ca0599e0e 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -348,7 +348,6 @@ theme_adium_append_html (EmpathyThemeAdium *theme,
} else if (theme_adium_match (&cur, "%time")) {
gchar *format = NULL;
gchar *end;
-
/* Time can be in 2 formats:
* %time% or %time{strftime format}%
* Extract the time format if provided. */
@@ -393,7 +392,6 @@ theme_adium_append_message (EmpathyChatView *view,
EmpathyThemeAdiumPriv *priv = GET_PRIV (theme);
EmpathyContact *sender;
EmpathyAccount *account;
- McProfile *account_profile;
gchar *dup_body = NULL;
const gchar *body;
const gchar *name;
@@ -416,8 +414,7 @@ theme_adium_append_message (EmpathyChatView *view,
/* Get information */
sender = empathy_message_get_sender (msg);
account = empathy_contact_get_account (sender);
- account_profile = empathy_account_get_profile (account);
- service_name = mc_profile_get_display_name (account_profile);
+ service_name = empathy_account_get_protocol (account);
timestamp = empathy_message_get_timestamp (msg);
body = empathy_message_get_body (msg);
dup_body = theme_adium_parse_body (theme, body);
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c
index f427b9994..1b48c1488 100644
--- a/src/empathy-accounts-dialog.c
+++ b/src/empathy-accounts-dialog.c
@@ -164,13 +164,45 @@ accounts_dialog_update_name_label (EmpathyAccountsDialog *dialog,
g_free (text);
}
+typedef GtkWidget *CreateWidget (EmpathyAccount *);
+
+static GtkWidget *
+get_account_setup_widget (EmpathyAccount *account)
+{
+ const gchar *cm = empathy_account_get_connection_manager (account);
+ const gchar *proto = empathy_account_get_protocol (account);
+ 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(account);
+ }
+
+ return empathy_account_widget_generic_new (account);
+}
+
+
static void
accounts_dialog_update_account (EmpathyAccountsDialog *dialog,
EmpathyAccount *account)
{
- McProfile *profile;
- const gchar *config_ui;
-
if (!account) {
GtkTreeView *view;
GtkTreeModel *model;
@@ -215,48 +247,7 @@ 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);
- }
+ dialog->settings_widget = get_account_setup_widget (account);
gtk_container_add (GTK_CONTAINER (dialog->alignment_settings),
dialog->settings_widget);
@@ -264,14 +255,12 @@ accounts_dialog_update_account (EmpathyAccountsDialog *dialog,
gtk_image_set_from_icon_name (GTK_IMAGE (dialog->image_type),
- mc_profile_get_icon_name (profile),
+ empathy_account_get_icon_name (account),
GTK_ICON_SIZE_DIALOG);
gtk_widget_set_tooltip_text (dialog->image_type,
- mc_profile_get_display_name (profile));
+ empathy_account_get_protocol (account));
accounts_dialog_update_name_label (dialog, account);
-
- g_object_unref (profile);
}
static void
@@ -661,13 +650,10 @@ accounts_dialog_account_added_cb (EmpathyAccountManager *manager,
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,
+ new_name = g_strdup_printf ("%s (%s)",
+ empathy_account_get_protocol (account),
account_param);
DEBUG ("Setting new display name for account %s: '%s'",
@@ -675,7 +661,6 @@ accounts_dialog_account_added_cb (EmpathyAccountManager *manager,
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? */
}
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
index e16da91a7..7313fd1e6 100644
--- a/src/empathy-new-chatroom-dialog.c
+++ b/src/empathy-new-chatroom-dialog.c
@@ -358,14 +358,12 @@ 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);
+ protocol = empathy_account_get_protocol (account);
gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), "");
@@ -390,7 +388,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