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"