File indexing completed on 2024-05-12 05:22:53

0001 /*
0002     test_keylister.cpp
0003 
0004     This file is part of libkleopatra's test suite.
0005     SPDX-FileCopyrightText: 2004 Klarälvdalens Datakonsult AB
0006 
0007     SPDX-License-Identifier: GPL-2.0-only
0008 */
0009 
0010 #include "test_keylister.h"
0011 
0012 #include <libkleo/formatting.h>
0013 
0014 #include <qgpgme/keylistjob.h>
0015 #include <qgpgme/protocol.h>
0016 
0017 #include <gpgme++/key.h>
0018 #include <gpgme++/keylistresult.h>
0019 
0020 #include <KAboutData>
0021 
0022 #include <QDebug>
0023 
0024 #include <QMessageBox>
0025 #include <QStringList>
0026 #include <QTimer>
0027 
0028 #include <KLocalizedString>
0029 #include <QApplication>
0030 #include <QCommandLineParser>
0031 #include <chrono>
0032 
0033 using namespace std::chrono_literals;
0034 
0035 namespace
0036 {
0037 class TestColumnStrategy : public Kleo::KeyListView::ColumnStrategy
0038 {
0039 public:
0040     ~TestColumnStrategy() override
0041     {
0042     }
0043     QString title(int col) const override;
0044     QString toolTip(const GpgME::Key &key, int col) const override;
0045     QString text(const GpgME::Key &key, int col) const override;
0046     QString accessibleText(const GpgME::Key &key, int col) const override;
0047 };
0048 
0049 QString TestColumnStrategy::title(int col) const
0050 {
0051     switch (col) {
0052     case 0:
0053         return QStringLiteral("Subject");
0054     case 1:
0055         return QStringLiteral("EMail");
0056     case 2:
0057         return QStringLiteral("Issuer");
0058     case 3:
0059         return QStringLiteral("Serial");
0060     case 4:
0061         return QStringLiteral("Protocol");
0062     case 5:
0063         return QStringLiteral("Validity");
0064     default:
0065         return QString();
0066     }
0067 }
0068 
0069 QString TestColumnStrategy::toolTip(const GpgME::Key &key, int) const
0070 {
0071     return QStringLiteral("Fingerprint: ") + QString::fromUtf8(key.primaryFingerprint());
0072 }
0073 
0074 QString TestColumnStrategy::text(const GpgME::Key &key, int col) const
0075 {
0076     if (key.isNull()) {
0077         return QStringLiteral("<null>");
0078     }
0079     switch (col) {
0080     case 0:
0081         return QString::fromUtf8(key.userID(0).id());
0082     case 1:
0083         return QString::fromUtf8(key.userID(0).email());
0084     case 2:
0085         return QString::fromUtf8(key.issuerName());
0086     case 3:
0087         return QString::fromLatin1(key.issuerSerial());
0088     case 4:
0089         return QString::fromLatin1(key.protocolAsString());
0090     case 5:
0091         return QString(QLatin1Char(key.userID(0).validityAsString()));
0092     default:
0093         return QString();
0094     }
0095 }
0096 
0097 QString TestColumnStrategy::accessibleText(const GpgME::Key &, int) const
0098 {
0099     return {};
0100 }
0101 }
0102 
0103 CertListView::CertListView(QWidget *parent, Qt::WindowFlags f)
0104     : Kleo::KeyListView(new TestColumnStrategy(), nullptr, parent, f)
0105 {
0106     setHierarchical(true);
0107     setRootIsDecorated(true);
0108 }
0109 
0110 CertListView::~CertListView()
0111 {
0112 }
0113 
0114 void CertListView::slotResult(const GpgME::KeyListResult &result)
0115 {
0116     qDebug() << "CertListView::slotResult()";
0117     if (result.isNull()) {
0118         QMessageBox::information(this, QStringLiteral("Key Listing Result"), QStringLiteral("KeyListResult is null!"));
0119     } else if (result.error()) {
0120         QMessageBox::critical(this,
0121                               QStringLiteral("Key Listing Result"),
0122                               QStringLiteral("KeyListResult Error: %1").arg(Kleo::Formatting::errorAsString(result.error())));
0123     } else if (result.isTruncated()) {
0124         QMessageBox::information(this, QStringLiteral("Key Listing Result"), QStringLiteral("KeyListResult is truncated!"));
0125     } else {
0126         QMessageBox::information(this, QStringLiteral("Key Listing Result"), QStringLiteral("Key listing successful"));
0127     }
0128 }
0129 
0130 void CertListView::slotStart()
0131 {
0132     qDebug() << "CertListView::slotStart()";
0133     QGpgME::KeyListJob *job = QGpgME::smime()->keyListJob(false);
0134     Q_ASSERT(job);
0135     QObject::connect(job, &QGpgME::KeyListJob::nextKey, this, &CertListView::slotAddKey);
0136     QObject::connect(job, &QGpgME::KeyListJob::result, this, &CertListView::slotResult);
0137 #if 0
0138     QStringList l;
0139     l << "Marc";
0140     job->start(l, false);
0141 #else
0142     job->start(QStringList(), false);
0143 #endif
0144 }
0145 
0146 int main(int argc, char **argv)
0147 {
0148     QApplication app(argc, argv);
0149     KAboutData aboutData(QStringLiteral("test_keylister"), i18n("KeyLister Test"), QStringLiteral("0.1"));
0150     QCommandLineParser parser;
0151     KAboutData::setApplicationData(aboutData);
0152     aboutData.setupCommandLine(&parser);
0153     parser.process(app);
0154     aboutData.processCommandLine(&parser);
0155 
0156     auto clv = new CertListView;
0157     clv->show();
0158 
0159     QTimer::singleShot(5s, clv, &CertListView::slotStart);
0160 
0161     return app.exec();
0162 }
0163 
0164 #include "moc_test_keylister.cpp"