File indexing completed on 2024-05-12 05:17:09

0001 // SPDX-FileCopyrightText: 2023 Claudio Cambra <claudio.cambra@kde.org>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 #pragma once
0005 
0006 #include "kidentitymanagementquick_export.h"
0007 
0008 #include <QModelIndex>
0009 #include <QObject>
0010 
0011 #include <KIdentityManagementCore/Identity>
0012 #include <KIdentityManagementQuick/CryptographyBackendInterface>
0013 #include <KIdentityManagementQuick/KeyListModelInterface>
0014 
0015 namespace KIdentityManagementQuick
0016 {
0017 /**
0018  * @brief The CryptographyEditorBackend class.
0019  *
0020  * Used by the QML interface to access cryptography-related data.
0021  * Note that since the CryptographyBackendInterface is an abstract class,
0022  * it is not accessible from QML. You will need to instantiate it in C++
0023  * and then feed it into the QML side of the editor with a valid backend
0024  * already set!
0025  */
0026 class KIDENTITYMANAGEMENTQUICK_EXPORT CryptographyEditorBackend : public QObject
0027 {
0028     Q_OBJECT
0029 
0030     Q_PROPERTY(KIdentityManagementCore::Identity identity READ identity WRITE setIdentity NOTIFY identityChanged)
0031     Q_PROPERTY(QAbstractItemModel *openPgpKeyListModel READ openPgpKeyListModel NOTIFY openPgpKeyListModelChanged)
0032     Q_PROPERTY(QAbstractItemModel *smimeKeyListModel READ smimeKeyListModel NOTIFY smimeKeyListModelChanged)
0033 
0034 public:
0035     explicit CryptographyEditorBackend(QObject *parent = nullptr, const CryptographyBackendInterfacePtr &backend = {});
0036 
0037     CryptographyBackendInterfacePtr cryptographyBackend() const;
0038     void setCryptographyBackend(const CryptographyBackendInterfacePtr &cryptographyBackend);
0039 
0040     QAbstractItemModel *openPgpKeyListModel() const;
0041     QAbstractItemModel *smimeKeyListModel() const;
0042 
0043     KIdentityManagementCore::Identity identity() const;
0044     void setIdentity(const KIdentityManagementCore::Identity &identity);
0045 
0046     Q_INVOKABLE QModelIndex indexForIdentity(QAbstractItemModel *model, const KIdentityManagementCore::Identity &identity, const KeyUseTypes::KeyUse keyUse);
0047 
0048     Q_INVOKABLE static QString stringFromKeyByteArray(const QByteArray &key);
0049 
0050 Q_SIGNALS:
0051     void cryptographyBackendChanged();
0052     void openPgpKeyListModelChanged();
0053     void smimeKeyListModelChanged();
0054     void identityChanged();
0055 
0056 private:
0057     CryptographyBackendInterfacePtr mCryptoBackend;
0058 };
0059 
0060 }