From bb6d271a2339d21fde723780513db9c0bc25da19 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Sat, 30 Apr 2022 08:58:58 +0300 Subject: [PATCH] contacts-cache: handle 'personal' mail for groups When passing a vec of _all_ contacts for some message, mark _all_ of them as personal if at least _one_ is a personal address. --- lib/mu-contacts-cache.cc | 18 ++++++++++++++++-- lib/mu-contacts-cache.hh | 11 +++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/mu-contacts-cache.cc b/lib/mu-contacts-cache.cc index 7eba084d..0cc4e9ca 100644 --- a/lib/mu-contacts-cache.cc +++ b/lib/mu-contacts-cache.cc @@ -194,10 +194,10 @@ ContactsCache::add(Contact&& contact) if (it == priv_->contacts_.end()) { // completely new contact - contact.name = contact.name; + contact.name = contact.name; if (!contact.personal) contact.personal = is_personal(contact.email); - contact.tstamp = g_get_monotonic_time(); + contact.tstamp = g_get_monotonic_time(); auto email{contact.email}; // return priv_->contacts_.emplace(ContactUMap::value_type(email, std::move(contact))) @@ -219,6 +219,20 @@ ContactsCache::add(Contact&& contact) } } + +void +ContactsCache::add(Contacts&& contacts) +{ + const auto personal = seq_find_if(contacts,[&](auto&& c){ + return is_personal(c.email); }) != contacts.cend(); + + for (auto&& contact: contacts) { + contact.personal = personal; + add(std::move(contact)); + } +} + + const Contact* ContactsCache::_find(const std::string& email) const { diff --git a/lib/mu-contacts-cache.hh b/lib/mu-contacts-cache.hh index 1a6db7c3..b80cadc1 100644 --- a/lib/mu-contacts-cache.hh +++ b/lib/mu-contacts-cache.hh @@ -60,15 +60,14 @@ public: /** - * Add a contacts sequemce + * Add a contacts sequence; this should be used for the contacts of a + * specific message, and determines if it is a "personal" message: + * if any of the contacts matches one of the personal addresses, + * any of the senders/recipients are considered "personal" * * @param contacts a Contact object sequence - * */ - void add(Contacts&& contacts) { - for (auto&& contact: contacts) - add(std::move(contact)); - } + void add(Contacts&& contacts); /** * Clear all contacts