aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2014-05-13 01:47:16 +0800
committerMilan Crha <mcrha@redhat.com>2014-05-13 01:47:16 +0800
commitd46ad6d3cd44c3c9b730566cbd7719c2961a9bc9 (patch)
treebdc2d2362021b2da8b8b0eaab55ca28af61122ca /modules
parent4508696844c20530bdf7fe6150c432eb16a9c77b (diff)
downloadgsoc2013-evolution-d46ad6d3cd44c3c9b730566cbd7719c2961a9bc9.tar
gsoc2013-evolution-d46ad6d3cd44c3c9b730566cbd7719c2961a9bc9.tar.gz
gsoc2013-evolution-d46ad6d3cd44c3c9b730566cbd7719c2961a9bc9.tar.bz2
gsoc2013-evolution-d46ad6d3cd44c3c9b730566cbd7719c2961a9bc9.tar.lz
gsoc2013-evolution-d46ad6d3cd44c3c9b730566cbd7719c2961a9bc9.tar.xz
gsoc2013-evolution-d46ad6d3cd44c3c9b730566cbd7719c2961a9bc9.tar.zst
gsoc2013-evolution-d46ad6d3cd44c3c9b730566cbd7719c2961a9bc9.zip
Bug #678843 - May re-prompt password on account re-enable
Diffstat (limited to 'modules')
-rw-r--r--modules/addressbook/e-book-shell-sidebar.c3
-rw-r--r--modules/addressbook/e-book-shell-view-actions.c129
-rw-r--r--modules/addressbook/e-book-shell-view-private.c2
-rw-r--r--modules/calendar/e-cal-shell-sidebar.c4
-rw-r--r--modules/calendar/e-cal-shell-view-actions.c12
-rw-r--r--modules/calendar/e-cal-shell-view.c83
-rw-r--r--modules/calendar/e-cal-shell-view.h5
-rw-r--r--modules/calendar/e-memo-shell-sidebar.c4
-rw-r--r--modules/calendar/e-memo-shell-view-actions.c12
-rw-r--r--modules/calendar/e-task-shell-sidebar.c4
-rw-r--r--modules/calendar/e-task-shell-view-actions.c12
-rw-r--r--modules/mail/e-mail-shell-view-actions.c69
12 files changed, 283 insertions, 56 deletions
diff --git a/modules/addressbook/e-book-shell-sidebar.c b/modules/addressbook/e-book-shell-sidebar.c
index 1138ce3a6c..393ddc6148 100644
--- a/modules/addressbook/e-book-shell-sidebar.c
+++ b/modules/addressbook/e-book-shell-sidebar.c
@@ -225,6 +225,9 @@ book_shell_sidebar_check_state (EShellSidebar *shell_sidebar)
refresh_supported =
e_client_check_refresh_supported (client);
g_object_unref (client);
+ } else {
+ /* It's also used to allow-auth-prompt for the source */
+ refresh_supported = TRUE;
}
g_object_unref (source);
diff --git a/modules/addressbook/e-book-shell-view-actions.c b/modules/addressbook/e-book-shell-view-actions.c
index ba935c3966..57fd7e9df9 100644
--- a/modules/addressbook/e-book-shell-view-actions.c
+++ b/modules/addressbook/e-book-shell-view-actions.c
@@ -200,34 +200,96 @@ action_address_book_properties_cb (GtkAction *action,
}
static void
+address_book_handle_refresh_done (ESource *source,
+ EActivity *activity,
+ const GError *error)
+{
+ EAlertSink *alert_sink;
+ const gchar *display_name;
+
+ alert_sink = e_activity_get_alert_sink (activity);
+ display_name = e_source_get_display_name (source);
+
+ if (e_activity_handle_cancellation (activity, error)) {
+ /* nothing to do */
+
+ } else if (error != NULL) {
+ e_alert_submit (
+ alert_sink,
+ "addressbook:refresh-error",
+ display_name, error->message, NULL);
+
+ } else {
+ e_activity_set_state (activity, E_ACTIVITY_COMPLETED);
+ }
+}
+
+static void
address_book_refresh_done_cb (GObject *source_object,
GAsyncResult *result,
gpointer user_data)
{
EClient *client;
- GError *error = NULL;
+ ESource *source;
+ EActivity *activity;
+ GError *local_error = NULL;
g_return_if_fail (E_IS_CLIENT (source_object));
client = E_CLIENT (source_object);
+ source = e_client_get_source (client);
+ activity = user_data;
- e_client_refresh_finish (client, result, &error);
+ e_util_allow_auth_prompt_and_refresh_client_finish (client, result, &local_error);
- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- g_error_free (error);
+ address_book_handle_refresh_done (source, activity, local_error);
- } else if (error != NULL) {
- ESource *source;
+ g_clear_object (&activity);
+ g_clear_error (&local_error);
+}
- source = e_client_get_source (client);
+typedef struct _AllowAuthPromptData {
+ EActivity *activity;
+ ESourceSelector *selector;
+} AllowAuthPromptData;
- g_warning (
- "%s: Failed to refresh '%s', %s",
- G_STRFUNC, e_source_get_display_name (source),
- error ? error->message : "Unknown error");
+static void
+address_book_allow_auth_prompt_done_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ ESource *source;
+ ESourceSelector *selector;
+ EActivity *activity;
+ AllowAuthPromptData *data = user_data;
+ GError *local_error = NULL;
- g_error_free (error);
+ g_return_if_fail (E_IS_SOURCE (source_object));
+ g_return_if_fail (user_data != NULL);
+
+ source = E_SOURCE (source_object);
+ activity = data->activity;
+ selector = data->selector;
+
+ g_free (data);
+
+ e_source_allow_auth_prompt_finish (source, result, &local_error);
+
+ address_book_handle_refresh_done (source, activity, local_error);
+
+ if (!local_error) {
+ ESource *primary;
+
+ primary = e_source_selector_ref_primary_selection (selector);
+ if (primary == source)
+ e_source_selector_set_primary_selection (selector, source);
+
+ g_clear_object (&primary);
}
+
+ g_clear_object (&activity);
+ g_clear_object (&selector);
+ g_clear_error (&local_error);
}
static void
@@ -238,15 +300,46 @@ action_address_book_refresh_cb (GtkAction *action,
ESourceSelector *selector;
EClient *client = NULL;
ESource *source;
+ EActivity *activity;
+ EAlertSink *alert_sink;
+ EShellBackend *shell_backend;
+ EShellContent *shell_content;
+ EShellView *shell_view;
+ GCancellable *cancellable;
book_shell_sidebar = book_shell_view->priv->book_shell_sidebar;
selector = e_book_shell_sidebar_get_selector (book_shell_sidebar);
+ shell_view = E_SHELL_VIEW (book_shell_view);
+ shell_backend = e_shell_view_get_shell_backend (shell_view);
+ shell_content = e_shell_view_get_shell_content (shell_view);
+
source = e_source_selector_ref_primary_selection (selector);
if (source != NULL) {
client = e_client_selector_ref_cached_client (
E_CLIENT_SELECTOR (selector), source);
+ if (!client) {
+ AllowAuthPromptData *data;
+
+ alert_sink = E_ALERT_SINK (shell_content);
+ activity = e_activity_new ();
+ cancellable = g_cancellable_new ();
+
+ e_activity_set_alert_sink (activity, alert_sink);
+ e_activity_set_cancellable (activity, cancellable);
+
+ data = g_new0 (AllowAuthPromptData, 1);
+ data->activity = activity;
+ data->selector = g_object_ref (selector);
+
+ e_source_allow_auth_prompt (source, cancellable, address_book_allow_auth_prompt_done_cb, data);
+
+ e_shell_backend_add_activity (shell_backend, activity);
+
+ g_object_unref (cancellable);
+ }
+
g_object_unref (source);
}
@@ -255,8 +348,18 @@ action_address_book_refresh_cb (GtkAction *action,
g_return_if_fail (e_client_check_refresh_supported (client));
- e_client_refresh (client, NULL, address_book_refresh_done_cb, book_shell_view);
+ alert_sink = E_ALERT_SINK (shell_content);
+ activity = e_activity_new ();
+ cancellable = g_cancellable_new ();
+
+ e_activity_set_alert_sink (activity, alert_sink);
+ e_activity_set_cancellable (activity, cancellable);
+
+ e_util_allow_auth_prompt_and_refresh_client (client, cancellable, address_book_refresh_done_cb, activity);
+
+ e_shell_backend_add_activity (shell_backend, activity);
+ g_object_unref (cancellable);
g_object_unref (client);
}
diff --git a/modules/addressbook/e-book-shell-view-private.c b/modules/addressbook/e-book-shell-view-private.c
index b931c16576..3703318c9b 100644
--- a/modules/addressbook/e-book-shell-view-private.c
+++ b/modules/addressbook/e-book-shell-view-private.c
@@ -339,7 +339,7 @@ book_shell_view_activate_selected_source (EBookShellView *book_shell_view,
/* XXX No way to cancel this? */
e_client_selector_get_client (
E_CLIENT_SELECTOR (selector),
- source, NULL,
+ source, TRUE, NULL,
book_shell_view_client_connect_cb,
g_object_ref (view));
diff --git a/modules/calendar/e-cal-shell-sidebar.c b/modules/calendar/e-cal-shell-sidebar.c
index 28b8d46d4c..dbecf6d989 100644
--- a/modules/calendar/e-cal-shell-sidebar.c
+++ b/modules/calendar/e-cal-shell-sidebar.c
@@ -351,7 +351,7 @@ cal_shell_sidebar_set_default (ECalShellSidebar *cal_shell_sidebar,
priv->connecting_default_client = g_object_ref (closure->activity);
e_client_selector_get_client (
- E_CLIENT_SELECTOR (selector), source,
+ E_CLIENT_SELECTOR (selector), source, TRUE,
e_activity_get_cancellable (closure->activity),
cal_shell_sidebar_default_connect_cb, closure);
}
@@ -853,7 +853,7 @@ e_cal_shell_sidebar_add_source (ECalShellSidebar *cal_shell_sidebar,
closure = connect_closure_new (cal_shell_sidebar, source);
e_client_selector_get_client (
- E_CLIENT_SELECTOR (selector), source,
+ E_CLIENT_SELECTOR (selector), source, TRUE,
e_activity_get_cancellable (closure->activity),
cal_shell_sidebar_client_connect_cb, closure);
}
diff --git a/modules/calendar/e-cal-shell-view-actions.c b/modules/calendar/e-cal-shell-view-actions.c
index 660be9c267..93e61aae41 100644
--- a/modules/calendar/e-cal-shell-view-actions.c
+++ b/modules/calendar/e-cal-shell-view-actions.c
@@ -23,6 +23,7 @@
#endif
#include "e-cal-shell-view-private.h"
+#include "e-cal-shell-view.h"
/* This is for radio action groups whose value is persistent. We
* initialize it to a bogus value to ensure a "changed" signal is
@@ -374,7 +375,6 @@ action_calendar_refresh_cb (GtkAction *action,
ESourceSelector *selector;
EClient *client = NULL;
ESource *source;
- GError *error = NULL;
cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar;
selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
@@ -392,15 +392,7 @@ action_calendar_refresh_cb (GtkAction *action,
g_return_if_fail (e_client_check_refresh_supported (client));
- e_client_refresh_sync (client, NULL, &error);
-
- if (error != NULL) {
- g_warning (
- "%s: Failed to refresh '%s', %s",
- G_STRFUNC, e_source_get_display_name (source),
- error->message);
- g_error_free (error);
- }
+ e_cal_shell_view_allow_auth_prompt_and_refresh (E_SHELL_VIEW (cal_shell_view), client);
g_object_unref (client);
}
diff --git a/modules/calendar/e-cal-shell-view.c b/modules/calendar/e-cal-shell-view.c
index a703cbc076..41d6d54a43 100644
--- a/modules/calendar/e-cal-shell-view.c
+++ b/modules/calendar/e-cal-shell-view.c
@@ -629,3 +629,86 @@ e_cal_shell_view_type_register (GTypeModule *type_module)
e_cal_shell_view_register_type (type_module);
}
+static void
+cal_shell_view_allow_auth_prompt_and_refresh_done_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ EClient *client;
+ EActivity *activity;
+ EAlertSink *alert_sink;
+ ESource *source;
+ const gchar *display_name;
+ GError *local_error = NULL;
+
+ g_return_if_fail (E_IS_CAL_CLIENT (source_object));
+
+ client = E_CLIENT (source_object);
+ source = e_client_get_source (client);
+ activity = user_data;
+ alert_sink = e_activity_get_alert_sink (activity);
+ display_name = e_source_get_display_name (source);
+
+ e_util_allow_auth_prompt_and_refresh_client_finish (client, result, &local_error);
+
+ if (e_activity_handle_cancellation (activity, local_error)) {
+ g_error_free (local_error);
+
+ } else if (local_error != NULL) {
+ const gchar *error_message;
+
+ switch (e_cal_client_get_source_type (E_CAL_CLIENT (client))) {
+ default:
+ case E_CAL_CLIENT_SOURCE_TYPE_EVENTS:
+ error_message = "calendar:refresh-error-events";
+ break;
+ case E_CAL_CLIENT_SOURCE_TYPE_TASKS:
+ error_message = "calendar:refresh-error-tasks";
+ break;
+ case E_CAL_CLIENT_SOURCE_TYPE_MEMOS:
+ error_message = "calendar:refresh-error-memos";
+ break;
+ }
+ e_alert_submit (
+ alert_sink,
+ error_message,
+ display_name, local_error->message, NULL);
+ g_error_free (local_error);
+
+ } else {
+ e_activity_set_state (activity, E_ACTIVITY_COMPLETED);
+ }
+
+ g_clear_object (&activity);
+}
+
+void
+e_cal_shell_view_allow_auth_prompt_and_refresh (EShellView *shell_view,
+ EClient *client)
+{
+ EShellBackend *shell_backend;
+ EShellContent *shell_content;
+ EActivity *activity;
+ EAlertSink *alert_sink;
+ GCancellable *cancellable;
+
+ g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
+ g_return_if_fail (E_IS_CLIENT (client));
+
+ shell_backend = e_shell_view_get_shell_backend (shell_view);
+ shell_content = e_shell_view_get_shell_content (shell_view);
+
+ alert_sink = E_ALERT_SINK (shell_content);
+ activity = e_activity_new ();
+ cancellable = g_cancellable_new ();
+
+ e_activity_set_alert_sink (activity, alert_sink);
+ e_activity_set_cancellable (activity, cancellable);
+
+ e_util_allow_auth_prompt_and_refresh_client (client, cancellable,
+ cal_shell_view_allow_auth_prompt_and_refresh_done_cb, activity);
+
+ e_shell_backend_add_activity (shell_backend, activity);
+
+ g_object_unref (cancellable);
+}
diff --git a/modules/calendar/e-cal-shell-view.h b/modules/calendar/e-cal-shell-view.h
index 9057faf9d9..d01a77e731 100644
--- a/modules/calendar/e-cal-shell-view.h
+++ b/modules/calendar/e-cal-shell-view.h
@@ -21,6 +21,7 @@
#ifndef E_CAL_SHELL_VIEW_H
#define E_CAL_SHELL_VIEW_H
+#include <e-util/e-util.h>
#include <shell/e-shell-view.h>
/* Standard GObject macros */
@@ -60,6 +61,10 @@ struct _ECalShellViewClass {
GType e_cal_shell_view_get_type (void);
void e_cal_shell_view_type_register (GTypeModule *type_module);
+void e_cal_shell_view_allow_auth_prompt_and_refresh
+ (EShellView *shell_view,
+ EClient *client);
+
G_END_DECLS
#endif /* E_CAL_SHELL_VIEW_H */
diff --git a/modules/calendar/e-memo-shell-sidebar.c b/modules/calendar/e-memo-shell-sidebar.c
index 8575da2745..72408dc497 100644
--- a/modules/calendar/e-memo-shell-sidebar.c
+++ b/modules/calendar/e-memo-shell-sidebar.c
@@ -349,7 +349,7 @@ memo_shell_sidebar_set_default (EMemoShellSidebar *memo_shell_sidebar,
priv->connecting_default_client = g_object_ref (closure->activity);
e_client_selector_get_client (
- E_CLIENT_SELECTOR (selector), source,
+ E_CLIENT_SELECTOR (selector), source, TRUE,
e_activity_get_cancellable (closure->activity),
memo_shell_sidebar_default_connect_cb, closure);
}
@@ -780,7 +780,7 @@ e_memo_shell_sidebar_add_source (EMemoShellSidebar *memo_shell_sidebar,
closure = connect_closure_new (memo_shell_sidebar, source);
e_client_selector_get_client (
- E_CLIENT_SELECTOR (selector), source,
+ E_CLIENT_SELECTOR (selector), source, TRUE,
e_activity_get_cancellable (closure->activity),
memo_shell_sidebar_client_connect_cb, closure);
}
diff --git a/modules/calendar/e-memo-shell-view-actions.c b/modules/calendar/e-memo-shell-view-actions.c
index cea084e293..35ab8cc879 100644
--- a/modules/calendar/e-memo-shell-view-actions.c
+++ b/modules/calendar/e-memo-shell-view-actions.c
@@ -23,6 +23,7 @@
#endif
#include "e-memo-shell-view-private.h"
+#include "e-cal-shell-view.h"
static void
action_memo_delete_cb (GtkAction *action,
@@ -277,7 +278,6 @@ action_memo_list_refresh_cb (GtkAction *action,
ESourceSelector *selector;
EClient *client = NULL;
ESource *source;
- GError *error = NULL;
memo_shell_sidebar = memo_shell_view->priv->memo_shell_sidebar;
selector = e_memo_shell_sidebar_get_selector (memo_shell_sidebar);
@@ -295,15 +295,7 @@ action_memo_list_refresh_cb (GtkAction *action,
g_return_if_fail (e_client_check_refresh_supported (client));
- e_client_refresh_sync (client, NULL, &error);
-
- if (error != NULL) {
- g_warning (
- "%s: Failed to refresh '%s', %s",
- G_STRFUNC, e_source_get_display_name (source),
- error->message);
- g_error_free (error);
- }
+ e_cal_shell_view_allow_auth_prompt_and_refresh (E_SHELL_VIEW (memo_shell_view), client);
g_object_unref (client);
}
diff --git a/modules/calendar/e-task-shell-sidebar.c b/modules/calendar/e-task-shell-sidebar.c
index d858a9f94a..10d8bdcc2c 100644
--- a/modules/calendar/e-task-shell-sidebar.c
+++ b/modules/calendar/e-task-shell-sidebar.c
@@ -349,7 +349,7 @@ task_shell_sidebar_set_default (ETaskShellSidebar *task_shell_sidebar,
priv->connecting_default_client = g_object_ref (closure->activity);
e_client_selector_get_client (
- E_CLIENT_SELECTOR (selector), source,
+ E_CLIENT_SELECTOR (selector), source, TRUE,
e_activity_get_cancellable (closure->activity),
task_shell_sidebar_default_connect_cb, closure);
}
@@ -780,7 +780,7 @@ e_task_shell_sidebar_add_source (ETaskShellSidebar *task_shell_sidebar,
closure = connect_closure_new (task_shell_sidebar, source);
e_client_selector_get_client (
- E_CLIENT_SELECTOR (selector), source,
+ E_CLIENT_SELECTOR (selector), source, TRUE,
e_activity_get_cancellable (closure->activity),
task_shell_sidebar_client_connect_cb, closure);
}
diff --git a/modules/calendar/e-task-shell-view-actions.c b/modules/calendar/e-task-shell-view-actions.c
index 99754570aa..39c7032492 100644
--- a/modules/calendar/e-task-shell-view-actions.c
+++ b/modules/calendar/e-task-shell-view-actions.c
@@ -23,6 +23,7 @@
#endif
#include "e-task-shell-view-private.h"
+#include "e-cal-shell-view.h"
static void
action_task_assign_cb (GtkAction *action,
@@ -300,7 +301,6 @@ action_task_list_refresh_cb (GtkAction *action,
ESourceSelector *selector;
EClient *client = NULL;
ESource *source;
- GError *error = NULL;
task_shell_sidebar = task_shell_view->priv->task_shell_sidebar;
selector = e_task_shell_sidebar_get_selector (task_shell_sidebar);
@@ -318,15 +318,7 @@ action_task_list_refresh_cb (GtkAction *action,
g_return_if_fail (e_client_check_refresh_supported (client));
- e_client_refresh_sync (client, NULL, &error);
-
- if (error != NULL) {
- g_warning (
- "%s: Failed to refresh '%s', %s",
- G_STRFUNC, e_source_get_display_name (source),
- error->message);
- g_error_free (error);
- }
+ e_cal_shell_view_allow_auth_prompt_and_refresh (E_SHELL_VIEW (task_shell_view), client);
g_object_unref (client);
}
diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c
index 76159950a5..292aa96c48 100644
--- a/modules/mail/e-mail-shell-view-actions.c
+++ b/modules/mail/e-mail-shell-view-actions.c
@@ -156,6 +156,54 @@ account_refresh_folder_info_received_cb (GObject *source,
g_clear_object (&activity);
}
+typedef struct _RefreshData
+{
+ EActivity *activity;
+ CamelStore *store;
+} RefreshData;
+
+static void
+account_refresh_allow_auth_prompt_done_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ RefreshData *data = user_data;
+ EActivity *activity;
+ CamelStore *store;
+ GError *local_error = NULL;
+
+ g_return_if_fail (data != NULL);
+
+ activity = data->activity;
+ store = data->store;
+
+ g_free (data);
+
+ e_source_allow_auth_prompt_finish (E_SOURCE (source_object), result, &local_error);
+
+ if (e_activity_handle_cancellation (activity, local_error)) {
+ g_error_free (local_error);
+ g_clear_object (&activity);
+ } else {
+ GCancellable *cancellable;
+
+ if (local_error) {
+ g_debug ("%s: Failed with: %s", G_STRFUNC, local_error->message);
+ g_clear_error (&local_error);
+ }
+
+ cancellable = e_activity_get_cancellable (activity);
+
+ camel_store_get_folder_info (
+ store, NULL,
+ CAMEL_STORE_FOLDER_INFO_RECURSIVE,
+ G_PRIORITY_DEFAULT, cancellable,
+ account_refresh_folder_info_received_cb, activity);
+ }
+
+ g_object_unref (store);
+}
+
static void
action_mail_account_refresh_cb (GtkAction *action,
EMailShellView *mail_shell_view)
@@ -165,8 +213,12 @@ action_mail_account_refresh_cb (GtkAction *action,
EMFolderTree *folder_tree;
EMailView *mail_view;
EActivity *activity;
+ ESourceRegistry *registry;
+ ESource *source;
+ EShell *shell;
CamelStore *store;
GCancellable *cancellable;
+ RefreshData *data;
mail_shell_content = mail_shell_view->priv->mail_shell_content;
mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
@@ -179,13 +231,18 @@ action_mail_account_refresh_cb (GtkAction *action,
activity = e_mail_reader_new_activity (E_MAIL_READER (mail_view));
cancellable = e_activity_get_cancellable (activity);
- camel_store_get_folder_info (
- store, NULL,
- CAMEL_STORE_FOLDER_INFO_RECURSIVE,
- G_PRIORITY_DEFAULT, cancellable,
- account_refresh_folder_info_received_cb, activity);
+ data = g_new0 (RefreshData, 1);
+ data->activity = activity;
+ data->store = store;
- g_object_unref (store);
+ shell = e_shell_backend_get_shell (e_shell_view_get_shell_backend (E_SHELL_VIEW (mail_shell_view)));
+ registry = e_shell_get_registry (shell);
+ source = e_source_registry_ref_source (registry, camel_service_get_uid (CAMEL_SERVICE (store)));
+ g_return_if_fail (source != NULL);
+
+ e_source_allow_auth_prompt (source, cancellable, account_refresh_allow_auth_prompt_done_cb, data);
+
+ g_clear_object (&source);
}
static void