File indexing completed on 2024-05-19 05:28:10
0001 // SPDX-FileCopyrightText: 2013 David Edmundson <davidedmundson@kde.org> 0002 // 0003 // SPDX-License-Identifier: LGPL-2.1-or-later 0004 0005 #include "fake-contact-source.h" 0006 0007 #include <QDebug> 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 class FakeContact : public KPeople::AbstractContact 0035 { 0036 public: 0037 FakeContact(const QVariantMap &props) 0038 : _properties(props) 0039 { 0040 } 0041 0042 QVariant customProperty(const QString &key) const override 0043 { 0044 if (key == KPeople::AbstractContact::AllPhoneNumbersProperty) { 0045 const QStringList allNumbers = _properties[KPeople::AbstractContact::AllPhoneNumbersProperty].toStringList(); 0046 0047 if (allNumbers.isEmpty()) { 0048 return _properties[KPeople::AbstractContact::PhoneNumberProperty]; 0049 } 0050 0051 return _properties[KPeople::AbstractContact::AllPhoneNumbersProperty]; 0052 } 0053 0054 if (key.startsWith(QLatin1String("all-"))) { 0055 return QStringList(_properties[key.mid(4)].toString()); 0056 } else { 0057 return _properties[key]; 0058 } 0059 } 0060 0061 QVariantMap _properties; 0062 }; 0063 0064 FakeAllContactsMonitor::FakeAllContactsMonitor() 0065 { 0066 // clang-format off 0067 _contacts.insert( 0068 QStringLiteral("fakesource://contact1"), 0069 KPeople::AbstractContact::Ptr(new FakeContact({ 0070 {KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 1")}, 0071 {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact1@example.com")} 0072 })) 0073 ); 0074 0075 _contacts.insert( 0076 QStringLiteral("fakesource://contact2"), 0077 KPeople::AbstractContact::Ptr(new FakeContact({ 0078 {KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 2")}, 0079 {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact2@example.com")}, 0080 {KPeople::AbstractContact::PhoneNumberProperty, QStringLiteral("+1 234 567 890")} 0081 })) 0082 ); 0083 0084 _contacts.insert( 0085 QStringLiteral("fakesource://contact3"), 0086 KPeople::AbstractContact::Ptr(new FakeContact({{KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 3")}, 0087 {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact3@example.com")}, 0088 {KPeople::AbstractContact::PhoneNumberProperty, QStringLiteral("+46 666 777 999")} 0089 })) 0090 ); 0091 0092 _contacts.insert( 0093 QStringLiteral("fakesource://contact4"), 0094 KPeople::AbstractContact::Ptr(new FakeContact({ 0095 {KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 4")}, 0096 {KPeople::AbstractContact::EmailProperty, QStringLiteral("contact4@example.com")}, 0097 {KPeople::AbstractContact::AllPhoneNumbersProperty, QStringList{QStringLiteral("+46-111-111-111")}} 0098 })) 0099 ); 0100 0101 _contacts.insert( 0102 QStringLiteral("fakesource://contact5"), 0103 KPeople::AbstractContact::Ptr(new FakeContact({ 0104 {KPeople::AbstractContact::NameProperty, QStringLiteral("Contact 5")}, 0105 {KPeople::AbstractContact::AllPhoneNumbersProperty, QVariantList{QStringLiteral("+46 111 222 333"), QStringLiteral("0 333 222 111")}} 0106 })) 0107 ); 0108 0109 _contacts.insert( 0110 QStringLiteral("fakesource://contact6"), 0111 KPeople::AbstractContact::Ptr(new FakeContact({ 0112 {KPeople::AbstractContact::NameProperty, QStringLiteral("Malory")}, 0113 {KPeople::AbstractContact::AllPhoneNumbersProperty, QVariantList{QStringLiteral("+46 111&222x333") /* Intentionally invalid */}} 0114 })) 0115 ); 0116 0117 // clang-format on 0118 0119 emitInitialFetchComplete(true); 0120 } 0121 0122 void FakeAllContactsMonitor::remove(const QString &uri) 0123 { 0124 _contacts.remove(uri); 0125 Q_EMIT contactRemoved(uri); 0126 } 0127 0128 QMap<QString, KPeople::AbstractContact::Ptr> FakeAllContactsMonitor::contacts() 0129 { 0130 return _contacts; 0131 } 0132 0133 void FakeAllContactsMonitor::changeProperty(const QString &key, const QVariant &value) 0134 { 0135 KPeople::AbstractContact::Ptr contact1 = contacts()[QStringLiteral("fakesource://contact1")]; 0136 static_cast<FakeContact *>(contact1.data())->_properties[key] = value; 0137 Q_ASSERT(contact1->customProperty(key) == value); 0138 0139 Q_EMIT contactChanged(QStringLiteral("fakesource://contact1"), contact1); 0140 }