File indexing completed on 2024-05-12 15:44:26

0001 /*
0002     SPDX-FileCopyrightText: 2013 Martin Klapetek <mklapetek@kde.org>
0003     SPDX-FileCopyrightText: 2013 David Edmundson <davidedmundson@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include "basepersonsdatasource.h"
0009 
0010 #include "backends/abstractcontact.h"
0011 #include "defaultcontactmonitor_p.h"
0012 
0013 using namespace KPeople;
0014 
0015 class KPeople::BasePersonsDataSourcePrivate
0016 {
0017 public:
0018     QWeakPointer<AllContactsMonitor> m_allContactsMonitor;
0019     QHash<QString, QWeakPointer<ContactMonitor>> m_contactMonitors;
0020 };
0021 
0022 BasePersonsDataSource::BasePersonsDataSource(QObject *parent, const QVariantList &args)
0023     : QObject(parent)
0024     , d_ptr(new BasePersonsDataSourcePrivate)
0025 {
0026     Q_UNUSED(args)
0027 }
0028 
0029 BasePersonsDataSource::~BasePersonsDataSource()
0030 {
0031     delete d_ptr;
0032 }
0033 
0034 AllContactsMonitorPtr BasePersonsDataSource::allContactsMonitor()
0035 {
0036     Q_D(BasePersonsDataSource);
0037 
0038     // if there is currently no watcher, create one
0039     AllContactsMonitorPtr c = d->m_allContactsMonitor.toStrongRef();
0040     if (!c) {
0041         c = AllContactsMonitorPtr(createAllContactsMonitor());
0042         d->m_allContactsMonitor = c;
0043     }
0044 
0045     return c;
0046 }
0047 
0048 ContactMonitorPtr BasePersonsDataSource::contactMonitor(const QString &contactUri)
0049 {
0050     Q_D(BasePersonsDataSource);
0051 
0052     ContactMonitorPtr c = d->m_contactMonitors[contactUri].toStrongRef();
0053     if (!c) {
0054         c = ContactMonitorPtr(createContactMonitor(contactUri));
0055         d->m_contactMonitors[contactUri] = c;
0056     }
0057     return c;
0058 }
0059 
0060 ContactMonitor *BasePersonsDataSource::createContactMonitor(const QString &contactUri)
0061 {
0062     return new DefaultContactMonitor(contactUri, allContactsMonitor());
0063 }
0064 
0065 BasePersonsDataSourceV2::BasePersonsDataSourceV2(QObject *parent, const QVariantList &args)
0066     : BasePersonsDataSource(parent, args)
0067 {
0068 }
0069 
0070 #include "moc_basepersonsdatasource.cpp"