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