[evolution-data-server] Bug 764977 - Manual folder Refresh should fully resync with the server



commit d198576df870909936e78ecd71059cba85b9c2c3
Author: Milan Crha <mcrha redhat com>
Date:   Thu Apr 14 10:35:06 2016 +0200

    Bug 764977 - Manual folder Refresh should fully resync with the server

 camel/camel-enums.h  |    7 ++++++-
 camel/camel-folder.c |   23 +++++++++++++++++++++++
 camel/camel-folder.h |    6 +++++-
 camel/camel-store.c  |    9 ++++++++-
 4 files changed, 42 insertions(+), 3 deletions(-)
---
diff --git a/camel/camel-enums.h b/camel/camel-enums.h
index 5ca476f..7a885d5 100644
--- a/camel/camel-enums.h
+++ b/camel/camel-enums.h
@@ -426,13 +426,18 @@ typedef enum { /*< flags >*/
  *   flag for requesting the list of folders available for
  *   subscription. Used in Exchange / IMAP connectors for public
  *   folder fetching.
+ * @CAMEL_STORE_FOLDER_INFO_REFRESH:
+ *   Treat this call as a request to refresh the folder summary;
+ *   for remote accounts it can be to re-fetch fresh folder
+ *   content from the server and update the local cache.
  **/
 typedef enum { /*< flags >*/
        CAMEL_STORE_FOLDER_INFO_FAST = 1 << 0,
        CAMEL_STORE_FOLDER_INFO_RECURSIVE = 1 << 1,
        CAMEL_STORE_FOLDER_INFO_SUBSCRIBED = 1 << 2,
        CAMEL_STORE_FOLDER_INFO_NO_VIRTUAL = 1 << 3,
-       CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST = 1 << 4
+       CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST = 1 << 4,
+       CAMEL_STORE_FOLDER_INFO_REFRESH = 1 << 5
 } CamelStoreGetFolderInfoFlags;
 
 typedef enum { /*< flags >*/
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
index cb489e3..512ef9d 100644
--- a/camel/camel-folder.c
+++ b/camel/camel-folder.c
@@ -4129,6 +4129,29 @@ camel_folder_transfer_messages_to_finish (CamelFolder *source,
 }
 
 /**
+ * camel_folder_prepare_content_refresh:
+ * @folder: a #CamelFolder
+ *
+ * Lets the @folder know that it should refresh its content
+ * the next time from fresh. This is useful for remote accounts,
+ * to fully re-check the folder content against the server.
+ *
+ * Since: 3.22
+ **/
+void
+camel_folder_prepare_content_refresh (CamelFolder *folder)
+{
+       CamelFolderClass *klass;
+
+       g_return_if_fail (CAMEL_IS_FOLDER (folder));
+
+       klass = CAMEL_FOLDER_GET_CLASS (folder);
+
+       if (klass->prepare_content_refresh)
+               klass->prepare_content_refresh (folder);
+}
+
+/**
  * camel_folder_change_info_new:
  *
  * Create a new folder change info structure.
diff --git a/camel/camel-folder.h b/camel/camel-folder.h
index 7fbd062..df2cdbb 100644
--- a/camel/camel-folder.h
+++ b/camel/camel-folder.h
@@ -251,9 +251,11 @@ struct _CamelFolderClass {
                                                 GPtrArray **transferred_uids,
                                                 GCancellable *cancellable,
                                                 GError **error);
+       void            (*prepare_content_refresh)
+                                               (CamelFolder *folder);
 
        /* Reserved slots for methods. */
-       gpointer reserved_for_methods[20];
+       gpointer reserved_for_methods[19];
 
        /* Signals */
        void            (*changed)              (CamelFolder *folder,
@@ -531,6 +533,8 @@ gboolean    camel_folder_transfer_messages_to_finish
                                                 GAsyncResult *result,
                                                 GPtrArray **transferred_uids,
                                                 GError **error);
+void           camel_folder_prepare_content_refresh
+                                               (CamelFolder *folder);
 
 /* update functions for change info */
 CamelFolderChangeInfo *
diff --git a/camel/camel-store.c b/camel/camel-store.c
index 6ffee81..490f863 100644
--- a/camel/camel-store.c
+++ b/camel/camel-store.c
@@ -1246,8 +1246,12 @@ camel_store_get_folder_sync (CamelStore *store,
 try_again:
        /* Try cache first. */
        folder = camel_object_bag_reserve (store->folders, folder_name);
-       if (folder != NULL)
+       if (folder != NULL) {
+               if ((flags & CAMEL_STORE_FOLDER_INFO_REFRESH) != 0)
+                       camel_folder_prepare_content_refresh (folder);
+
                return folder;
+       }
 
        store_uses_vjunk =
                ((store->flags & CAMEL_STORE_VJUNK) != 0);
@@ -1404,6 +1408,9 @@ try_again:
                }
        }
 
+       if (folder && (flags & CAMEL_STORE_FOLDER_INFO_REFRESH) != 0)
+               camel_folder_prepare_content_refresh (folder);
+
        return folder;
 }
 


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