Changeset View
Changeset View
Standalone View
Standalone View
src/personsmodel.cpp
Show First 20 Lines • Show All 90 Lines • ▼ Show 20 Line(s) | |||||
91 | 91 | | |||
92 | using namespace KPeople; | 92 | using namespace KPeople; | ||
93 | 93 | | |||
94 | PersonsModel::PersonsModel(QObject *parent): | 94 | PersonsModel::PersonsModel(QObject *parent): | ||
95 | QAbstractItemModel(parent), | 95 | QAbstractItemModel(parent), | ||
96 | d_ptr(new PersonsModelPrivate(this)) | 96 | d_ptr(new PersonsModelPrivate(this)) | ||
97 | { | 97 | { | ||
98 | Q_D(PersonsModel); | 98 | Q_D(PersonsModel); | ||
99 | 99 | const auto listPlugins = PersonPluginManager::dataSourcePlugins(); | |||
100 | Q_FOREACH (BasePersonsDataSource *dataSource, PersonPluginManager::dataSourcePlugins()) { | 100 | for (BasePersonsDataSource *dataSource : listPlugins) { | ||
101 | const AllContactsMonitorPtr monitor = dataSource->allContactsMonitor(); | 101 | const AllContactsMonitorPtr monitor = dataSource->allContactsMonitor(); | ||
102 | if (monitor->isInitialFetchComplete()) { | 102 | if (monitor->isInitialFetchComplete()) { | ||
103 | QMetaObject::invokeMethod(d, "onMonitorInitialFetchComplete", Qt::QueuedConnection, Q_ARG(bool, monitor->initialFetchSuccess())); | 103 | QMetaObject::invokeMethod(d, "onMonitorInitialFetchComplete", Qt::QueuedConnection, Q_ARG(bool, monitor->initialFetchSuccess())); | ||
104 | } else { | 104 | } else { | ||
105 | connect(monitor.data(), &AllContactsMonitor::initialFetchComplete, | 105 | connect(monitor.data(), &AllContactsMonitor::initialFetchComplete, | ||
106 | d, &PersonsModelPrivate::onMonitorInitialFetchComplete); | 106 | d, &PersonsModelPrivate::onMonitorInitialFetchComplete); | ||
107 | } | 107 | } | ||
108 | d->m_sourceMonitors << monitor; | 108 | d->m_sourceMonitors << monitor; | ||
▲ Show 20 Lines • Show All 147 Lines • ▼ Show 20 Line(s) | 247 | { | |||
256 | } | 256 | } | ||
257 | } | 257 | } | ||
258 | 258 | | |||
259 | void PersonsModelPrivate::onContactsFetched() | 259 | void PersonsModelPrivate::onContactsFetched() | ||
260 | { | 260 | { | ||
261 | QMap<QString, AbstractContact::Ptr> addresseeMap; | 261 | QMap<QString, AbstractContact::Ptr> addresseeMap; | ||
262 | 262 | | |||
263 | //fetch all already loaded contacts from plugins | 263 | //fetch all already loaded contacts from plugins | ||
264 | Q_FOREACH (const AllContactsMonitorPtr &contactWatcher, m_sourceMonitors) { | 264 | for (const AllContactsMonitorPtr &contactWatcher : qAsConst(m_sourceMonitors)) { | ||
265 | addresseeMap.unite(contactWatcher->contacts()); | 265 | addresseeMap.unite(contactWatcher->contacts()); | ||
266 | } | 266 | } | ||
267 | 267 | | |||
268 | //add metacontacts | 268 | //add metacontacts | ||
269 | const QMultiHash<QString, QString> contactMapping = PersonManager::instance()->allPersons(); | 269 | const QMultiHash<QString, QString> contactMapping = PersonManager::instance()->allPersons(); | ||
270 | 270 | | |||
271 | Q_FOREACH (const QString &key, contactMapping.uniqueKeys()) { | 271 | for (const QString &key : contactMapping.uniqueKeys()) { | ||
272 | QMap<QString, AbstractContact::Ptr> contacts; | 272 | QMap<QString, AbstractContact::Ptr> contacts; | ||
273 | Q_FOREACH (const QString &contact, contactMapping.values(key)) { | 273 | for (const QString &contact : contactMapping.values(key)) { | ||
274 | contactToPersons[contact] = key; | 274 | contactToPersons[contact] = key; | ||
275 | AbstractContact::Ptr ptr = addresseeMap.take(contact); | 275 | AbstractContact::Ptr ptr = addresseeMap.take(contact); | ||
276 | if (ptr) { | 276 | if (ptr) { | ||
277 | contacts[contact] = ptr; | 277 | contacts[contact] = ptr; | ||
278 | } | 278 | } | ||
279 | } | 279 | } | ||
280 | if (!contacts.isEmpty()) { | 280 | if (!contacts.isEmpty()) { | ||
281 | addPerson(MetaContact(key, contacts)); | 281 | addPerson(MetaContact(key, contacts)); | ||
282 | } | 282 | } | ||
283 | } | 283 | } | ||
284 | 284 | | |||
285 | //add remaining contacts | 285 | //add remaining contacts | ||
286 | QMap<QString, AbstractContact::Ptr>::const_iterator i; | 286 | QMap<QString, AbstractContact::Ptr>::const_iterator i; | ||
287 | for (i = addresseeMap.constBegin(); i != addresseeMap.constEnd(); ++i) { | 287 | for (i = addresseeMap.constBegin(); i != addresseeMap.constEnd(); ++i) { | ||
288 | addPerson(MetaContact(i.key(), i.value())); | 288 | addPerson(MetaContact(i.key(), i.value())); | ||
289 | } | 289 | } | ||
290 | 290 | | |||
291 | Q_FOREACH (const AllContactsMonitorPtr monitor, m_sourceMonitors) { | 291 | for (const AllContactsMonitorPtr monitor : qAsConst(m_sourceMonitors)) { | ||
292 | connect(monitor.data(), &AllContactsMonitor::contactAdded, this, &PersonsModelPrivate::onContactAdded); | 292 | connect(monitor.data(), &AllContactsMonitor::contactAdded, this, &PersonsModelPrivate::onContactAdded); | ||
293 | connect(monitor.data(), &AllContactsMonitor::contactChanged, this, &PersonsModelPrivate::onContactChanged); | 293 | connect(monitor.data(), &AllContactsMonitor::contactChanged, this, &PersonsModelPrivate::onContactChanged); | ||
294 | connect(monitor.data(), &AllContactsMonitor::contactRemoved, this, &PersonsModelPrivate::onContactRemoved); | 294 | connect(monitor.data(), &AllContactsMonitor::contactRemoved, this, &PersonsModelPrivate::onContactRemoved); | ||
295 | } | 295 | } | ||
296 | } | 296 | } | ||
297 | 297 | | |||
298 | void PersonsModelPrivate::onContactAdded(const QString &contactUri, const AbstractContact::Ptr &contact) | 298 | void PersonsModelPrivate::onContactAdded(const QString &contactUri, const AbstractContact::Ptr &contact) | ||
299 | { | 299 | { | ||
▲ Show 20 Lines • Show All 199 Lines • Show Last 20 Lines |