diff options
author | Milan Crha <mcrha@redhat.com> | 2017-11-27 14:04:00 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2017-11-27 14:04:00 +0100 |
commit | 7491dd9c0da7c745985e8b92121d3c5fc4831e6f (patch) | |
tree | 3a10a1dc0c3f22b287d91ed4d99bfe0fcc14ab5b | |
parent | 71e96eafaa07e3a52609903cf62d34b925ddf63d (diff) | |
download | evolution-data-server-7491dd9c0da7c745985e8b92121d3c5fc4831e6f.tar.gz |
Bug 790635 - Show feedback on message download for offline after going online
-rw-r--r-- | src/camel/camel-offline-folder.c | 105 | ||||
-rw-r--r-- | src/camel/camel-offline-folder.h | 3 | ||||
-rw-r--r-- | src/camel/camel-offline-store.c | 2 |
3 files changed, 71 insertions, 39 deletions
diff --git a/src/camel/camel-offline-folder.c b/src/camel/camel-offline-folder.c index 33d8f577b..79545686b 100644 --- a/src/camel/camel-offline-folder.c +++ b/src/camel/camel-offline-folder.c @@ -167,7 +167,7 @@ offline_folder_downsync_background (CamelSession *session, gchar *expression = NULL; if (limit_time > 0) - expression = g_strdup_printf ("(match-all (> (get-sent-date) %" G_GINT64_FORMAT ")", limit_time); + expression = g_strdup_printf ("(match-all (> (get-sent-date) %" G_GINT64_FORMAT "))", limit_time); camel_offline_folder_downsync_sync ( CAMEL_OFFLINE_FOLDER (data->folder), @@ -287,43 +287,8 @@ static void offline_folder_changed (CamelFolder *folder, CamelFolderChangeInfo *changes) { - CamelStore *store; - CamelSession *session; - - store = camel_folder_get_parent_store (folder); - session = camel_service_ref_session (CAMEL_SERVICE (store)); - - if (!session) - return; - - if (changes && changes->uid_added->len > 0 && camel_offline_folder_can_downsync (CAMEL_OFFLINE_FOLDER (folder))) { - OfflineDownsyncData *data; - gchar *description; - - data = g_slice_new0 (OfflineDownsyncData); - data->changes = camel_folder_change_info_new (); - camel_folder_change_info_cat (data->changes, changes); - data->folder = g_object_ref (folder); - - /* Translators: The first “%s” is replaced with an account name and the second “%s” - is replaced with a full path name. The spaces around “:” are intentional, as - the whole “%s : %s” is meant as an absolute identification of the folder. */ - description = g_strdup_printf (_("Checking download of new messages for offline in “%s : %s”"), - camel_service_get_display_name (CAMEL_SERVICE (camel_folder_get_parent_store (folder))), - camel_folder_get_full_name (folder)); - - camel_session_submit_job ( - session, description, (CamelSessionCallback) - offline_folder_downsync_background, data, - (GDestroyNotify) offline_downsync_data_free); - - g_free (description); - } - - g_object_unref (session); - - if (changes && changes->uid_changed && changes->uid_changed->len > 0) - offline_folder_maybe_schedule_folder_change_store (CAMEL_OFFLINE_FOLDER (folder)); + if (changes) + camel_offline_folder_schedule_downsync (CAMEL_OFFLINE_FOLDER (folder), changes); } static void @@ -737,3 +702,67 @@ camel_offline_folder_downsync_finish (CamelOfflineFolder *folder, return g_task_propagate_boolean (G_TASK (result), error); } + +/** + * camel_offline_folder_schedule_downsync: + * @offline_folder: a #CamelOfflineFolder + * @changes: (nullable): options #CamelFolderChangeInfo for the @offline_folder, or %NULL + * + * Schedules synchronization for offline for the @offline_folder, if it's set to + * synchronize for offline. The @changes can be used to limit what messages will + * be considered. If it's %NULL, then the folder content will be checked. + * + * The request, if scheduled, is done as a #CamelSession job. + * + * Since: 3.28 + **/ +void +camel_offline_folder_schedule_downsync (CamelOfflineFolder *offline_folder, + CamelFolderChangeInfo *changes) +{ + CamelStore *store; + CamelFolder *folder; + CamelSession *session; + + g_return_if_fail (CAMEL_IS_OFFLINE_FOLDER (offline_folder)); + + folder = CAMEL_FOLDER (offline_folder); + store = camel_folder_get_parent_store (folder); + session = camel_service_ref_session (CAMEL_SERVICE (store)); + + if (!session) + return; + + if ((!changes || (changes && changes->uid_added->len > 0)) && + camel_offline_folder_can_downsync (offline_folder)) { + OfflineDownsyncData *data; + gchar *description; + + data = g_slice_new0 (OfflineDownsyncData); + if (changes) { + data->changes = camel_folder_change_info_new (); + camel_folder_change_info_cat (data->changes, changes); + } + + data->folder = g_object_ref (folder); + + /* Translators: The first “%s” is replaced with an account name and the second “%s” + is replaced with a full path name. The spaces around “:” are intentional, as + the whole “%s : %s” is meant as an absolute identification of the folder. */ + description = g_strdup_printf (_("Checking download of new messages for offline in “%s : %s”"), + camel_service_get_display_name (CAMEL_SERVICE (camel_folder_get_parent_store (folder))), + camel_folder_get_full_name (folder)); + + camel_session_submit_job ( + session, description, (CamelSessionCallback) + offline_folder_downsync_background, data, + (GDestroyNotify) offline_downsync_data_free); + + g_free (description); + } + + g_object_unref (session); + + if (changes && changes->uid_changed && changes->uid_changed->len > 0) + offline_folder_maybe_schedule_folder_change_store (CAMEL_OFFLINE_FOLDER (folder)); +} diff --git a/src/camel/camel-offline-folder.h b/src/camel/camel-offline-folder.h index 4d043444d..31c97fde4 100644 --- a/src/camel/camel-offline-folder.h +++ b/src/camel/camel-offline-folder.h @@ -93,6 +93,9 @@ gboolean camel_offline_folder_downsync_finish (CamelOfflineFolder *folder, GAsyncResult *result, GError **error); +void camel_offline_folder_schedule_downsync + (CamelOfflineFolder *oflfine_folder, + CamelFolderChangeInfo *changes); G_END_DECLS diff --git a/src/camel/camel-offline-store.c b/src/camel/camel-offline-store.c index 959f0ab18..9d2417e0d 100644 --- a/src/camel/camel-offline-store.c +++ b/src/camel/camel-offline-store.c @@ -237,7 +237,7 @@ camel_offline_store_set_online_sync (CamelOfflineStore *store, offline_folder = CAMEL_OFFLINE_FOLDER (folder); if (camel_offline_folder_can_downsync (offline_folder)) - camel_offline_folder_downsync_sync (offline_folder, NULL, cancellable, NULL); + camel_offline_folder_schedule_downsync (offline_folder, NULL); } if (folders) { |