1/* This file is part of the KDE libraries
2 SPDX-FileCopyrightText: 2011 Mario Bensi <mbensi@ipsquad.net>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6#ifndef K7ZIP_H
7#define K7ZIP_H
8
9#include <karchive.h>
10
11/*!
12 * \class K7Zip
13 * \inmodule KArchive
14 *
15 * \brief A class for reading / writing p7zip archives.
16 */
17class KARCHIVE_EXPORT K7Zip : public KArchive
18{
19 Q_DECLARE_TR_FUNCTIONS(K7Zip)
20
21public:
22 /*!
23 * Creates an instance that operates on the given filename
24 * using the compression filter associated to given mimetype.
25 *
26 * \a filename is a local path (e.g. "/home/user/myfile.7z")
27 */
28 explicit K7Zip(const QString &filename);
29
30 /*!
31 * Creates an instance that operates on the given device.
32 *
33 * The device can be compressed (KCompressionDevice) or not (QFile, etc.).
34 *
35 * \warning Do not assume that giving a QFile here will decompress the file,
36 * in case it's compressed!
37 *
38 * \a dev the device to read from. If the source is compressed, the
39 * QIODevice must take care of decompression
40 */
41 explicit K7Zip(QIODevice *dev);
42
43 /*!
44 * If the archive is still opened, then it will be
45 * closed automatically by the destructor.
46 */
47 ~K7Zip() override;
48
49 /*!
50 * Sets the password to use for encrypted archives.
51 *
52 * This method must be called before opening the archive.
53 *
54 * \note Currently only AES decryption is supported.
55 *
56 * \a password the password to use for encrypted archive
57 * \since 6.13
58 */
59 void setPassword(const QString &password);
60
61 /*!
62 * Whether the archive needs a password to be opened.
63 *
64 * \note This can only be called after open() has been called once.
65 *
66 * Returns \c true if the archive requires a password to be opened
67 * \since 6.13
68 */
69 bool passwordNeeded() const;
70
71protected:
72 // Reimplemented from KArchive
73 bool doWriteSymLink(const QString &name,
74 const QString &target,
75 const QString &user,
76 const QString &group,
77 mode_t perm,
78 const QDateTime &atime,
79 const QDateTime &mtime,
80 const QDateTime &ctime) override;
81 // Reimplemented from KArchive
82 bool doWriteDir(const QString &name,
83 const QString &user,
84 const QString &group,
85 mode_t perm,
86 const QDateTime &atime,
87 const QDateTime &mtime,
88 const QDateTime &ctime) override;
89 // Reimplemented from KArchive
90 bool doPrepareWriting(const QString &name,
91 const QString &user,
92 const QString &group,
93 qint64 size,
94 mode_t perm,
95 const QDateTime &atime,
96 const QDateTime &mtime,
97 const QDateTime &ctime) override;
98 // Reimplemented from KArchive
99 bool doFinishWriting(qint64 size) override;
100
101 // Reimplemented from KArchive
102 bool doWriteData(const char *data, qint64 size) override;
103
104 /*!
105 * Opens the archive for reading.
106 *
107 * Parses the directory listing of the archive
108 * and creates the KArchiveDirectory/KArchiveFile entries.
109 *
110 * \a mode the mode of the file
111 */
112 bool openArchive(QIODevice::OpenMode mode) override;
113 bool closeArchive() override;
114
115protected:
116 void virtual_hook(int id, void *data) override;
117
118private:
119 class K7ZipPrivate;
120 K7ZipPrivate *const d;
121};
122
123#endif
124

source code of karchive/src/k7zip.h