[evolution-data-server/evolution-data-server-3-12] [IMAPx] Deleted messages not always saved to the server properly



commit a5d3520a2363936e79034f0046126c9a1c18effe
Author: Milan Crha <mcrha redhat com>
Date:   Tue Sep 2 18:15:58 2014 +0200

    [IMAPx] Deleted messages not always saved to the server properly
    
    This is an outcome of investigation of bug 734300, but it probably
    does not fix that bug as such, only something similar.

 camel/providers/imapx/camel-imapx-server.c |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 41ec5ea..ca6c1b8 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -8675,7 +8675,8 @@ imapx_sync_free_user (GArray *user_set)
 
 static void
 imapx_unset_folder_flagged_flag (CamelFolderSummary *summary,
-                                 GPtrArray *changed_uids)
+                                GPtrArray *changed_uids,
+                                gboolean except_deleted_messages)
 {
        CamelMessageInfo *info;
        gboolean changed = FALSE;
@@ -8691,7 +8692,8 @@ imapx_unset_folder_flagged_flag (CamelFolderSummary *summary,
                        CamelMessageInfoBase *mi = (CamelMessageInfoBase *) info;
 
                        /* some infos could be only 'dirty' (needed to save into summary) */
-                       if ((mi->flags & CAMEL_MESSAGE_FOLDER_FLAGGED) != 0) {
+                       if ((mi->flags & CAMEL_MESSAGE_FOLDER_FLAGGED) != 0 &&
+                          (!except_deleted_messages || (mi->flags & CAMEL_MESSAGE_DELETED) == 0)) {
                                mi->flags &= ~CAMEL_MESSAGE_FOLDER_FLAGGED;
                                mi->dirty = TRUE;
                                changed = TRUE;
@@ -8725,6 +8727,7 @@ imapx_server_sync_changes (CamelIMAPXServer *is,
        SyncChangesData *data;
        gboolean use_real_junk_path;
        gboolean use_real_trash_path;
+       gboolean remove_deleted_flags;
        gboolean nothing_to_do;
        gboolean registered;
        gboolean success = TRUE;
@@ -8757,6 +8760,8 @@ imapx_server_sync_changes (CamelIMAPXServer *is,
                camel_imapx_settings_get_use_real_trash_path (settings);
        g_object_unref (settings);
 
+       remove_deleted_flags = use_real_trash_path && (job_type != IMAPX_JOB_EXPUNGE) != 0;
+
        off_orset = on_orset = 0;
        for (i = 0; i < changed_uids->len; i++) {
                guint32 flags, sflags;
@@ -8879,7 +8884,7 @@ imapx_server_sync_changes (CamelIMAPXServer *is,
        if (nothing_to_do) {
                imapx_sync_free_user (on_user);
                imapx_sync_free_user (off_user);
-               imapx_unset_folder_flagged_flag (folder->summary, changed_uids);
+               imapx_unset_folder_flagged_flag (folder->summary, changed_uids, remove_deleted_flags);
                camel_folder_free_uids (folder, changed_uids);
                g_object_unref (folder);
                return TRUE;
@@ -8911,10 +8916,7 @@ imapx_server_sync_changes (CamelIMAPXServer *is,
        data->off_set = off_orset;
        data->on_user = on_user;  /* takes ownership */
        data->off_user = off_user;  /* takes ownership */
-
-       data->remove_deleted_flags =
-               use_real_trash_path &&
-               (job_type != IMAPX_JOB_EXPUNGE);
+       data->remove_deleted_flags = remove_deleted_flags;
 
        job = camel_imapx_job_new (cancellable);
        job->type = IMAPX_JOB_SYNC_CHANGES;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]