File indexing completed on 2024-06-16 04:55:59
0001 /* -*- mode: c++; c-basic-offset:4 -*- 0002 crypto/task.h 0003 0004 This file is part of Kleopatra, the KDE keymanager 0005 SPDX-FileCopyrightText: 2007 Klarälvdalens Datakonsult AB 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #pragma once 0011 0012 #include <QObject> 0013 #include <QString> 0014 0015 #include <utils/pimpl_ptr.h> 0016 0017 #include <gpgme++/global.h> 0018 0019 #include <QPointer> 0020 #include <memory> 0021 0022 namespace Kleo 0023 { 0024 class AuditLogEntry; 0025 } 0026 0027 namespace Kleo 0028 { 0029 namespace Crypto 0030 { 0031 0032 class Task : public QObject 0033 { 0034 Q_OBJECT 0035 public: 0036 explicit Task(QObject *parent = nullptr); 0037 ~Task() override; 0038 0039 class Result; 0040 0041 void setAsciiArmor(bool armor); 0042 bool asciiArmor() const; 0043 0044 virtual GpgME::Protocol protocol() const = 0; 0045 0046 void start(); 0047 0048 virtual QString label() const = 0; 0049 0050 virtual QString tag() const; 0051 0052 int currentProgress() const; 0053 int totalProgress() const; 0054 0055 int id() const; 0056 0057 static std::shared_ptr<Task> makeErrorTask(const GpgME::Error &error, const QString &details, const QString &label); 0058 0059 public Q_SLOTS: 0060 virtual void cancel() = 0; 0061 0062 Q_SIGNALS: 0063 void progress(int processed, int total, QPrivateSignal); 0064 void result(const std::shared_ptr<const Kleo::Crypto::Task::Result> &, QPrivateSignal); 0065 void started(QPrivateSignal); 0066 0067 protected: 0068 std::shared_ptr<Result> makeErrorResult(const GpgME::Error &error, const QString &details); 0069 0070 void emitResult(const std::shared_ptr<const Task::Result> &result); 0071 0072 protected Q_SLOTS: 0073 void setProgress(int processed, int total); 0074 0075 private Q_SLOTS: 0076 void emitError(const GpgME::Error &error, const QString &details); 0077 0078 private: 0079 virtual void doStart() = 0; 0080 virtual unsigned long long inputSize() const = 0; 0081 0082 private: 0083 class Private; 0084 kdtools::pimpl_ptr<Private> d; 0085 }; 0086 0087 class Task::Result 0088 { 0089 const QString m_nonce; 0090 0091 public: 0092 class Content; 0093 0094 Result(); 0095 virtual ~Result(); 0096 0097 const QString &nonce() const 0098 { 0099 return m_nonce; 0100 } 0101 0102 bool hasError() const; 0103 0104 enum VisualCode { 0105 AllGood, 0106 Warning, 0107 Danger, 0108 NeutralSuccess, 0109 NeutralError, 0110 }; 0111 0112 enum class ContentType { 0113 None, 0114 Mime, 0115 Mbox, 0116 }; 0117 0118 virtual QString icon() const; 0119 virtual QString overview() const = 0; 0120 virtual QString details() const = 0; 0121 virtual GpgME::Error error() const = 0; 0122 virtual QString errorString() const = 0; 0123 virtual VisualCode code() const = 0; 0124 virtual AuditLogEntry auditLog() const = 0; 0125 virtual QPointer<Task> parentTask() const 0126 { 0127 return QPointer<Task>(); 0128 } 0129 virtual ContentType viewableContentType() const; 0130 0131 protected: 0132 static QString iconPath(VisualCode code); 0133 static QString makeOverview(const QString &msg); 0134 0135 private: 0136 class Private; 0137 kdtools::pimpl_ptr<Private> d; 0138 }; 0139 } 0140 }