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 }