[geary/mjog/rfc822-cleanup-part-n: 9/9] Geary.Imap.FolderSession: Ensure Email fields updated for null values
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/mjog/rfc822-cleanup-part-n: 9/9] Geary.Imap.FolderSession: Ensure Email fields updated for null values
- Date: Thu, 30 Jul 2020 03:08:57 +0000 (UTC)
commit 53ddf8192778b736480bb7fb6f702eb0ab8d875f
Author: Michael Gratton <mike vee net>
Date: Thu Jul 30 13:03:31 2020 +1000
Geary.Imap.FolderSession: Ensure Email fields updated for null values
Ensure that when setting values from server responses on a Geary.Email
that the flags are still updated even when values are null (e.g. set
Email.Field.DATE even if no Date header was present) so that clients
can tell that the value is in fact null and that email field prereq
checks aren't accidentally triggered.
src/engine/imap/api/imap-folder-session.vala | 33 ++++++++++++++++------------
1 file changed, 19 insertions(+), 14 deletions(-)
---
diff --git a/src/engine/imap/api/imap-folder-session.vala b/src/engine/imap/api/imap-folder-session.vala
index af01a803b..9bc61aca8 100644
--- a/src/engine/imap/api/imap-folder-session.vala
+++ b/src/engine/imap/api/imap-folder-session.vala
@@ -908,12 +908,15 @@ private class Geary.Imap.FolderSession : Geary.Imap.SessionObject {
}
}
+ // When setting email properties below, the relevant
+ // Geary.Email setter needs to be called regardless of
+ // whether the value being set is null, since the setter
+ // will update the email's flags so we know the email has
+ // the field set and it is null.
+
// DATE
if (required_but_not_set(DATE, required_fields, email)) {
- RFC822.Date? date = unflatten_date(headers.get("Date"));
- if (date != null) {
- email.set_send_date(date);
- }
+ email.set_send_date(unflatten_date(headers.get("Date")));
}
// ORIGINATORS
@@ -944,7 +947,9 @@ private class Geary.Imap.FolderSession : Geary.Imap.SessionObject {
// References header will be present if REFERENCES were required, which is why
// REFERENCES is set at the bottom of the method, when all information has been gathered
if (message_id == null) {
- message_id = unflatten_message_id(headers.get("Message-ID"));
+ message_id = unflatten_message_id(
+ headers.get("Message-ID")
+ );
}
if (in_reply_to == null) {
in_reply_to = unflatten_message_id_list(
@@ -958,13 +963,13 @@ private class Geary.Imap.FolderSession : Geary.Imap.SessionObject {
}
// SUBJECT
- // Unlike DATE, allow for empty subjects
if (required_but_not_set(Geary.Email.Field.SUBJECT, required_fields, email)) {
+ RFC822.Subject? subject = null;
string? value = headers.get("Subject");
- if (value != null)
- email.set_message_subject(new RFC822.Subject.from_rfc822_string(value));
- else
- email.set_message_subject(null);
+ if (value != null) {
+ subject = new RFC822.Subject.from_rfc822_string(value);
+ }
+ email.set_message_subject(subject);
}
}
@@ -983,12 +988,11 @@ private class Geary.Imap.FolderSession : Geary.Imap.SessionObject {
preview_specifier
);
+ RFC822.PreviewText? preview = null;
if (preview_headers != null && preview_headers.size > 0 &&
preview_body != null && preview_body.size > 0) {
- email.set_message_preview(
- new RFC822.PreviewText.with_header(
- preview_headers, preview_body
- )
+ preview = new RFC822.PreviewText.with_header(
+ preview_headers, preview_body
);
} else {
warning("No preview specifiers \"%s\" and \"%s\" found",
@@ -996,6 +1000,7 @@ private class Geary.Imap.FolderSession : Geary.Imap.SessionObject {
foreach (FetchBodyDataSpecifier specifier in fetched_data.body_data_map.keys)
warning(" - has %s", specifier.to_string());
}
+ email.set_message_preview(preview);
}
// If body was requested, get it now. We also set the preview
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]