File indexing completed on 2024-06-02 05:24:51

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     utils/output.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 <assuan.h> // for assuan_fd_t
0013 
0014 #include <utils/pimpl_ptr.h>
0015 
0016 #include <QString>
0017 #include <QStringList>
0018 
0019 #include <memory>
0020 
0021 class QIODevice;
0022 class QDir;
0023 class QWidget;
0024 
0025 namespace Kleo
0026 {
0027 
0028 class OverwritePolicy
0029 {
0030 public:
0031     enum Policy {
0032         Ask,
0033         Overwrite,
0034         Rename,
0035         Skip,
0036         Cancel,
0037     };
0038 
0039     enum Options {
0040         MultipleFiles = 1,
0041     };
0042 
0043     explicit OverwritePolicy(Policy initialPolicy);
0044     /// creates an interactive policy, i.e. with initial policy set to Ask
0045     OverwritePolicy(QWidget *parent, Options options);
0046     ~OverwritePolicy();
0047 
0048     Policy policy() const;
0049     void setPolicy(Policy);
0050 
0051     /// returns the file name to write to or an empty string if overwriting was declined
0052     QString obtainOverwritePermission(const QString &fileName);
0053 
0054 private:
0055     class Private;
0056     kdtools::pimpl_ptr<Private> d;
0057 };
0058 
0059 class Output
0060 {
0061 public:
0062     virtual ~Output();
0063 
0064     virtual void setLabel(const QString &label) = 0;
0065     virtual QString label() const = 0;
0066     virtual std::shared_ptr<QIODevice> ioDevice() const = 0;
0067     virtual QString errorString() const = 0;
0068     virtual bool isFinalized() const = 0;
0069     virtual void finalize() = 0;
0070     virtual void cancel() = 0;
0071     virtual bool binaryOpt() const = 0;
0072     virtual void setBinaryOpt(bool value) = 0;
0073     /** Whether or not the output failed. */
0074     virtual bool failed() const
0075     {
0076         return false;
0077     }
0078     virtual QString fileName() const
0079     {
0080         return {};
0081     }
0082 
0083     static std::shared_ptr<Output> createFromFile(const QString &fileName, const std::shared_ptr<OverwritePolicy> &);
0084     static std::shared_ptr<Output> createFromFile(const QString &fileName, bool forceOverwrite);
0085     static std::shared_ptr<Output> createFromPipeDevice(assuan_fd_t fd, const QString &label);
0086     static std::shared_ptr<Output> createFromProcessStdIn(const QString &command);
0087     static std::shared_ptr<Output> createFromProcessStdIn(const QString &command, const QStringList &args);
0088     static std::shared_ptr<Output> createFromProcessStdIn(const QString &command, const QStringList &args, const QDir &workingDirectory);
0089 #ifndef QT_NO_CLIPBOARD
0090     static std::shared_ptr<Output> createFromClipboard();
0091 #endif
0092     static std::shared_ptr<Output> createFromByteArray(QByteArray *data, const QString &label);
0093 };
0094 }