QuaZip quazip-1-6
JlCompress.h
1#ifndef JLCOMPRESSFOLDER_H_
2#define JLCOMPRESSFOLDER_H_
3
4/*
5Copyright (C) 2010 Roberto Pompermaier
6Copyright (C) 2005-2016 Sergey A. Tachenov
7
8This file is part of QuaZip.
9
10QuaZip is free software: you can redistribute it and/or modify
11it under the terms of the GNU Lesser General Public License as published by
12the Free Software Foundation, either version 2.1 of the License, or
13(at your option) any later version.
14
15QuaZip is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU Lesser General Public License for more details.
19
20You should have received a copy of the GNU Lesser General Public License
21along with QuaZip. If not, see <http://www.gnu.org/licenses/>.
22
23See COPYING file for the full LGPL text.
24
25Original ZIP package is copyrighted by Gilles Vollant and contributors,
26see quazip/(un)zip.h files for details. Basically it's the zlib license.
27*/
28
29#include "quazip.h"
30#include "quazipfile.h"
31#include "quazipfileinfo.h"
32#include "quazip_qt_compat.h"
33#include <QtCore/QString>
34#include <QtCore/QDir>
35#include <QtCore/QFileInfo>
36#include <QtCore/QFile>
37
39
43class QUAZIP_EXPORT JlCompress {
44public:
45 class Options {
46 public:
61 {
63 Storage = 0x00, // Z_NO_COMPRESSION 0
65 Fastest = 0x81, // Z_BEST_SPEED 1
67 Faster = 0x83,
69 Standard = 0x86,
71 Better = 0x87,
73 Best = 0x89, // Z_BEST_COMPRESSION 9
76 Default = 0xff
77 };
78
79 public:
80 explicit Options(const CompressionStrategy& strategy)
81 : m_compressionStrategy(strategy) {}
82
83 explicit Options(const QDateTime& dateTime = QDateTime(),
84 const CompressionStrategy& strategy = Default,
85 bool utf8Enabled = false,
86 const QByteArray& password = QByteArray())
87 : m_dateTime(dateTime), m_compressionStrategy(strategy), m_utf8Enabled(utf8Enabled), m_password(password) {}
88
89 QDateTime getDateTime() const {
90 return m_dateTime;
91 }
92
93 void setDateTime(const QDateTime &dateTime) {
94 m_dateTime = dateTime;
95 }
96
97 CompressionStrategy getCompressionStrategy() const {
98 return m_compressionStrategy;
99 }
100
101 int getCompressionMethod() const {
102 return m_compressionStrategy != Default ? m_compressionStrategy >> 4 : Z_DEFLATED;
103 }
104
105 int getCompressionLevel() const {
106 return m_compressionStrategy != Default ? m_compressionStrategy & 0x0f : Z_DEFAULT_COMPRESSION;
107 }
108
109 void setCompressionStrategy(const CompressionStrategy &strategy) {
110 m_compressionStrategy = strategy;
111 }
112
113 bool getUtf8Enabled() const {
114 return m_utf8Enabled;
115 }
116
117 void setUtf8Enabled(bool utf8Enabled) {
118 m_utf8Enabled = utf8Enabled;
119 }
120
121 QByteArray getPassword() const {
122 return m_password;
123 }
124
125 void setPassword(const QByteArray& password) {
126 m_password = password;
127 }
128
129 private:
130 // If set, used as last modified on file inside the archive.
131 // If compressing a directory, used for all files.
132 QDateTime m_dateTime;
133
134 CompressionStrategy m_compressionStrategy;
135
136 /* Enables UTF-8 support for filenames and comments.
137 *
138 * For methods that create new archives (compressFile, compressFiles, compressDir):
139 * - This flag determines the encoding for all files in the new archive.
140 *
141 * For methods that add to existing archives (addFile, addFiles, addDir):
142 * - This flag MUST match the encoding already used in the existing archive.
143 * - QuaZip does not auto-detect the existing encoding.
144 * - Mismatched encoding will create an inconsistent archive.
145 *
146 * For methods that receive QuaZip* zip as an argument:
147 * - This flag is ignored (zip is already opened).
148 * - You must call setUtf8Enabled() on the QuaZip object before open().
149 * */
150 bool m_utf8Enabled;
151
152 /* Password for encryption/decryption.
153 *
154 * If set during compression, the files will be encrypted with this password.
155 * If set during extraction, this password will be used to decrypt the files.
156 * Empty password means no encryption/decryption.
157 * */
158 QByteArray m_password;
159 };
160
161 static bool copyData(QIODevice &inFile, QIODevice &outFile);
162 static QStringList extractDir(QuaZip &zip, const QString &dir);
163 static QStringList getFileList(QuaZip *zip);
164 static QString extractFile(QuaZip &zip, QString fileName, QString fileDest);
165 static QStringList extractFiles(QuaZip &zip, const QStringList &files, const QString &dir);
166
168
174 static bool extractFile(QuaZip* zip, QString fileName, QString fileDest);
175
177
183 static bool compressFile(QuaZip* zip, QString fileName, QString fileDest);
184
186
193 static bool compressFile(QuaZip* zip, QString fileName, QString fileDest, const Options& options);
194
196
205 static bool compressSubDir(QuaZip* parentZip, QString dir, QString parentDir, bool recursive,
206 QDir::Filters filters);
207
209
221 static bool compressSubDir(QuaZip* parentZip, QString dir, QString parentDir, bool recursive,
222 QDir::Filters filters, const Options& options);
223
225
229 static bool removeFile(QStringList listFile);
230
232
237 static bool compressFile(QString fileCompressed, QString file);
238
240
246 static bool compressFile(QString fileCompressed, QString file, const Options& options);
247
249
254 static bool compressFiles(QString fileCompressed, QStringList files);
255
257
263 static bool compressFiles(QString fileCompressed, QStringList files, const Options& options);
264
266
274 static bool addFile(QString fileCompressed, QString file);
275
277
286 static bool addFile(QString fileCompressed, QString file, const Options& options);
287
289
303 static bool addFiles(QString fileCompressed, QStringList files);
304
306
327 static bool addFiles(QString fileCompressed, QStringList files, const Options& options);
328
330
341 static bool addDir(QString fileCompressed, QString dir = QString(), bool recursive = true);
342
344
361 static bool addDir(QString fileCompressed, QString dir,
362 bool recursive, QDir::Filters filters);
363
365
391 static bool addDir(QString fileCompressed, QString dir,
392 bool recursive, QDir::Filters filters, const Options& options);
393
395
404 static bool compressDir(QString fileCompressed, QString dir = QString(), bool recursive = true);
405
422 static bool compressDir(QString fileCompressed, QString dir,
423 bool recursive, QDir::Filters filters);
424
442 static bool compressDir(QString fileCompressed, QString dir,
443 bool recursive, QDir::Filters filters, const Options& options);
444
446
453 static QString extractFile(QString fileCompressed, QString fileName, QString fileDest = QString());
454
456
463 static QStringList extractFiles(QString fileCompressed, QStringList files, QString dir = QString());
464
466
472 static QStringList extractDir(QString fileCompressed, QString dir = QString());
473
475
482 static QStringList extractDir(QString fileCompressed, QuazipTextCodec* fileNameCodec, QString dir = QString());
483
485
493 static QString extractFile(QString fileCompressed, QString fileName, QString fileDest, const QByteArray& password);
494
496
504 static QStringList extractFiles(QString fileCompressed, QStringList files, QString dir, const QByteArray& password);
505
507
514 static QStringList extractDir(QString fileCompressed, QString dir, const QByteArray& password);
515
517
522 static QStringList getFileList(QString fileCompressed);
523
525
532 static QString extractFile(QIODevice *ioDevice, QString fileName, QString fileDest = QString());
533
535
542 static QStringList extractFiles(QIODevice *ioDevice, QStringList files, QString dir = QString());
543
545
551 static QStringList extractDir(QIODevice *ioDevice, QString dir = QString());
552
554
561 static QStringList extractDir(QIODevice* ioDevice, QuazipTextCodec* fileNameCodec, QString dir = QString());
562
564
569 static QStringList getFileList(QIODevice *ioDevice);
570};
571
572#endif /* JLCOMPRESSFOLDER_H_ */
Definition JlCompress.h:45
CompressionStrategy
Definition JlCompress.h:61
Utility class for typical operations.
Definition JlCompress.h:43
ZIP archive.
Definition quazip.h:84
Definition quazip_textcodec.h:39