File indexing completed on 2024-04-28 16:42:52
0001 // SPDX-FileCopyrightText: 2021 Alexey Andreyev <aa13q@ya.ru> 0002 // 0003 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 0004 0005 #include "declarative-contact-utils.h" 0006 0007 #include <KContacts/VCardConverter> 0008 #include <KPeopleBackend/AbstractContact> 0009 #include <KPeople/PersonData> 0010 0011 #include "callutilsinterface.h" 0012 0013 template<typename T> 0014 static QVariantList toVariantList(const QVector<T> &v) 0015 { 0016 QVariantList l; 0017 l.reserve(v.size()); 0018 std::transform(v.begin(), v.end(), std::back_inserter(l), [](const T &elem) { 0019 return QVariant::fromValue(elem); 0020 }); 0021 return l; 0022 } 0023 0024 const static KContacts::VCardConverter converter; 0025 0026 static QSharedPointer<KPeople::PersonData> contactData(const QString &uri) 0027 { 0028 return QSharedPointer<KPeople::PersonData>(new KPeople::PersonData(uri)); 0029 } 0030 0031 DeclarativeContactUtils::DeclarativeContactUtils(QObject *parent) 0032 : org::kde::telephony::ContactUtils(QString::fromLatin1(staticInterfaceName()), 0033 QStringLiteral("/org/kde/telephony/ContactUtils/tel/mm"), 0034 QDBusConnection::sessionBus(), 0035 parent) 0036 { 0037 if (!isValid()) { 0038 qDebug() << Q_FUNC_INFO << "Could not initiate ContactUtils interface"; 0039 return; 0040 } 0041 } 0042 0043 QString DeclarativeContactUtils::displayString(const QString &contact) 0044 { 0045 QString result = contact; 0046 QDBusPendingReply<QString> reply = org::kde::telephony::ContactUtils::displayString(contact); 0047 reply.waitForFinished(); 0048 if (reply.isError()) { 0049 qDebug() << Q_FUNC_INFO << reply.error(); 0050 } else { 0051 result = reply; 0052 } 0053 return result; 0054 } 0055 0056 QVariantList DeclarativeContactUtils::phoneNumbers(const QString &kPeopleUri) 0057 { 0058 auto person = contactData(kPeopleUri); 0059 auto vcard = person->contactCustomProperty(KPeople::AbstractContact::VCardProperty).toByteArray(); 0060 auto addressee = converter.parseVCard(vcard); 0061 0062 return toVariantList(addressee.phoneNumbers()); 0063 }