diff --git a/src/seasidecache.cpp b/src/seasidecache.cpp index 2a3d13d..44913c3 100644 --- a/src/seasidecache.cpp +++ b/src/seasidecache.cpp @@ -1024,19 +1024,35 @@ void SeasideCache::contactDataChanged(quint32 iid, FilterType filter) bool SeasideCache::removeContact(const QContact &contact) { - QContactId id = apiId(contact); - if (!validId(id)) - return false; + return removeContacts(QList() << contact); +} + +bool SeasideCache::removeContacts(const QList &contacts) +{ + bool allSucceeded = true; + QSet modifiedDisplayLabelGroups; + for (const QContact &contact : contacts) { + const QContactId id = apiId(contact); + if (!validId(id)) { + allSucceeded = false; + continue; + } - instancePtr->m_contactsToRemove.append(id); + instancePtr->m_contactsToRemove.append(id); - quint32 iid = internalId(id); - instancePtr->removeContactData(iid, FilterFavorites); - instancePtr->removeContactData(iid, FilterOnline); - instancePtr->removeContactData(iid, FilterAll); + quint32 iid = internalId(id); + instancePtr->removeContactData(iid, FilterFavorites); + instancePtr->removeContactData(iid, FilterOnline); + instancePtr->removeContactData(iid, FilterAll); + const QString group(displayLabelGroup(existingItem(iid))); + instancePtr->removeFromContactDisplayLabelGroup(iid, group, &modifiedDisplayLabelGroups); + } + + instancePtr->notifyDisplayLabelGroupsChanged(modifiedDisplayLabelGroups); + instancePtr->updateSectionBucketIndexCaches(); instancePtr->requestUpdate(); - return true; + return allSucceeded; } void SeasideCache::removeContactData(quint32 iid, FilterType filter) @@ -1051,13 +1067,6 @@ void SeasideCache::removeContactData(quint32 iid, FilterType filter) m_contacts[filter].removeAt(row); - if (filter == FilterAll) { - const QString group(displayLabelGroup(existingItem(iid))); - QSet modifiedDisplayLabelGroups; - removeFromContactDisplayLabelGroup(iid, group, &modifiedDisplayLabelGroups); - notifyDisplayLabelGroupsChanged(modifiedDisplayLabelGroups); - } - for (int i = 0; i < models.count(); ++i) models.at(i)->sourceItemsRemoved(); } @@ -1913,6 +1922,8 @@ bool SeasideCache::event(QEvent *event) m_people.erase(cacheItem); } } + + updateSectionBucketIndexCaches(); } } return true; diff --git a/src/seasidecache.h b/src/seasidecache.h index 4eb8d37..9329d67 100644 --- a/src/seasidecache.h +++ b/src/seasidecache.h @@ -308,6 +308,7 @@ class CONTACTCACHE_EXPORT SeasideCache : public QObject static bool saveContact(const QContact &contact); static bool removeContact(const QContact &contact); + static bool removeContacts(const QList &contacts); static void aggregateContacts(const QContact &contact1, const QContact &contact2); static void disaggregateContacts(const QContact &contact1, const QContact &contact2);