aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/empathy-roster-window.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/empathy-roster-window.c b/src/empathy-roster-window.c
index b042ba4fb..a8018b778 100644
--- a/src/empathy-roster-window.c
+++ b/src/empathy-roster-window.c
@@ -604,6 +604,54 @@ roster_window_error_add_stock_button (GtkInfoBar *info_bar,
gtk_info_bar_add_action_widget (info_bar, button, response_id);
}
+#ifdef HAVE_UOA
+static const gchar *
+uoa_account_display_string (TpAccount *account)
+{
+ const gchar *service;
+
+ service = tp_account_get_service (account);
+
+ /* Use well known service name, if available */
+ if (!tp_strdiff (service, "windows-live"))
+ return _("Windows Live");
+ else if (!tp_strdiff (service, "google-talk"))
+ return _("Google Talk");
+ else if (!tp_strdiff (service, "facebook"))
+ return _("Facebook");
+
+ return tp_account_get_display_name (account);
+}
+
+static void
+roster_window_uoa_auth_error (EmpathyRosterWindow *self,
+ TpAccount *account)
+{
+ GtkWidget *info_bar;
+ GtkWidget *image;
+ GtkWidget *button;
+ gchar *str;
+
+ /* translators: %s is an account name like 'Facebook' or 'Google Talk' */
+ str = g_strdup_printf (_("%s account requires authorisation"),
+ uoa_account_display_string (account));
+
+ info_bar = roster_window_error_create_info_bar (self, account,
+ GTK_MESSAGE_OTHER, str);
+ g_free (str);
+
+ image = gtk_image_new_from_icon_name ("credentials-preferences",
+ GTK_ICON_SIZE_BUTTON);
+ button = gtk_button_new ();
+ gtk_button_set_image (GTK_BUTTON (button), image);
+ gtk_widget_set_tooltip_text (button, _("Online Accounts"));
+ gtk_widget_show (button);
+
+ gtk_info_bar_add_action_widget (GTK_INFO_BAR (info_bar), button,
+ ERROR_RESPONSE_EDIT);
+}
+#endif
+
static void
roster_window_error_display (EmpathyRosterWindow *self,
TpAccount *account)
@@ -619,6 +667,17 @@ roster_window_error_display (EmpathyRosterWindow *self,
if (user_requested)
return;
+#ifdef HAVE_UOA
+ if (!tp_strdiff (TP_ERROR_STR_AUTHENTICATION_FAILED,
+ tp_account_get_detailed_error (account, NULL)) &&
+ !tp_strdiff (tp_account_get_storage_provider (account),
+ EMPATHY_UOA_PROVIDER))
+ {
+ roster_window_uoa_auth_error (self, account);
+ return;
+ }
+#endif
+
str = g_markup_printf_escaped ("<b>%s</b>\n%s",
tp_account_get_display_name (account), error_message);