[evolution-ews] I#154 - Add an option to reset sync tags
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] I#154 - Add an option to reset sync tags
- Date: Wed, 9 Jun 2021 16:56:46 +0000 (UTC)
commit 5eb42559badff9f140dca6c71d154ee4c71ac6ea
Author: Milan Crha <mcrha redhat com>
Date: Wed Jun 9 18:56:08 2021 +0200
I#154 - Add an option to reset sync tags
Closes https://gitlab.gnome.org/GNOME/evolution-ews/-/issues/154
src/EWS/addressbook/e-book-backend-ews.c | 55 ++++++++++
src/EWS/calendar/e-cal-backend-ews.c | 55 ++++++++++
src/EWS/camel/camel-ews-folder.c | 12 ++-
src/EWS/camel/camel-ews-summary.c | 40 ++++++-
src/EWS/camel/camel-ews-summary.h | 7 +-
src/EWS/common/camel-ews-settings.c | 77 +++++++++++++-
src/EWS/common/camel-ews-settings.h | 8 +-
.../e-mail-config-ews-folder-sizes-page.c | 115 ++++++++++++++++++++-
.../e-mail-config-ews-folder-sizes-page.h | 3 +
src/EWS/evolution/e-mail-config-ews-notebook.c | 1 +
10 files changed, 363 insertions(+), 10 deletions(-)
---
diff --git a/src/EWS/addressbook/e-book-backend-ews.c b/src/EWS/addressbook/e-book-backend-ews.c
index a72ed5b1..f9622028 100644
--- a/src/EWS/addressbook/e-book-backend-ews.c
+++ b/src/EWS/addressbook/e-book-backend-ews.c
@@ -56,6 +56,8 @@
#define EBB_EWS_DATA_VERSION 1
#define EBB_EWS_DATA_VERSION_KEY "ews-data-version"
+#define EBB_EWS_SYNC_TAG_STAMP_KEY "ews-sync-tag-stamp"
+
#define X_EWS_ORIGINAL_VCARD "X-EWS-ORIGINAL-VCARD"
#define X_EWS_CHANGEKEY "X-EWS-CHANGEKEY"
#define X_EWS_GAL_SHA1 "X-EWS-GAL-SHA1"
@@ -260,6 +262,51 @@ ebb_ews_get_collection_settings (EBookBackendEws *bbews)
return CAMEL_EWS_SETTINGS (settings);
}
+static gboolean
+ebb_ews_get_sync_tag_stamp_changed (EBookBackendEws *bbews)
+{
+ CamelEwsSettings *settings;
+ EBookCache *book_cache;
+ guint sync_tag_stamp;
+
+ settings = ebb_ews_get_collection_settings (bbews);
+ g_return_val_if_fail (settings != NULL, FALSE);
+
+ book_cache = e_book_meta_backend_ref_cache (E_BOOK_META_BACKEND (bbews));
+ if (!book_cache)
+ return FALSE;
+
+ sync_tag_stamp = e_cache_get_key_int (E_CACHE (book_cache), EBB_EWS_SYNC_TAG_STAMP_KEY, NULL);
+ if (sync_tag_stamp == (guint) -1)
+ sync_tag_stamp = 0;
+
+ g_clear_object (&book_cache);
+
+ return sync_tag_stamp != camel_ews_settings_get_sync_tag_stamp (settings);
+}
+
+static void
+ebb_ews_update_sync_tag_stamp (EBookBackendEws *bbews)
+{
+ CamelEwsSettings *settings;
+ EBookCache *book_cache;
+ guint sync_tag_stamp;
+
+ settings = ebb_ews_get_collection_settings (bbews);
+ g_return_if_fail (settings != NULL);
+
+ book_cache = e_book_meta_backend_ref_cache (E_BOOK_META_BACKEND (bbews));
+ if (!book_cache)
+ return;
+
+ sync_tag_stamp = e_cache_get_key_int (E_CACHE (book_cache), EBB_EWS_SYNC_TAG_STAMP_KEY, NULL);
+
+ if (sync_tag_stamp != camel_ews_settings_get_sync_tag_stamp (settings))
+ e_cache_set_key_int (E_CACHE (book_cache), EBB_EWS_SYNC_TAG_STAMP_KEY,
camel_ews_settings_get_sync_tag_stamp (settings), NULL);
+
+ g_clear_object (&book_cache);
+}
+
static void
ebb_ews_convert_error_to_client_error (GError **perror)
{
@@ -3371,6 +3418,7 @@ ebb_ews_get_changes_sync (EBookMetaBackend *meta_backend,
{
EBookBackendEws *bbews;
EBookCache *book_cache;
+ gboolean sync_tag_stamp_changed;
gboolean success = TRUE;
GError *local_error = NULL;
@@ -3390,6 +3438,10 @@ ebb_ews_get_changes_sync (EBookMetaBackend *meta_backend,
book_cache = e_book_meta_backend_ref_cache (meta_backend);
g_return_val_if_fail (E_IS_BOOK_CACHE (book_cache), FALSE);
+ sync_tag_stamp_changed = ebb_ews_get_sync_tag_stamp_changed (bbews);
+ if (sync_tag_stamp_changed)
+ last_sync_tag = NULL;
+
g_rec_mutex_lock (&bbews->priv->cnc_lock);
if (bbews->priv->is_gal) {
@@ -3583,6 +3635,9 @@ ebb_ews_get_changes_sync (EBookMetaBackend *meta_backend,
g_clear_object (&book_cache);
+ if (success && sync_tag_stamp_changed)
+ ebb_ews_update_sync_tag_stamp (bbews);
+
return success;
}
diff --git a/src/EWS/calendar/e-cal-backend-ews.c b/src/EWS/calendar/e-cal-backend-ews.c
index 002b867f..ea7c1f78 100644
--- a/src/EWS/calendar/e-cal-backend-ews.c
+++ b/src/EWS/calendar/e-cal-backend-ews.c
@@ -68,6 +68,8 @@ struct _ECalBackendEwsPrivate {
gchar *attachments_dir;
};
+#define ECB_EWS_SYNC_TAG_STAMP_KEY "ews-sync-tag-stamp"
+
#define X_EWS_ORIGINAL_COMP "X-EWS-ORIGINAL-COMP"
#define EWS_MAX_FETCH_COUNT 100
@@ -144,6 +146,51 @@ ecb_ews_get_collection_settings (ECalBackendEws *cbews)
return CAMEL_EWS_SETTINGS (settings);
}
+static gboolean
+ecb_ews_get_sync_tag_stamp_changed (ECalBackendEws *cbews)
+{
+ CamelEwsSettings *settings;
+ ECalCache *cal_cache;
+ guint sync_tag_stamp;
+
+ settings = ecb_ews_get_collection_settings (cbews);
+ g_return_val_if_fail (settings != NULL, FALSE);
+
+ cal_cache = e_cal_meta_backend_ref_cache (E_CAL_META_BACKEND (cbews));
+ if (!cal_cache)
+ return FALSE;
+
+ sync_tag_stamp = e_cache_get_key_int (E_CACHE (cal_cache), ECB_EWS_SYNC_TAG_STAMP_KEY, NULL);
+ if (sync_tag_stamp == (guint) -1)
+ sync_tag_stamp = 0;
+
+ g_clear_object (&cal_cache);
+
+ return sync_tag_stamp != camel_ews_settings_get_sync_tag_stamp (settings);
+}
+
+static void
+ecb_ews_update_sync_tag_stamp (ECalBackendEws *cbews)
+{
+ CamelEwsSettings *settings;
+ ECalCache *cal_cache;
+ guint sync_tag_stamp;
+
+ settings = ecb_ews_get_collection_settings (cbews);
+ g_return_if_fail (settings != NULL);
+
+ cal_cache = e_cal_meta_backend_ref_cache (E_CAL_META_BACKEND (cbews));
+ if (!cal_cache)
+ return;
+
+ sync_tag_stamp = e_cache_get_key_int (E_CACHE (cal_cache), ECB_EWS_SYNC_TAG_STAMP_KEY, NULL);
+
+ if (sync_tag_stamp != camel_ews_settings_get_sync_tag_stamp (settings))
+ e_cache_set_key_int (E_CACHE (cal_cache), ECB_EWS_SYNC_TAG_STAMP_KEY,
camel_ews_settings_get_sync_tag_stamp (settings), NULL);
+
+ g_clear_object (&cal_cache);
+}
+
static GHashTable *
ecb_ews_get_mail_aliases (ECalBackendEws *cbews)
{
@@ -1833,6 +1880,7 @@ ecb_ews_get_changes_sync (ECalMetaBackend *meta_backend,
{
ECalBackendEws *cbews;
ECalCache *cal_cache;
+ gboolean sync_tag_stamp_changed;
gboolean success = TRUE;
GError *local_error = NULL;
@@ -1852,6 +1900,10 @@ ecb_ews_get_changes_sync (ECalMetaBackend *meta_backend,
cal_cache = e_cal_meta_backend_ref_cache (meta_backend);
g_return_val_if_fail (E_IS_CAL_CACHE (cal_cache), FALSE);
+ sync_tag_stamp_changed = ecb_ews_get_sync_tag_stamp_changed (cbews);
+ if (sync_tag_stamp_changed)
+ last_sync_tag = NULL;
+
g_rec_mutex_lock (&cbews->priv->cnc_lock);
if (cbews->priv->is_freebusy_calendar) {
@@ -2146,6 +2198,9 @@ ecb_ews_get_changes_sync (ECalMetaBackend *meta_backend,
ecb_ews_maybe_disconnect_sync (cbews, error, cancellable);
g_clear_object (&cal_cache);
+ if (success && sync_tag_stamp_changed)
+ ecb_ews_update_sync_tag_stamp (cbews);
+
return success;
}
diff --git a/src/EWS/camel/camel-ews-folder.c b/src/EWS/camel/camel-ews-folder.c
index 574829d9..126fb36a 100644
--- a/src/EWS/camel/camel-ews-folder.c
+++ b/src/EWS/camel/camel-ews-folder.c
@@ -2308,6 +2308,7 @@ ews_refresh_info_sync (CamelFolder *folder,
GHashTable *updating_summary_uids = NULL;
EEwsConnection *cnc;
CamelEwsStore *ews_store;
+ CamelEwsSettings *settings;
const gchar *full_name;
gchar *id;
gchar *sync_state;
@@ -2356,7 +2357,13 @@ ews_refresh_info_sync (CamelFolder *folder,
* Due to these reasons we just get the item ids and its type in
* SyncFolderItem request and fetch the item using the
* GetItem request. */
- sync_state = camel_ews_summary_dup_sync_state (CAMEL_EWS_SUMMARY (folder_summary));
+
+ settings = e_ews_connection_ref_settings (cnc);
+
+ if (settings && camel_ews_summary_get_sync_tag_stamp (CAMEL_EWS_SUMMARY (folder_summary)) !=
camel_ews_settings_get_sync_tag_stamp (settings))
+ sync_state = NULL;
+ else
+ sync_state = camel_ews_summary_dup_sync_state (CAMEL_EWS_SUMMARY (folder_summary));
if (!sync_state ||
camel_ews_summary_get_version (CAMEL_EWS_SUMMARY (folder_summary)) < CAMEL_EWS_SUMMARY_VERSION) {
@@ -2426,6 +2433,8 @@ ews_refresh_info_sync (CamelFolder *folder,
camel_ews_store_summary_save (ews_store->summary, NULL);
camel_ews_summary_set_sync_state (CAMEL_EWS_SUMMARY (folder_summary), sync_state);
+ if (settings)
+ camel_ews_summary_set_sync_tag_stamp (CAMEL_EWS_SUMMARY (folder_summary),
camel_ews_settings_get_sync_tag_stamp (settings));
camel_folder_summary_touch (folder_summary);
@@ -2485,6 +2494,7 @@ ews_refresh_info_sync (CamelFolder *folder,
priv->refreshing = FALSE;
g_mutex_unlock (&priv->state_lock);
+ g_clear_object (&settings);
g_object_unref (cnc);
g_free (sync_state);
g_free (id);
diff --git a/src/EWS/camel/camel-ews-summary.c b/src/EWS/camel/camel-ews-summary.c
index 07bb187e..f6f5ffd2 100644
--- a/src/EWS/camel/camel-ews-summary.c
+++ b/src/EWS/camel/camel-ews-summary.c
@@ -31,6 +31,7 @@ struct _CamelEwsSummaryPrivate {
GMutex property_lock;
gchar *sync_state;
gint32 version;
+ guint sync_tag_stamp;
};
G_DEFINE_TYPE_WITH_PRIVATE (CamelEwsSummary, camel_ews_summary, CAMEL_TYPE_FOLDER_SUMMARY)
@@ -102,13 +103,26 @@ summary_header_load (CamelFolderSummary *s,
return FALSE;
ews_summary->priv->version = 0;
+ ews_summary->priv->sync_tag_stamp = 0;
part = mir->bdata;
- if (part)
+ if (part) {
EXTRACT_FIRST_DIGIT (ews_summary->priv->version);
- if (part && part++ && strcmp (part, "(null)") &&
+ if (part && !part++)
+ part = NULL;
+ }
+
+ if (part && strcmp (part, "(null)") &&
+ ews_summary->priv->version >= CAMEL_EWS_SUMMARY_VERSION) {
+ EXTRACT_FIRST_DIGIT (ews_summary->priv->sync_tag_stamp);
+
+ if (part && !part++)
+ part = NULL;
+ }
+
+ if (part && strcmp (part, "(null)") &&
ews_summary->priv->version >= CAMEL_EWS_SUMMARY_VERSION) {
sync_state = part;
}
@@ -134,14 +148,16 @@ summary_header_save (CamelFolderSummary *s,
CamelEwsSummary *ews_summary = CAMEL_EWS_SUMMARY (s);
struct _CamelFIRecord *fir;
gchar *sync_state;
+ guint sync_tag_stamp;
fir = CAMEL_FOLDER_SUMMARY_CLASS (camel_ews_summary_parent_class)->summary_header_save (s, error);
if (!fir)
return NULL;
sync_state = camel_ews_summary_dup_sync_state (ews_summary);
+ sync_tag_stamp = camel_ews_summary_get_sync_tag_stamp (ews_summary);
- fir->bdata = g_strdup_printf ("%d %s", CAMEL_EWS_SUMMARY_VERSION, sync_state);
+ fir->bdata = g_strdup_printf ("%d %u %s", CAMEL_EWS_SUMMARY_VERSION, sync_tag_stamp, sync_state);
g_free (sync_state);
@@ -317,3 +333,21 @@ camel_ews_summary_dup_sync_state (CamelEwsSummary *ews_summary)
return sync_state;
}
+
+guint
+camel_ews_summary_get_sync_tag_stamp (CamelEwsSummary *ews_summary)
+{
+ g_return_val_if_fail (CAMEL_IS_EWS_SUMMARY (ews_summary), 0);
+
+ return ews_summary->priv->sync_tag_stamp;
+}
+
+void
+camel_ews_summary_set_sync_tag_stamp (CamelEwsSummary *ews_summary,
+ guint value)
+{
+ g_return_if_fail (CAMEL_IS_EWS_SUMMARY (ews_summary));
+
+ if (ews_summary->priv->sync_tag_stamp != value)
+ ews_summary->priv->sync_tag_stamp = value;
+}
diff --git a/src/EWS/camel/camel-ews-summary.h b/src/EWS/camel/camel-ews-summary.h
index d101450d..46f5d8b0 100644
--- a/src/EWS/camel/camel-ews-summary.h
+++ b/src/EWS/camel/camel-ews-summary.h
@@ -12,7 +12,7 @@
#include "camel-ews-message-info.h"
-#define CAMEL_EWS_SUMMARY_VERSION (2)
+#define CAMEL_EWS_SUMMARY_VERSION (3)
/* Standard GObject macros */
#define CAMEL_TYPE_EWS_SUMMARY \
@@ -70,6 +70,11 @@ gint32 camel_ews_summary_get_version (CamelEwsSummary *ews_summary);
void camel_ews_summary_set_sync_state(CamelEwsSummary *ews_summary,
const gchar *sync_state);
gchar * camel_ews_summary_dup_sync_state(CamelEwsSummary *ews_summary);
+guint camel_ews_summary_get_sync_tag_stamp
+ (CamelEwsSummary *ews_summary);
+void camel_ews_summary_set_sync_tag_stamp
+ (CamelEwsSummary *ews_summary,
+ guint value);
G_END_DECLS
diff --git a/src/EWS/common/camel-ews-settings.c b/src/EWS/common/camel-ews-settings.c
index a4db2b16..e2cbb8a5 100644
--- a/src/EWS/common/camel-ews-settings.c
+++ b/src/EWS/common/camel-ews-settings.c
@@ -26,6 +26,7 @@ struct _CamelEwsSettingsPrivate {
gchar *oal_selected;
guint timeout;
guint concurrent_connections;
+ guint sync_tag_stamp;
gchar *impersonate_user;
gboolean override_user_agent;
gchar *user_agent;
@@ -66,7 +67,8 @@ enum {
PROP_OAUTH2_RESOURCE_URI,
PROP_OAUTH2_ENDPOINT_HOST,
PROP_SHOW_PUBLIC_FOLDERS,
- PROP_CONCURRENT_CONNECTIONS
+ PROP_CONCURRENT_CONNECTIONS,
+ PROP_SYNC_TAG_STAMP
};
G_DEFINE_TYPE_WITH_CODE (CamelEwsSettings, camel_ews_settings, CAMEL_TYPE_OFFLINE_SETTINGS,
@@ -276,6 +278,12 @@ ews_settings_set_property (GObject *object,
CAMEL_EWS_SETTINGS (object),
g_value_get_uint (value));
return;
+
+ case PROP_SYNC_TAG_STAMP:
+ camel_ews_settings_set_sync_tag_stamp (
+ CAMEL_EWS_SETTINGS (object),
+ g_value_get_uint (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -483,6 +491,13 @@ ews_settings_get_property (GObject *object,
camel_ews_settings_get_concurrent_connections (
CAMEL_EWS_SETTINGS (object)));
return;
+
+ case PROP_SYNC_TAG_STAMP:
+ g_value_set_uint (
+ value,
+ camel_ews_settings_get_sync_tag_stamp (
+ CAMEL_EWS_SETTINGS (object)));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -830,6 +845,21 @@ camel_ews_settings_class_init (CamelEwsSettingsClass *class)
G_PARAM_CONSTRUCT |
G_PARAM_EXPLICIT_NOTIFY |
G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_SYNC_TAG_STAMP,
+ g_param_spec_uint (
+ "sync-tag-stamp",
+ "Sync Tag Stamp",
+ "Stamp for synchronization tag",
+ 0,
+ G_MAXUINT,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_EXPLICIT_NOTIFY |
+ G_PARAM_STATIC_STRINGS));
}
static void
@@ -1792,3 +1822,48 @@ camel_ews_settings_set_concurrent_connections (CamelEwsSettings *settings,
g_object_notify (G_OBJECT (settings), "concurrent-connections");
}
+
+guint
+camel_ews_settings_get_sync_tag_stamp (CamelEwsSettings *settings)
+{
+ guint res;
+
+ g_return_val_if_fail (CAMEL_IS_EWS_SETTINGS (settings), ~0u);
+
+ g_mutex_lock (&settings->priv->property_lock);
+ res = settings->priv->sync_tag_stamp;
+ g_mutex_unlock (&settings->priv->property_lock);
+
+ return res;
+}
+
+void
+camel_ews_settings_set_sync_tag_stamp (CamelEwsSettings *settings,
+ guint value)
+{
+ g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+ g_mutex_lock (&settings->priv->property_lock);
+
+ if (settings->priv->sync_tag_stamp == value) {
+ g_mutex_unlock (&settings->priv->property_lock);
+ return;
+ }
+
+ settings->priv->sync_tag_stamp = value;
+ g_mutex_unlock (&settings->priv->property_lock);
+
+ g_object_notify (G_OBJECT (settings), "sync-tag-stamp");
+}
+
+void
+camel_ews_settings_inc_sync_tag_stamp (CamelEwsSettings *settings)
+{
+ g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+ g_mutex_lock (&settings->priv->property_lock);
+ settings->priv->sync_tag_stamp++;
+ g_mutex_unlock (&settings->priv->property_lock);
+
+ g_object_notify (G_OBJECT (settings), "sync-tag-stamp");
+}
diff --git a/src/EWS/common/camel-ews-settings.h b/src/EWS/common/camel-ews-settings.h
index fa884ea5..192f95db 100644
--- a/src/EWS/common/camel-ews-settings.h
+++ b/src/EWS/common/camel-ews-settings.h
@@ -184,7 +184,13 @@ guint camel_ews_settings_get_concurrent_connections
void camel_ews_settings_set_concurrent_connections
(CamelEwsSettings *settings,
guint concurrent_connections);
-
+guint camel_ews_settings_get_sync_tag_stamp
+ (CamelEwsSettings *settings);
+void camel_ews_settings_set_sync_tag_stamp
+ (CamelEwsSettings *settings,
+ guint value);
+void camel_ews_settings_inc_sync_tag_stamp
+ (CamelEwsSettings *settings);
G_END_DECLS
#endif /* CAMEL_EWS_SETTINGS_H */
diff --git a/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.c
b/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.c
index 0448a15a..a711cbb3 100644
--- a/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.c
+++ b/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.c
@@ -22,12 +22,14 @@
struct _EMailConfigEwsFolderSizesPagePrivate {
ESource *account_source;
+ ESource *collection_source;
ESourceRegistry *registry;
};
enum {
PROP_0,
PROP_ACCOUNT_SOURCE,
+ PROP_COLLECTION_SOURCE,
PROP_SOURCE_REGISTRY
};
@@ -67,6 +69,26 @@ folder_sizes_clicked_cb (GtkWidget *button,
g_object_unref (service);
}
+static void
+reset_sync_tags_clicked_cb (GtkWidget *button,
+ EMailConfigEwsFolderSizesPage *page)
+{
+ ESource *collection_source;
+ ESourceCamel *extension;
+ CamelSettings *settings;
+ const gchar *extension_name;
+
+ collection_source = e_mail_config_ews_folder_sizes_page_get_collection_source (page);
+
+ extension_name = e_source_camel_get_extension_name ("ews");
+ e_source_camel_generate_subtype ("ews", CAMEL_TYPE_EWS_SETTINGS);
+
+ extension = e_source_get_extension (collection_source, extension_name);
+ settings = e_source_camel_get_settings (extension);
+
+ camel_ews_settings_inc_sync_tag_stamp (CAMEL_EWS_SETTINGS (settings));
+}
+
static void
mail_config_ews_folder_sizes_page_set_account_source (EMailConfigEwsFolderSizesPage *page,
ESource *account_source)
@@ -77,6 +99,16 @@ mail_config_ews_folder_sizes_page_set_account_source (EMailConfigEwsFolderSizesP
page->priv->account_source = g_object_ref (account_source);
}
+static void
+mail_config_ews_folder_sizes_page_set_collection_source (EMailConfigEwsFolderSizesPage *page,
+ ESource *collection_source)
+{
+ g_return_if_fail (E_IS_SOURCE (collection_source));
+ g_return_if_fail (page->priv->collection_source == NULL);
+
+ page->priv->collection_source = g_object_ref (collection_source);
+}
+
static void
mail_config_ews_folder_sizes_page_set_source_registry (EMailConfigEwsFolderSizesPage *page,
ESourceRegistry *registry)
@@ -100,6 +132,12 @@ mail_config_ews_folder_sizes_page_set_property (GObject *object,
g_value_get_object (value));
return;
+ case PROP_COLLECTION_SOURCE:
+ mail_config_ews_folder_sizes_page_set_collection_source (
+ E_MAIL_CONFIG_EWS_FOLDER_SIZES_PAGE (object),
+ g_value_get_object (value));
+ return;
+
case PROP_SOURCE_REGISTRY:
mail_config_ews_folder_sizes_page_set_source_registry (
E_MAIL_CONFIG_EWS_FOLDER_SIZES_PAGE (object),
@@ -124,6 +162,13 @@ mail_config_ews_folder_sizes_page_get_property (GObject *object,
E_MAIL_CONFIG_EWS_FOLDER_SIZES_PAGE (object)));
return;
+ case PROP_COLLECTION_SOURCE:
+ g_value_set_object (
+ value,
+ e_mail_config_ews_folder_sizes_page_get_collection_source (
+ E_MAIL_CONFIG_EWS_FOLDER_SIZES_PAGE (object)));
+ return;
+
case PROP_SOURCE_REGISTRY:
g_value_set_object (
value,
@@ -143,6 +188,7 @@ mail_config_ews_folder_sizes_page_dispose (GObject *object)
ews_page = E_MAIL_CONFIG_EWS_FOLDER_SIZES_PAGE (object);
g_clear_object (&ews_page->priv->account_source);
+ g_clear_object (&ews_page->priv->collection_source);
g_clear_object (&ews_page->priv->registry);
/* Chain up to parent's dispose() method. */
@@ -175,14 +221,55 @@ mail_config_ews_folder_sizes_page_constructed (GObject *object)
gtk_grid_attach (content_grid, widget, 0, 0, 2, 1);
g_free (markup);
+ widget = gtk_button_new_with_mnemonic (_("Folder _Sizes"));
+ g_object_set (G_OBJECT (widget),
+ "hexpand", FALSE,
+ "halign", GTK_ALIGN_FILL,
+ "vexpand", FALSE,
+ "valign", GTK_ALIGN_START,
+ NULL);
+ g_signal_connect (widget, "clicked", G_CALLBACK (folder_sizes_clicked_cb), page);
+
+ gtk_grid_attach (content_grid, widget, 0, 1, 1, 1);
+
widget = gtk_label_new (_("View the size of all Exchange folders"));
gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
- gtk_grid_attach (content_grid, widget, 0, 1, 1, 1);
+ g_object_set (G_OBJECT (widget),
+ "hexpand", FALSE,
+ "halign", GTK_ALIGN_START,
+ "vexpand", FALSE,
+ "valign", GTK_ALIGN_CENTER,
+ NULL);
- widget = gtk_button_new_with_mnemonic (_("Folder _Sizes"));
- g_signal_connect (widget, "clicked", G_CALLBACK (folder_sizes_clicked_cb), page);
gtk_grid_attach (content_grid, widget, 1, 1, 1, 1);
+ widget = gtk_button_new_with_mnemonic (_("_Reset Synchronization Tags"));
+ g_object_set (G_OBJECT (widget),
+ "hexpand", FALSE,
+ "halign", GTK_ALIGN_FILL,
+ "vexpand", FALSE,
+ "valign", GTK_ALIGN_START,
+ NULL);
+ g_signal_connect (widget, "clicked", G_CALLBACK (reset_sync_tags_clicked_cb), page);
+
+ gtk_grid_attach (content_grid, widget, 0, 2, 1, 1);
+
+ widget = gtk_label_new (_("Folders can sometimes get out of synchronization, for example after a long
time not being connected to the server."
+ " By resetting the synchronization tags the folders are updated completely. This does not
cause download of any already locally stored"
+ " messages. The change will take effect the next time the folders are refreshed."));
+ gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.0);
+ g_object_set (G_OBJECT (widget),
+ "hexpand", FALSE,
+ "halign", GTK_ALIGN_START,
+ "vexpand", FALSE,
+ "valign", GTK_ALIGN_CENTER,
+ "wrap", TRUE,
+ "width-chars", 40,
+ "max-width-chars", 60,
+ NULL);
+
+ gtk_grid_attach (content_grid, widget, 1, 2, 1, 1);
+
gtk_widget_show_all (GTK_WIDGET (main_box));
e_mail_config_page_set_content (E_MAIL_CONFIG_PAGE (page), main_box);
@@ -210,6 +297,17 @@ e_mail_config_ews_folder_sizes_page_class_init (EMailConfigEwsFolderSizesPageCla
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (
+ object_class,
+ PROP_COLLECTION_SOURCE,
+ g_param_spec_object (
+ "collection-source",
+ "Collection Source",
+ "Collection source being edited",
+ E_TYPE_SOURCE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+
g_object_class_install_property (
object_class,
PROP_SOURCE_REGISTRY,
@@ -251,14 +349,17 @@ e_mail_config_ews_folder_sizes_page_type_register (GTypeModule *type_module)
EMailConfigPage *
e_mail_config_ews_folder_sizes_page_new (ESource *account_source,
+ ESource *collection_source,
ESourceRegistry *registry)
{
EMailConfigPage *page;
g_return_val_if_fail (E_IS_SOURCE (account_source), NULL);
+ g_return_val_if_fail (E_IS_SOURCE (collection_source), NULL);
page = g_object_new (E_TYPE_MAIL_CONFIG_EWS_FOLDER_SIZES_PAGE,
"account-source", account_source,
+ "collection-source", collection_source,
"source-registry", registry,
NULL);
@@ -273,6 +374,14 @@ e_mail_config_ews_folder_sizes_page_get_account_source (EMailConfigEwsFolderSize
return page->priv->account_source;
}
+ESource *
+e_mail_config_ews_folder_sizes_page_get_collection_source (EMailConfigEwsFolderSizesPage *page)
+{
+ g_return_val_if_fail (E_IS_MAIL_CONFIG_EWS_FOLDER_SIZES_PAGE (page), NULL);
+
+ return page->priv->collection_source;
+}
+
ESourceRegistry *
e_mail_config_ews_folder_sizes_page_get_source_registry (EMailConfigEwsFolderSizesPage *page)
{
diff --git a/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.h
b/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.h
index 115b0c04..2102ec5d 100644
--- a/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.h
+++ b/src/EWS/evolution/e-mail-config-ews-folder-sizes-page.h
@@ -49,9 +49,12 @@ struct _EMailConfigEwsFolderSizesPageClass {
GType e_mail_config_ews_folder_sizes_page_get_type (void) G_GNUC_CONST;
void e_mail_config_ews_folder_sizes_page_type_register (GTypeModule *type_module);
EMailConfigPage * e_mail_config_ews_folder_sizes_page_new (ESource *account_source,
+ ESource *collection_source,
ESourceRegistry *registry);
ESource * e_mail_config_ews_folder_sizes_page_get_account_source
(EMailConfigEwsFolderSizesPage *page);
+ESource * e_mail_config_ews_folder_sizes_page_get_collection_source
+
(EMailConfigEwsFolderSizesPage *page);
ESourceRegistry * e_mail_config_ews_folder_sizes_page_get_source_registry
(EMailConfigEwsFolderSizesPage *page);
G_END_DECLS
diff --git a/src/EWS/evolution/e-mail-config-ews-notebook.c b/src/EWS/evolution/e-mail-config-ews-notebook.c
index 0ed6334e..e7a1c8fe 100644
--- a/src/EWS/evolution/e-mail-config-ews-notebook.c
+++ b/src/EWS/evolution/e-mail-config-ews-notebook.c
@@ -82,6 +82,7 @@ mail_config_ews_notebook_constructed (GObject *object)
page = e_mail_config_ews_folder_sizes_page_new (
account_source,
+ collection_source,
registry);
e_mail_config_notebook_add_page (notebook, page);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]