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

0001 // SPDX-FileCopyrightText: 2016 Christian Mollekopf <mollekopf@kolabsys.com>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 #pragma once
0005 
0006 #include <QObject>
0007 
0008 #include <QAbstractItemModel>
0009 #include <QModelIndex>
0010 
0011 #include <memory>
0012 
0013 namespace MimeTreeParser
0014 {
0015 class ObjectTreeParser;
0016 }
0017 class PartModelPrivate;
0018 
0019 class PartModel : public QAbstractItemModel
0020 {
0021     Q_OBJECT
0022     Q_PROPERTY(bool showHtml READ showHtml WRITE setShowHtml NOTIFY showHtmlChanged)
0023     Q_PROPERTY(bool containsHtml READ containsHtml NOTIFY containsHtmlChanged)
0024     Q_PROPERTY(bool trimMail READ trimMail WRITE setTrimMail NOTIFY trimMailChanged)
0025     Q_PROPERTY(bool isTrimmed READ isTrimmed NOTIFY trimMailChanged)
0026 public:
0027     PartModel(std::shared_ptr<MimeTreeParser::ObjectTreeParser> parser);
0028     ~PartModel();
0029 
0030     static std::pair<QString, bool> trim(const QString &text);
0031 
0032 public:
0033     enum Roles {
0034         TypeRole = Qt::UserRole + 1,
0035         ContentRole,
0036         IsEmbeddedRole,
0037         IsEncryptedRole,
0038         IsSignedRole,
0039         IsErrorRole,
0040         SecurityLevelRole,
0041         EncryptionSecurityLevelRole,
0042         SignatureSecurityLevelRole,
0043         SignatureDetails,
0044         EncryptionDetails,
0045         ErrorType,
0046         ErrorString,
0047         SenderRole,
0048         DateRole
0049     };
0050 
0051     QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
0052     QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
0053     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
0054     QModelIndex parent(const QModelIndex &index) const Q_DECL_OVERRIDE;
0055     int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
0056     int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
0057 
0058     void setShowHtml(bool html);
0059     bool showHtml() const;
0060     bool containsHtml() const;
0061 
0062     void setTrimMail(bool trim);
0063     bool trimMail() const;
0064     bool isTrimmed() const;
0065 
0066 Q_SIGNALS:
0067     void showHtmlChanged();
0068     void trimMailChanged();
0069     void containsHtmlChanged();
0070 
0071 private:
0072     std::unique_ptr<PartModelPrivate> d;
0073 };
0074 
0075 class SignatureInfo : public QObject
0076 {
0077     Q_OBJECT
0078     Q_PROPERTY(QByteArray keyId MEMBER keyId CONSTANT)
0079     Q_PROPERTY(bool keyMissing MEMBER keyMissing CONSTANT)
0080     Q_PROPERTY(bool keyRevoked MEMBER keyRevoked CONSTANT)
0081     Q_PROPERTY(bool keyExpired MEMBER keyExpired CONSTANT)
0082     Q_PROPERTY(bool sigExpired MEMBER sigExpired CONSTANT)
0083     Q_PROPERTY(bool crlMissing MEMBER crlMissing CONSTANT)
0084     Q_PROPERTY(bool crlTooOld MEMBER crlTooOld CONSTANT)
0085 
0086     Q_PROPERTY(QString signer MEMBER signer CONSTANT)
0087     Q_PROPERTY(QStringList signerMailAddresses MEMBER signerMailAddresses CONSTANT)
0088     Q_PROPERTY(bool signatureIsGood MEMBER signatureIsGood CONSTANT)
0089     Q_PROPERTY(bool keyIsTrusted MEMBER keyIsTrusted CONSTANT)
0090 
0091 public:
0092     bool keyRevoked = false;
0093     bool keyExpired = false;
0094     bool sigExpired = false;
0095     bool keyMissing = false;
0096     bool crlMissing = false;
0097     bool crlTooOld = false;
0098     QByteArray keyId;
0099 
0100     QString signer;
0101     QStringList signerMailAddresses;
0102     bool signatureIsGood = false;
0103     bool keyIsTrusted = false;
0104 };