File indexing completed on 2024-04-28 09:19:56

0001 /*
0002  *   SPDX-FileCopyrightText: 2021 Nicolas Fella <nicolas.fella@gmx.de>
0003  *
0004  *   SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "contactcontroller.h"
0008 
0009 #include <KContacts/VCardConverter>
0010 
0011 #include <KConfigGroup>
0012 #include <KWindowConfig>
0013 #include <QDebug>
0014 #include <QFileDialog>
0015 #include <QGuiApplication>
0016 #include <QQuickWindow>
0017 
0018 const static KContacts::VCardConverter converter;
0019 
0020 ContactController::ContactController()
0021     : m_dataResource(QStringLiteral("data"), KConfig::SimpleConfig, QStandardPaths::AppDataLocation)
0022 {
0023 }
0024 
0025 KContacts::Addressee ContactController::addresseeFromVCard(const QByteArray &vcard)
0026 {
0027     return converter.parseVCard(vcard);
0028 }
0029 
0030 QByteArray ContactController::addresseeToVCard(const KContacts::Addressee &addressee)
0031 {
0032     return converter.createVCard(addressee);
0033 }
0034 
0035 KContacts::Addressee ContactController::emptyAddressee()
0036 {
0037     return {};
0038 }
0039 
0040 KContacts::Picture ContactController::preparePhoto(const QUrl &path)
0041 {
0042 #ifdef Q_OS_ANDROID
0043     const QImage image(path.toString());
0044 #else
0045     const QImage image(path.toLocalFile());
0046 #endif
0047     // Scale the photo down to make sure contacts are not taking too
0048     // long time to load their photos
0049     constexpr int unscaledWidth = 200;
0050     const qreal scaleFactor = dynamic_cast<QGuiApplication *>(QCoreApplication::instance())->devicePixelRatio();
0051     const int avatarSize = int(unscaledWidth * scaleFactor);
0052     const QSize size(avatarSize, avatarSize);
0053 
0054     return KContacts::Picture(image.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation));
0055 }
0056 
0057 KContacts::Email ContactController::createEmail(const QString &email)
0058 {
0059     return KContacts::Email(email);
0060 }
0061 
0062 KContacts::PhoneNumber ContactController::createPhoneNumber(const QString &number)
0063 {
0064     return KContacts::PhoneNumber(number);
0065 }
0066 
0067 KContacts::Impp ContactController::createImpp(const QString &address)
0068 {
0069     return KContacts::Impp(QUrl(address));
0070 }
0071 
0072 void ContactController::saveWindowGeometry(QQuickWindow *window)
0073 {
0074     KConfigGroup windowGroup(&m_dataResource, QStringLiteral("Window"));
0075     KWindowConfig::saveWindowPosition(window, windowGroup);
0076     KWindowConfig::saveWindowSize(window, windowGroup);
0077     m_dataResource.sync();
0078 }
0079 
0080 QString ContactController::lastPersonUri() const
0081 {
0082     KConfigGroup stateGroup(&m_dataResource, QStringLiteral("State"));
0083     return stateGroup.readEntry(QStringLiteral("lastPersonUri"), QString());
0084 }
0085 
0086 void ContactController::setLastPersonUri(const QString &lastPersonUri)
0087 {
0088     KConfigGroup stateGroup(&m_dataResource, QStringLiteral("State"));
0089     stateGroup.writeEntry(QStringLiteral("lastPersonUri"), lastPersonUri);
0090     Q_EMIT lastPersonUriChanged();
0091     // dataResource.sync() is done in the saveWindowGeometry method onClosing
0092 }