00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __kzip_h
00019 #define __kzip_h
00020
00021 #include <sys/stat.h>
00022 #include <sys/types.h>
00023
00024 #include <qdatetime.h>
00025 #include <qstring.h>
00026 #include <qstringlist.h>
00027 #include <qdict.h>
00028 #include <qvaluelist.h>
00029 #include <karchive.h>
00030
00031 class KZipFileEntry;
00053 class KIO_EXPORT KZip : public KArchive
00054 {
00055 public:
00062 KZip( const QString& filename );
00063
00071 KZip( QIODevice * dev );
00072
00077 virtual ~KZip();
00078
00084 QString fileName() { return m_filename; }
00085
00089 enum ExtraField { NoExtraField = 0,
00090 ModificationTime = 1,
00091 DefaultExtraField = 1
00092 };
00093
00100 void setExtraField( ExtraField ef );
00101
00107 ExtraField extraField() const;
00108
00112 enum Compression { NoCompression = 0,
00113 DeflateCompression = 1
00114 };
00115
00116
00123 void setCompression( Compression c );
00124
00130 Compression compression() const;
00131
00143 virtual bool writeFile( const QString& name, const QString& user, const QString& group, uint size, const char* data );
00144
00154 virtual bool prepareWriting( const QString& name, const QString& user, const QString& group, uint size );
00155
00156
00157 bool writeSymLink(const QString &name, const QString &target,
00158 const QString &user, const QString &group,
00159 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00160
00161 bool prepareWriting( const QString& name, const QString& user,
00162 const QString& group, uint size, mode_t perm,
00163 time_t atime, time_t mtime, time_t ctime );
00164
00165 bool writeFile( const QString& name, const QString& user, const QString& group,
00166 uint size, mode_t perm, time_t atime, time_t mtime,
00167 time_t ctime, const char* data );
00174 bool writeData( const char* data, uint size );
00175
00181 virtual bool doneWriting( uint size );
00182
00183 protected:
00190 virtual bool openArchive( int mode );
00192 virtual bool closeArchive();
00193
00197 virtual bool writeDir( const QString& name, const QString& user, const QString& group) { Q_UNUSED(name); Q_UNUSED(user); Q_UNUSED(group); return true; }
00198
00199
00200
00201
00202 protected:
00203 virtual void virtual_hook( int id, void* data );
00205
00206 bool writeData_impl( const char* data, uint size );
00207 bool prepareWriting_impl(const QString& name, const QString& user,
00208 const QString& group, uint size, mode_t perm,
00209 time_t atime, time_t mtime, time_t ctime);
00210 bool writeSymLink_impl(const QString &name, const QString &target,
00211 const QString &user, const QString &group,
00212 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00213 private:
00214 void abort();
00215
00216 private:
00217 QString m_filename;
00218 class KZipPrivate;
00219 KZipPrivate * d;
00220 };
00221
00222
00226 class KIO_EXPORT KZipFileEntry : public KArchiveFile
00227 {
00228 public:
00229
00230
00231 KZipFileEntry( KZip* zip, const QString& name, int access, int date,
00232 const QString& user, const QString& group, const QString& symlink,
00233 const QString& path, Q_LONG start, Q_LONG uncompressedSize,
00234 int encoding, Q_LONG compressedSize) :
00235 KArchiveFile( zip, name, access, date, user, group, symlink,
00236 start, uncompressedSize ),
00237 m_crc(0),
00238 m_compressedSize(compressedSize),
00239 m_headerStart(0),
00240 m_encoding(encoding),
00241 m_path( path )
00242 {}
00243 int encoding() const { return m_encoding; }
00244 Q_LONG compressedSize() const { return m_compressedSize; }
00245
00247 void setCompressedSize(Q_LONG compressedSize) { m_compressedSize = compressedSize; }
00248
00250 void setHeaderStart(Q_LONG headerstart) { m_headerStart = headerstart; }
00251 Q_LONG headerStart() const {return m_headerStart; }
00252
00254 unsigned long crc32() const { return m_crc; }
00255 void setCRC32(unsigned long crc32) { m_crc=crc32; }
00256
00258 QString path() const { return m_path; }
00259
00264 virtual QByteArray data() const;
00265
00273 QIODevice* device() const;
00274
00275 private:
00276 unsigned long m_crc;
00277 Q_LONG m_compressedSize;
00278 Q_LONG m_headerStart;
00279 int m_encoding;
00280 QString m_path;
00281
00282 };
00283
00284 #endif