diff options
| author | Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> | 2022-05-06 22:09:50 +0300 |
|---|---|---|
| committer | Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> | 2022-05-06 22:17:53 +0300 |
| commit | 4fc05261ce7edf2a67f455bdff02a023ea90f9b6 (patch) | |
| tree | 3f58d1820138510f797bc0e56baf477b392fc57a | |
| parent | da8489d0f6bb15d14fba3cc9cf4de50eb9b1fbde (diff) | |
message: implement rfc2047-encoding addresses
For address names with commas, quotes etc.
| -rw-r--r-- | lib/message/mu-mime-object.cc | 21 | ||||
| -rw-r--r-- | lib/message/mu-mime-object.hh | 14 | ||||
| -rw-r--r-- | mu/mu-cmd-cfind.cc | 2 |
3 files changed, 34 insertions, 3 deletions
diff --git a/lib/message/mu-mime-object.cc b/lib/message/mu-mime-object.cc index 6930264..d0fceaf 100644 --- a/lib/message/mu-mime-object.cc +++ b/lib/message/mu-mime-object.cc @@ -64,6 +64,23 @@ Mu::init_gmime(void) } +std::string +Mu::address_rfc2047(const Contact& contact) +{ + init_gmime(); + + InternetAddress *addr = + internet_address_mailbox_new(contact.name.c_str(), + contact.email.c_str()); + + std::string encoded = to_string_gchar( + internet_address_to_string(addr, {}, true)); + + g_object_unref(addr); + + return encoded; +} + /* * MimeObject @@ -602,8 +619,8 @@ MimeMultipartSigned::verify(const MimeCryptoContext& ctx, VerifyFlags vflags) co std::vector<MimeSignature> sigs; for (auto i = 0; i != g_mime_signature_list_length(siglist); ++i) { - GMimeSignature *sig = g_mime_signature_list_get_signature(siglist, i); - sigs.emplace_back(MimeSignature(sig)); + GMimeSignature *msig = g_mime_signature_list_get_signature(siglist, i); + sigs.emplace_back(MimeSignature(msig)); } g_object_unref(siglist); diff --git a/lib/message/mu-mime-object.hh b/lib/message/mu-mime-object.hh index 14475cf..e8f3cbd 100644 --- a/lib/message/mu-mime-object.hh +++ b/lib/message/mu-mime-object.hh @@ -45,6 +45,16 @@ using MimeFormatOptions = deletable_unique_ptr<GMimeFormatOptions, g_mime_format */ void init_gmime(void); + +/** + * Get a RFC2047-compatible address for the given contact + * + * @param contact a contact + * + * @return an address string + */ +std::string address_rfc2047(const Contact& contact); + class Object { public: /** @@ -160,6 +170,10 @@ private: mutable GObject *self_{}; }; + + + + /** * Thin wrapper around a GMimeContentType diff --git a/mu/mu-cmd-cfind.cc b/mu/mu-cmd-cfind.cc index be85837..9e5cce0 100644 --- a/mu/mu-cmd-cfind.cc +++ b/mu/mu-cmd-cfind.cc @@ -322,7 +322,7 @@ each_contact(const Mu::Contact& ci, ECData& ecdata) "\tlast-seen: %s\n", ci.email.c_str(), ci.name.empty() ? "<none>" : ci.name.c_str(), - ci.display_name().c_str(), + ci.display_name(true).c_str(), ci.personal ? "yes" : "no", ci.frequency, datebuf); |
