QuaZip quazip-1-4
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(), const CompressionStrategy& strategy = Default)
84 : m_dateTime(dateTime), m_compressionStrategy(strategy) {}
85
86 QDateTime getDateTime() const {
87 return m_dateTime;
88 }
89
90 void setDateTime(const QDateTime &dateTime) {
91 m_dateTime = dateTime;
92 }
93
94 CompressionStrategy getCompressionStrategy() const {
95 return m_compressionStrategy;
96 }
97
98 int getCompressionMethod() const {
99 return m_compressionStrategy != Default ? m_compressionStrategy >> 4 : Z_DEFLATED;
100 }
101
102 int getCompressionLevel() const {
103 return m_compressionStrategy != Default ? m_compressionStrategy & 0x0f : Z_DEFAULT_COMPRESSION;
104 }
105
106 void setCompressionStrategy(const CompressionStrategy &strategy) {
107 m_compressionStrategy = strategy;
108 }
109
110 private:
111 // If set, used as last modified on file inside the archive.
112 // If compressing a directory, used for all files.
113 QDateTime m_dateTime;
114 CompressionStrategy m_compressionStrategy;
115 };
116
117 static bool copyData(QIODevice &inFile, QIODevice &outFile);
118 static QStringList extractDir(QuaZip &zip, const QString &dir);
119 static QStringList getFileList(QuaZip *zip);
120 static QString extractFile(QuaZip &zip, QString fileName, QString fileDest);
121 static QStringList extractFiles(QuaZip &zip, const QStringList &files, const QString &dir);
123
129 static bool compressFile(QuaZip* zip, QString fileName, QString fileDest);
131
138 static bool compressFile(QuaZip* zip, QString fileName, QString fileDest, const Options& options);
140
149 static bool compressSubDir(QuaZip* parentZip, QString dir, QString parentDir, bool recursive,
150 QDir::Filters filters);
152
164 static bool compressSubDir(QuaZip* parentZip, QString dir, QString parentDir, bool recursive,
165 QDir::Filters filters, const Options& options);
167
173 static bool extractFile(QuaZip* zip, QString fileName, QString fileDest);
175
179 static bool removeFile(QStringList listFile);
180
182
187 static bool compressFile(QString fileCompressed, QString file);
189
195 static bool compressFile(QString fileCompressed, QString file, const Options& options);
197
202 static bool compressFiles(QString fileCompressed, QStringList files);
204
210 static bool compressFiles(QString fileCompressed, QStringList files, const Options& options);
212
221 static bool compressDir(QString fileCompressed, QString dir = QString(), bool recursive = true);
238 static bool compressDir(QString fileCompressed, QString dir,
239 bool recursive, QDir::Filters filters);
257 static bool compressDir(QString fileCompressed, QString dir,
258 bool recursive, QDir::Filters filters, const Options& options);
259
261
268 static QString extractFile(QString fileCompressed, QString fileName, QString fileDest = QString());
270
277 static QStringList extractFiles(QString fileCompressed, QStringList files, QString dir = QString());
279
285 static QStringList extractDir(QString fileCompressed, QString dir = QString());
287
294 static QStringList extractDir(QString fileCompressed, QTextCodec* fileNameCodec, QString dir = QString());
296
301 static QStringList getFileList(QString fileCompressed);
303
310 static QString extractFile(QIODevice *ioDevice, QString fileName, QString fileDest = QString());
312
319 static QStringList extractFiles(QIODevice *ioDevice, QStringList files, QString dir = QString());
321
327 static QStringList extractDir(QIODevice *ioDevice, QString dir = QString());
329
336 static QStringList extractDir(QIODevice* ioDevice, QTextCodec* fileNameCodec, QString dir = QString());
338
343 static QStringList getFileList(QIODevice *ioDevice);
344};
345
346#endif /* JLCOMPRESSFOLDER_H_ */
Definition JlCompress.h:45
CompressionStrategy
Definition JlCompress.h:61
@ Default
Definition JlCompress.h:76
@ Storage
Storage without compression.
Definition JlCompress.h:63
@ Standard
Standard compression speed and ratio.
Definition JlCompress.h:69
@ Faster
Relatively fast compression speed.
Definition JlCompress.h:67
@ Fastest
The fastest compression speed.
Definition JlCompress.h:65
@ Better
Better compression ratio.
Definition JlCompress.h:71
@ Best
The best compression ratio.
Definition JlCompress.h:73
Utility class for typical operations.
Definition JlCompress.h:43