[evolution-data-server] Bug 793476 - [IMAPx] Message download interleave when synchronizing for offline
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug 793476 - [IMAPx] Message download interleave when synchronizing for offline
- Date: Tue, 20 Feb 2018 10:39:07 +0000 (UTC)
commit 656a5834ab7241c9df7ac9b400e044256ba09671
Author: Milan Crha <mcrha redhat com>
Date: Tue Feb 20 11:39:54 2018 +0100
Bug 793476 - [IMAPx] Message download interleave when synchronizing for offline
.../providers/imapx/camel-imapx-conn-manager.c | 13 ++++++++-----
src/camel/providers/imapx/camel-imapx-server.c | 11 +++++++++++
2 files changed, 19 insertions(+), 5 deletions(-)
---
diff --git a/src/camel/providers/imapx/camel-imapx-conn-manager.c
b/src/camel/providers/imapx/camel-imapx-conn-manager.c
index 42d5dbd..da7d32d 100644
--- a/src/camel/providers/imapx/camel-imapx-conn-manager.c
+++ b/src/camel/providers/imapx/camel-imapx-conn-manager.c
@@ -2063,9 +2063,12 @@ imapx_conn_manager_get_message_matches (CamelIMAPXJob *job,
g_return_val_if_fail (job != NULL, FALSE);
g_return_val_if_fail (other_job != NULL, FALSE);
- if (camel_imapx_job_get_kind (job) != CAMEL_IMAPX_JOB_GET_MESSAGE ||
- camel_imapx_job_get_kind (job) != camel_imapx_job_get_kind (other_job))
+ if ((camel_imapx_job_get_kind (job) != CAMEL_IMAPX_JOB_GET_MESSAGE &&
+ camel_imapx_job_get_kind (job) != CAMEL_IMAPX_JOB_SYNC_MESSAGE) ||
+ (camel_imapx_job_get_kind (other_job) != CAMEL_IMAPX_JOB_GET_MESSAGE &&
+ camel_imapx_job_get_kind (other_job) != CAMEL_IMAPX_JOB_SYNC_MESSAGE)) {
return FALSE;
+ }
job_data = camel_imapx_job_get_user_data (job);
other_job_data = camel_imapx_job_get_user_data (other_job);
@@ -2073,7 +2076,7 @@ imapx_conn_manager_get_message_matches (CamelIMAPXJob *job,
if (!job_data || !other_job_data)
return FALSE;
- return g_strcmp0 (job_data->message_uid, other_job_data->message_uid) == 0;
+ return job_data->summary == other_job_data->summary && g_strcmp0 (job_data->message_uid,
other_job_data->message_uid) == 0;
}
static void
@@ -2115,7 +2118,7 @@ camel_imapx_conn_manager_get_message_sync (CamelIMAPXConnManager *conn_man,
camel_imapx_job_set_user_data (job, job_data, get_message_job_data_free);
- if (camel_imapx_conn_manager_run_job_sync (conn_man, job, NULL, cancellable, error) &&
+ if (camel_imapx_conn_manager_run_job_sync (conn_man, job, imapx_conn_manager_get_message_matches,
cancellable, error) &&
camel_imapx_job_take_result_data (job, &result_data)) {
result = result_data;
} else {
@@ -2418,7 +2421,7 @@ camel_imapx_conn_manager_sync_message_sync (CamelIMAPXConnManager *conn_man,
camel_imapx_job_set_user_data (job, job_data, get_message_job_data_free);
- success = camel_imapx_conn_manager_run_job_sync (conn_man, job, NULL, cancellable, error);
+ success = camel_imapx_conn_manager_run_job_sync (conn_man, job,
imapx_conn_manager_get_message_matches, cancellable, error);
camel_imapx_job_unref (job);
diff --git a/src/camel/providers/imapx/camel-imapx-server.c b/src/camel/providers/imapx/camel-imapx-server.c
index 02632ba..d6969a6 100644
--- a/src/camel/providers/imapx/camel-imapx-server.c
+++ b/src/camel/providers/imapx/camel-imapx-server.c
@@ -4030,6 +4030,17 @@ camel_imapx_server_get_message_sync (CamelIMAPXServer *is,
or finished with an error. */
camel_data_cache_remove (message_cache, "tmp", message_uid, NULL);
+ /* Check whether the message is already downloaded by another job */
+ cache_stream = camel_data_cache_get (message_cache, "cur", message_uid, NULL);
+ if (cache_stream) {
+ result_stream = camel_stream_new (cache_stream);
+
+ g_clear_object (&cache_stream);
+ g_clear_object (&mi);
+
+ return result_stream;
+ }
+
cache_stream = camel_data_cache_add (message_cache, "tmp", message_uid, error);
if (cache_stream == NULL) {
g_clear_object (&mi);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]