File indexing completed on 2024-04-21 15:02:45

0001 /*
0002     SPDX-FileCopyrightText: 2013 David Edmundson <davidedmundson@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "fakecontactsource.h"
0008 
0009 FakeContactSource::FakeContactSource(QObject *parent, const QVariantList &args)
0010     : BasePersonsDataSource(parent, args)
0011 {
0012 }
0013 
0014 QString FakeContactSource::sourcePluginId() const
0015 {
0016     return QStringLiteral("fakesource://");
0017 }
0018 
0019 KPeople::AllContactsMonitor *FakeContactSource::createAllContactsMonitor()
0020 {
0021     return new FakeAllContactsMonitor();
0022 }
0023 
0024 void FakeContactSource::changeProperty(const QString &key, const QVariant &value)
0025 {
0026     qobject_cast<FakeAllContactsMonitor *>(allContactsMonitor().data())->changeProperty(key, value);
0027 }
0028 
0029 void FakeContactSource::remove(const QString &uri)
0030 {
0031     qobject_cast<FakeAllContactsMonitor *>(allContactsMonitor().data())->remove(uri);
0032 }
0033 
0034 //----------------------------------------------------------------------------
0035 
0036 class FakeContact : public KPeople::AbstractContact
0037 {
0038 public:
0039     FakeContact(const QVariantMap &props)
0040         : m_properties(props)
0041     {
0042     }
0043 
0044     QVariant customProperty(const QString &key) const override
0045     {
0046         if (key.startsWith(QLatin1String("all-"))) {
0047             return QStringList(m_properties[key.mid(4)].toString());
0048         } else {
0049             return m_properties[key];
0050         }
0051     }
0052 
0053     QVariantMap m_properties;
0054 };
0055 
0056 FakeAllContactsMonitor::FakeAllContactsMonitor()
0057     : m_contacts(
0058         {{QStringLiteral("fakesource://contact1"),
0059           KPeople::AbstractContact::Ptr(new FakeContact(QVariantMap{{KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 1")},
0060                                                                     {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact1@example.com")}}))},
0061 
0062          {QStringLiteral("fakesource://contact2"),
0063           KPeople::AbstractContact::Ptr(new FakeContact(QVariantMap{{KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 2")},
0064                                                                     {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact2@example.com")},
0065                                                                     {KPeople::AbstractContact::PhoneNumberProperty, QStringLiteral("+1 234 567 890")}}))},
0066 
0067          {QStringLiteral("fakesource://contact3"),
0068           KPeople::AbstractContact::Ptr(new FakeContact(QVariantMap{{KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 3")},
0069                                                                     {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact3@example.com")},
0070                                                                     {KPeople::AbstractContact::PhoneNumberProperty, QStringLiteral("+34 666 777 999")}}))},
0071 
0072          {QStringLiteral("fakesource://contact4"),
0073           KPeople::AbstractContact::Ptr(new FakeContact(QVariantMap{{KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 4")},
0074                                                                     {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact4@example.com")},
0075                                                                     {KPeople::AbstractContact::PresenceProperty, QStringLiteral("online")}}))}})
0076 {
0077     emitInitialFetchComplete(true);
0078 }
0079 
0080 void FakeAllContactsMonitor::remove(const QString &uri)
0081 {
0082     m_contacts.remove(uri);
0083     Q_EMIT contactRemoved(uri);
0084 }
0085 
0086 QMap<QString, KPeople::AbstractContact::Ptr> FakeAllContactsMonitor::contacts()
0087 {
0088     return m_contacts;
0089 }
0090 
0091 void FakeAllContactsMonitor::changeProperty(const QString &key, const QVariant &value)
0092 {
0093     KPeople::AbstractContact::Ptr contact1 = contacts()[QStringLiteral("fakesource://contact1")];
0094     static_cast<FakeContact *>(contact1.data())->m_properties[key] = value;
0095     Q_ASSERT(contact1->customProperty(key) == value);
0096 
0097     Q_EMIT contactChanged(QStringLiteral("fakesource://contact1"), contact1);
0098 }
0099 
0100 #include "moc_fakecontactsource.cpp"