File indexing completed on 2024-05-12 05:50:23
0001 /* 0002 SPDX-FileCopyrightText: 2017 Ragnar Thomsen <rthomsen6@gmail.com> 0003 0004 SPDX-License-Identifier: BSD-2-Clause 0005 */ 0006 0007 #ifndef LIBZIPPLUGIN_H 0008 #define LIBZIPPLUGIN_H 0009 0010 #include "archiveinterface.h" 0011 0012 #include <zip.h> 0013 0014 using namespace Kerfuffle; 0015 0016 class ZipSource; 0017 0018 class LibzipPlugin : public ReadWriteArchiveInterface 0019 { 0020 Q_OBJECT 0021 0022 public: 0023 explicit LibzipPlugin(QObject *parent, const QVariantList &args); 0024 ~LibzipPlugin() override; 0025 0026 bool list() override; 0027 bool doKill() override; 0028 bool extractFiles(const QVector<Archive::Entry *> &files, const QString &destinationDirectory, const ExtractionOptions &options) override; 0029 0030 bool addFiles(const QVector<Archive::Entry *> &files, 0031 const Archive::Entry *destination, 0032 const CompressionOptions &options, 0033 uint numberOfEntriesToAdd = 0) override; 0034 bool deleteFiles(const QVector<Archive::Entry *> &files) override; 0035 bool moveFiles(const QVector<Archive::Entry *> &files, Archive::Entry *destination, const CompressionOptions &options) override; 0036 bool copyFiles(const QVector<Archive::Entry *> &files, Archive::Entry *destination, const CompressionOptions &options) override; 0037 bool addComment(const QString &comment) override; 0038 bool testArchive() override; 0039 bool hasBatchExtractionProgress() const override; 0040 0041 bool isReadOnly() const override; 0042 QString multiVolumeName() const override; 0043 0044 private: 0045 bool extractEntry(zip_t *archive, const QString &entry, const QString &rootNode, const QString &destDir, bool preservePaths, bool removeRootNode); 0046 bool writeEntry(zip_t *archive, const QString &entry, const Archive::Entry *destination, const CompressionOptions &options, bool isDir = false); 0047 bool emitEntryForIndex(zip_t *archive, qlonglong index); 0048 void emitProgress(double percentage); 0049 QString fromUnixSeparator(const QString &path); 0050 QString toUnixSeparator(const QString &path); 0051 static void progressCallback(zip_t *, double progress, void *that); 0052 static int cancelCallback(zip_t *, void *that); 0053 0054 QVector<Archive::Entry *> m_emittedEntries; 0055 bool m_overwriteAll; 0056 bool m_skipAll; 0057 bool m_listAfterAdd; 0058 bool m_backslashedZip; 0059 QString m_multiVolumeName; 0060 std::unique_ptr<ZipSource> m_zipSource; 0061 }; 0062 0063 #endif // LIBZIPPLUGIN_H