File: avatarimageprovider.cpp

package info (click to toggle)
spacebar 1%3A6.5.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,448 kB
  • sloc: cpp: 4,708; xml: 293; sql: 22; makefile: 3; sh: 1
file content (52 lines) | stat: -rw-r--r-- 1,555 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im>
//
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL

#include "avatarimageprovider.h"

#include <KPeople/PersonData>
#include <KPeopleBackend/AbstractContact>

#include <phonenumber.h>

#include "contactphonenumbermapper.h"

AvatarImageProvider::AvatarImageProvider()
    : QQuickImageProvider(QQuickImageProvider::ImageType::Image)
{
}

QImage AvatarImageProvider::requestImage(const QString &number, QSize *size, const QSize &requestedSize)
{
    const auto personData = KPeople::PersonData(ContactPhoneNumberMapper::instance().uriForNumber(PhoneNumber(number)));

    auto avatar = [&]() -> QImage {
        QVariant pic = personData.contactCustomProperty(KPeople::AbstractContact::PictureProperty);

        if (pic.canConvert<QImage>()) {
            return pic.value<QImage>();
        } else if (pic.canConvert<QUrl>()) {
            QImage image;
            image.load(pic.toUrl().toLocalFile());
            return image;
        } else {
            return {};
        }
    }();
    if (avatar.isNull()) {
        return {};
    }

    if (avatar.size().height() > requestedSize.height()) {
        avatar = avatar.scaledToHeight(requestedSize.height());
    } else if (avatar.size().width() > requestedSize.width()) {
        avatar = avatar.scaledToWidth(requestedSize.width());
    }

    if (!avatar.isNull()) {
        size->setHeight(avatar.size().height());
        size->setWidth(avatar.size().width());
    }

    return avatar;
}