[evolution-data-server] Bug 764977 - Manual folder Refresh should fully resync with the server
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug 764977 - Manual folder Refresh should fully resync with the server
- Date: Thu, 14 Apr 2016 08:35:33 +0000 (UTC)
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]