[evolution-ews] Bug #673351 - Empty Trash doesn't work without visiting it



commit 19b9823de291c586a78b9fb804aed8ac71d4008a
Author: Milan Crha <mcrha redhat com>
Date:   Fri May 3 11:37:16 2013 +0200

    Bug #673351 - Empty Trash doesn't work without visiting it

 src/camel/camel-ews-folder.c |    3 ++-
 src/camel/camel-ews-store.c  |   29 +++++++++++++++++++++++++++--
 2 files changed, 29 insertions(+), 3 deletions(-)
---
diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index cfc5954..69e3f25 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -617,7 +617,8 @@ ews_folder_get_message_sync (CamelFolder *folder,
        message = camel_ews_folder_get_message_from_cache ((CamelEwsFolder *) folder, uid, cancellable, NULL);
        if (!message) {
                message = camel_ews_folder_get_message (folder, uid, EWS_ITEM_HIGH, cancellable, error);
-               ews_folder_maybe_update_mlist (folder, uid, message);
+               if (message)
+                       ews_folder_maybe_update_mlist (folder, uid, message);
        }
 
        return message;
diff --git a/src/camel/camel-ews-store.c b/src/camel/camel-ews-store.c
index 6c9ce3a..a35284d 100644
--- a/src/camel/camel-ews-store.c
+++ b/src/camel/camel-ews-store.c
@@ -2247,12 +2247,37 @@ ews_get_trash_folder_sync (CamelStore *store,
        folder_name = camel_ews_store_summary_get_folder_full_name (
                ews_store->summary, folder_id, NULL);
 
-       folder = ews_get_folder_sync (
+       folder = camel_store_get_folder_sync (
                store, folder_name, 0, cancellable, error);
 
        g_free (folder_name);
        g_free (folder_id);
 
+       if (folder) {
+               GPtrArray *folders;
+               gboolean can = TRUE;
+               gint ii;
+
+               /* Save content of all opened folders, thus any messages deleted in them
+                  are moved to the Deleted Items folder first, thus in case of the trash
+                  folder instance being used to expunge messages will contain all of them.
+               */
+               folders = camel_object_bag_list (store->folders);
+               for (ii = 0; ii < folders->len; ii++) {
+                       CamelFolder *secfolder = folders->pdata[ii];
+
+                       if (secfolder != folder && can)
+                           can = camel_folder_synchronize_sync (secfolder, FALSE, cancellable, NULL);
+
+                       g_object_unref (secfolder);
+               }
+               g_ptr_array_free (folders, TRUE);
+
+               /* To return 'Deleted Items' folder with current content,
+                  not with possibly stale locally cached copy. */
+               camel_folder_refresh_info_sync (folder, cancellable, NULL);
+       }
+
        return folder;
 }
 
@@ -2282,7 +2307,7 @@ ews_get_junk_folder_sync (CamelStore *store,
        folder_name = camel_ews_store_summary_get_folder_full_name (
                ews_store->summary, folder_id, NULL);
 
-       folder = ews_get_folder_sync (
+       folder = camel_store_get_folder_sync (
                store, folder_name, 0, cancellable, error);
 
        g_free (folder_name);


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