summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDirk-Jan C. Binnema <djcb@djcbsoftware.nl>2022-05-06 22:09:50 +0300
committerDirk-Jan C. Binnema <djcb@djcbsoftware.nl>2022-05-06 22:17:53 +0300
commit4fc05261ce7edf2a67f455bdff02a023ea90f9b6 (patch)
tree3f58d1820138510f797bc0e56baf477b392fc57a
parentda8489d0f6bb15d14fba3cc9cf4de50eb9b1fbde (diff)
message: implement rfc2047-encoding addresses
For address names with commas, quotes etc.
-rw-r--r--lib/message/mu-mime-object.cc21
-rw-r--r--lib/message/mu-mime-object.hh14
-rw-r--r--mu/mu-cmd-cfind.cc2
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);