File indexing completed on 2025-02-02 05:02:28

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef HEALTHCERTIFICATEMANAGER_H
0008 #define HEALTHCERTIFICATEMANAGER_H
0009 
0010 #include <QAbstractListModel>
0011 
0012 #include <vector>
0013 
0014 class QByteArray;
0015 
0016 /** Model/manager for digital vaccination certificates. */
0017 class HealthCertificateManager : public QAbstractListModel
0018 {
0019     Q_OBJECT
0020     Q_PROPERTY(bool isAvailable READ isAvailable CONSTANT)
0021 public:
0022     explicit HealthCertificateManager(QObject *parent = nullptr);
0023     ~HealthCertificateManager() override;
0024 
0025     /** Health certificate support is compiled in. */
0026     static bool isAvailable();
0027 
0028     bool importCertificate(const QByteArray &rawData);
0029     Q_INVOKABLE void removeCertificate(int row);
0030 
0031     enum {
0032         CertificateRole = Qt::UserRole,
0033         RawDataRole,
0034         StorageIdRole,
0035     };
0036 
0037     int rowCount(const QModelIndex &parent = {}) const override;
0038     QVariant data(const QModelIndex &index, int role) const override;
0039     QHash<int, QByteArray> roleNames() const override;
0040 
0041 Q_SIGNALS:
0042     void newCertificateLoaded(int index);
0043 
0044 private:
0045     struct CertData {
0046         QString name;
0047         QVariant cert;
0048     };
0049     static bool certLessThan(const CertData &lhs, const CertData &rhs);
0050 
0051     void loadCertificates();
0052     QByteArray certificateRawData(const CertData &certData) const;
0053 
0054     std::vector<CertData> m_certificates;
0055 };
0056 
0057 #endif // HEALTHCERTIFICATEMANAGER_H