diff -up evolution-data-server-3.8.5/camel/camel-imapx-command.c.imapx-check-cancelled-jobs evolution-data-server-3.8.5/camel/camel-imapx-command.c
--- evolution-data-server-3.8.5/camel/camel-imapx-command.c.imapx-check-cancelled-jobs 2013-08-02 16:57:28.000000000 +0200
+++ evolution-data-server-3.8.5/camel/camel-imapx-command.c 2014-05-13 14:18:26.234981690 +0200
@@ -579,8 +579,11 @@ camel_imapx_command_done (CamelIMAPXComm
gboolean
camel_imapx_command_set_error_if_failed (CamelIMAPXCommand *ic,
+ GCancellable *cancellable,
GError **error)
{
+ CamelIMAPXJob *job;
+
g_return_val_if_fail (CAMEL_IS_IMAPX_COMMAND (ic), FALSE);
if (ic->status != NULL && ic->status->result != IMAPX_OK) {
@@ -607,7 +610,11 @@ camel_imapx_command_set_error_if_failed
return TRUE;
}
- return FALSE;
+ job = camel_imapx_command_get_job (ic);
+
+ return (job && camel_imapx_job_propagate_error (job, error)) ||
+ g_cancellable_set_error_if_cancelled (cancellable, error) ||
+ (job && g_cancellable_set_error_if_cancelled (camel_imapx_job_get_cancellable (job), error));
}
CamelIMAPXCommandQueue *
diff -up evolution-data-server-3.8.5/camel/camel-imapx-command.h.imapx-check-cancelled-jobs evolution-data-server-3.8.5/camel/camel-imapx-command.h
--- evolution-data-server-3.8.5/camel/camel-imapx-command.h.imapx-check-cancelled-jobs 2013-07-23 13:57:42.000000000 +0200
+++ evolution-data-server-3.8.5/camel/camel-imapx-command.h 2014-05-13 14:18:26.234981690 +0200
@@ -122,6 +122,7 @@ void camel_imapx_command_wait (CamelIMA
void camel_imapx_command_done (CamelIMAPXCommand *ic);
gboolean camel_imapx_command_set_error_if_failed
(CamelIMAPXCommand *ic,
+ GCancellable *cancellable,
GError **error);
/* These are simple GQueue wrappers for CamelIMAPXCommands.
diff -up evolution-data-server-3.8.5/camel/camel-imapx-server.c.imapx-check-cancelled-jobs evolution-data-server-3.8.5/camel/camel-imapx-server.c
--- evolution-data-server-3.8.5/camel/camel-imapx-server.c.imapx-check-cancelled-jobs 2014-05-13 14:18:26.230981690 +0200
+++ evolution-data-server-3.8.5/camel/camel-imapx-server.c 2014-05-13 14:18:26.235981690 +0200
@@ -3208,7 +3208,7 @@ imapx_command_run_sync (CamelIMAPXServer
if (cancel_id > 0)
g_cancellable_disconnect (cancellable, cancel_id);
- if (camel_imapx_command_set_error_if_failed (ic, error))
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error))
return FALSE;
return success;
@@ -3314,7 +3314,7 @@ imapx_command_idle_done (CamelIMAPXServe
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error performing IDLE"));
@@ -3690,7 +3690,7 @@ imapx_command_select_done (CamelIMAPXSer
gboolean success = TRUE;
GError *local_error = NULL;
- if (camel_imapx_command_set_error_if_failed (ic, &local_error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, &local_error)) {
GQueue failed = G_QUEUE_INIT;
GQueue trash = G_QUEUE_INIT;
CamelFolder *folder;
@@ -4596,7 +4596,7 @@ imapx_command_fetch_message_done (CamelI
job->commands--;
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error fetching message"));
@@ -4814,7 +4814,7 @@ imapx_command_copy_messages_step_done (C
uids = data->uids;
i = data->index;
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error copying messages"));
@@ -4983,7 +4983,7 @@ imapx_command_append_message_done (Camel
mi = camel_message_info_clone (data->info);
old_uid = g_strdup (data->info->uid);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error appending message"));
@@ -5182,7 +5182,7 @@ imapx_command_step_fetch_done (CamelIMAP
i = data->index;
//printf ("%s: Mobile mode: %d Fetch Count %d\n", camel_folder_get_display_name (folder), mobile_mode, batch_count);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error fetching message headers"));
@@ -5333,12 +5333,15 @@ imapx_job_scan_changes_done (CamelIMAPXS
mobile_mode = camel_imapx_settings_get_mobile_mode (settings);
g_object_unref (settings);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error retrieving message"));
success = FALSE;
+ /*if (!ic->status || ic->status->result == IMAPX_OK) {
+ printf ("%s: might do something when the job for '%s' was cancelled/ended with error, but did not\n", __FUNCTION__, camel_folder_get_full_name (folder));
+ }*/
} else {
GCompareDataFunc uid_cmp = imapx_uid_cmp;
CamelMessageInfo *s_minfo = NULL;
@@ -5581,7 +5584,7 @@ imapx_command_fetch_new_messages_done (C
ifolder = CAMEL_IMAPX_FOLDER (folder);
isum = CAMEL_IMAPX_SUMMARY (folder->summary);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error fetching new messages"));
@@ -6124,7 +6127,7 @@ imapx_command_expunge_done (CamelIMAPXSe
folder = camel_imapx_job_ref_folder (job);
g_return_val_if_fail (folder != NULL, FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error expunging message"));
@@ -6235,7 +6238,7 @@ imapx_command_list_done (CamelIMAPXServe
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error fetching folders"));
@@ -6317,7 +6320,7 @@ imapx_command_subscription_done (CamelIM
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error subscribing to folder"));
@@ -6382,7 +6385,7 @@ imapx_command_create_folder_done (CamelI
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error creating folder"));
@@ -6436,7 +6439,7 @@ imapx_command_delete_folder_done (CamelI
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error deleting folder"));
@@ -6510,7 +6513,7 @@ imapx_command_rename_folder_done (CamelI
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error renaming folder"));
@@ -6585,7 +6588,7 @@ imapx_command_update_quota_info_done (Ca
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error retrieving quota information"));
@@ -6652,7 +6655,7 @@ imapx_command_uid_search_done (CamelIMAP
data = camel_imapx_job_get_data (job);
g_return_val_if_fail (data != NULL, FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (error, "%s: ", _("Search failed"));
success = FALSE;
}
@@ -6713,7 +6716,7 @@ imapx_command_noop_done (CamelIMAPXServe
job = camel_imapx_command_get_job (ic);
g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error performing NOOP"));
@@ -6822,7 +6825,7 @@ imapx_command_sync_changes_done (CamelIM
* that what we just set is actually what is on the server now .. but
* if it isn't, i guess we'll fix up next refresh */
- if (camel_imapx_command_set_error_if_failed (ic, error)) {
+ if (camel_imapx_command_set_error_if_failed (ic, cancellable, error)) {
g_prefix_error (
error, "%s: ",
_("Error syncing changes"));