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 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&, const QString&, const QString& ) { 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     QString m_filename;
00215     class KZipPrivate;
00216     KZipPrivate * d;
00217 };
00218 
00219 
00223 class KZipFileEntry : public KArchiveFile
00224 {
00225 public:
00226     
00227 
00228     KZipFileEntry( KZip* zip, const QString& name, int access, int date,
00229                    const QString& user, const QString& group, const QString& symlink,
00230                    const QString& path, Q_LONG start, Q_LONG uncompressedSize,
00231                    int encoding, Q_LONG compressedSize) :
00232         KArchiveFile( zip, name, access, date, user, group, symlink,
00233                       start, uncompressedSize ),
00234         m_crc(0),
00235         m_compressedSize(compressedSize),
00236         m_headerStart(0),
00237         m_encoding(encoding),
00238         m_path( path )
00239     {}
00240     int encoding() const { return m_encoding; }
00241     Q_LONG compressedSize() const { return m_compressedSize; }
00242 
00244     void setCompressedSize(Q_LONG compressedSize) { m_compressedSize = compressedSize; }
00245 
00247     void setHeaderStart(Q_LONG headerstart) { m_headerStart = headerstart; }
00248     Q_LONG headerStart() const {return m_headerStart; }
00249 
00251     unsigned long crc32() const { return m_crc; }
00252     void setCRC32(unsigned long crc32) { m_crc=crc32; }
00253 
00254     
00255     QString path() const { return m_path; }
00256 
00261     virtual QByteArray data() const;
00262 
00270     QIODevice* device() const; 
00271 
00272 private:
00273     unsigned long m_crc;
00274     Q_LONG m_compressedSize;
00275     Q_LONG m_headerStart;
00276     int m_encoding;
00277     QString m_path;
00278     
00279 };
00280 
00281 #endif