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 }