Warning, file /plasma-mobile/spacebar/lib/telephonySupport/avatarimageprovider.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im>
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #include "avatarimageprovider.h"
0006 
0007 #include <KPeople/PersonData>
0008 #include <KPeopleBackend/AbstractContact>
0009 
0010 #include <phonenumber.h>
0011 
0012 #include "contactphonenumbermapper.h"
0013 
0014 AvatarImageProvider::AvatarImageProvider()
0015     : QQuickImageProvider(QQuickImageProvider::ImageType::Image)
0016 {
0017 }
0018 
0019 QImage AvatarImageProvider::requestImage(const QString &number, QSize *size, const QSize &requestedSize)
0020 {
0021     const auto personData = KPeople::PersonData(ContactPhoneNumberMapper::instance().uriForNumber(PhoneNumber(number)));
0022 
0023     auto avatar = [&]() -> QImage {
0024         QVariant pic = personData.contactCustomProperty(KPeople::AbstractContact::PictureProperty);
0025 
0026         if (pic.canConvert<QImage>()) {
0027             return pic.value<QImage>();
0028         } else if (pic.canConvert<QUrl>()) {
0029             QImage image;
0030             image.load(pic.toUrl().toLocalFile());
0031             return image;
0032         } else {
0033             return {};
0034         }
0035     }();
0036     if (avatar.isNull()) {
0037         return {};
0038     }
0039 
0040     if (avatar.size().height() > requestedSize.height()) {
0041         avatar = avatar.scaledToHeight(requestedSize.height());
0042     } else if (avatar.size().width() > requestedSize.width()) {
0043         avatar = avatar.scaledToWidth(requestedSize.width());
0044     }
0045 
0046     if (!avatar.isNull()) {
0047         size->setHeight(avatar.size().height());
0048         size->setWidth(avatar.size().width());
0049     }
0050 
0051     return avatar;
0052 }