[geary] Don't merge emails if they do not share the same Message-ID. Bug 713530
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary] Don't merge emails if they do not share the same Message-ID. Bug 713530
- Date: Mon, 6 Feb 2017 23:38:04 +0000 (UTC)
commit d33febbc056ea90330485cd8d0b4bb7dd08baabe
Author: Gautier Pelloux-Prayer <gautier+git damsy net>
Date: Thu Dec 29 16:44:16 2016 +0100
Don't merge emails if they do not share the same Message-ID. Bug 713530
In some cases, it may happen that a mail is being sent multiple times simultaneously
to the same recipient.
The only modified field being the Message-ID, we have to check it as well as
message's size before merging 2 mails together.
Otherwise, at each start-up Geary will try to fetch "missing mails" but will never
succeed to do so.
src/engine/imap-db/imap-db-folder.vala | 14 ++++++++++----
.../imap-engine-account-synchronizer.vala | 11 ++++++-----
2 files changed, 16 insertions(+), 9 deletions(-)
---
diff --git a/src/engine/imap-db/imap-db-folder.vala b/src/engine/imap-db/imap-db-folder.vala
index 66f9726..18d0123 100644
--- a/src/engine/imap-db/imap-db-folder.vala
+++ b/src/engine/imap-db/imap-db-folder.vala
@@ -1234,13 +1234,19 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
return null;
}
-
+
// look for duplicate in IMAP message properties
- Db.Statement stmt = cx.prepare(
- "SELECT id FROM MessageTable WHERE internaldate=? AND rfc822_size=?");
+ Db.Statement stmt;
+ if (email.message_id != null)
+ stmt = cx.prepare("SELECT id FROM MessageTable WHERE internaldate=? AND rfc822_size=? AND
message_id=?");
+ else
+ stmt = cx.prepare("SELECT id FROM MessageTable WHERE internaldate=? AND rfc822_size=?");
+
stmt.bind_string(0, internaldate);
stmt.bind_int64(1, rfc822_size);
-
+ if (email.message_id != null)
+ stmt.bind_string(2, email.message_id.to_string());
+
Db.Result results = stmt.exec(cancellable);
// no duplicates found
if (results.finished)
diff --git a/src/engine/imap-engine/imap-engine-account-synchronizer.vala
b/src/engine/imap-engine/imap-engine-account-synchronizer.vala
index a41c72f..f2899e3 100644
--- a/src/engine/imap-engine/imap-engine-account-synchronizer.vala
+++ b/src/engine/imap-engine/imap-engine-account-synchronizer.vala
@@ -398,17 +398,18 @@ private class Geary.ImapEngine.AccountSynchronizer : Geary.BaseObject {
// if past max_epoch, then just pull in everything and be done with it
if (current_epoch.compare(max_epoch) < 0) {
- debug("Background sync reached max epoch of %s, fetching all mail from %s",
- max_epoch.to_string(), folder.to_string());
-
+ debug("Background sync reached max epoch of %s, fetching all mail from %s (already got
%d of %d emails)",
+ max_epoch.to_string(), folder.to_string(), local_count,
folder.properties.email_total);
+
yield folder.list_email_by_id_async(null, 1, Geary.Email.Field.NONE,
Geary.Folder.ListFlags.OLDEST_TO_NEWEST, bg_cancellable);
} else {
// don't go past proscribed epoch
if (current_epoch.compare(epoch) < 0)
current_epoch = epoch;
-
- debug("Background sync'ing %s to %s", folder.to_string(), current_epoch.to_string());
+
+ debug("Background sync'ing %s to %s (already got %d of %d emails)",
+ folder.to_string(), current_epoch.to_string(), local_count,
folder.properties.email_total);
Geary.EmailIdentifier? earliest_span_id = yield
folder.find_earliest_email_async(current_epoch,
oldest_local_id, bg_cancellable);
if (earliest_span_id == null && current_epoch.compare(epoch) <= 0) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]