File indexing completed on 2024-09-15 04:36:24

0001 /*
0002     SPDX-FileCopyrightText: 2020 Daniel Vrátil <dvratil@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "akonadiprivate_export.h"
0010 
0011 #include <QIODevice>
0012 
0013 #include <memory>
0014 #include <system_error>
0015 
0016 namespace Akonadi
0017 {
0018 class Compressor;
0019 class AKONADIPRIVATE_EXPORT CompressionStream : public QIODevice
0020 {
0021     Q_OBJECT
0022 public:
0023     explicit CompressionStream(QIODevice *stream, QObject *parent = nullptr);
0024     ~CompressionStream() override;
0025 
0026     bool open(QIODevice::OpenMode mode) override;
0027     void close() override;
0028     bool atEnd() const override;
0029 
0030     bool isSequential() const override;
0031 
0032     std::error_code error() const;
0033 
0034     static bool isCompressed(QIODevice *data);
0035 
0036 protected:
0037     qint64 readData(char *data, qint64 maxSize) override;
0038     qint64 writeData(const char *data, qint64 maxSize) override;
0039 
0040 private:
0041     QIODevice *mStream = nullptr;
0042     QByteArray mBuffer;
0043     std::error_code mResult;
0044     std::unique_ptr<Compressor> mCompressor;
0045 };
0046 
0047 } // namespace Akonadi