00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef __karchive_h
00022
#define __karchive_h
00023
00024
#include <sys/stat.h>
00025
#include <sys/types.h>
00026
00027
#include <qdatetime.h>
00028
#include <qstring.h>
00029
#include <qstringlist.h>
00030
#include <qdict.h>
00031
00032
class KArchiveDirectory;
00033
class KArchiveFile;
00034
00040 class KArchive
00041 {
00042
protected:
00048
KArchive(
QIODevice * dev );
00049
00050
public:
00051
virtual ~
KArchive();
00052
00059
virtual bool open(
int mode );
00060
00067
virtual void close();
00068
00073 bool isOpened()
const {
return m_open; }
00074
00080 int mode()
const {
return m_mode; }
00081
00086 QIODevice *
device()
const {
return m_dev; }
00087
00093
const KArchiveDirectory*
directory() const;
00094
00105
bool addLocalFile( const
QString& fileName, const
QString& destName );
00106
00118
bool addLocalDirectory( const
QString& path, const
QString& destName );
00119
00131 virtual
bool writeDir( const
QString& name, const
QString& user, const
QString& group ) = 0;
00132
00150
bool writeDir( const
QString& name, const
QString& user, const
QString& group,
00151 mode_t perm, time_t atime, time_t mtime, time_t ctime );
00152
00167
bool writeSymLink(const
QString &name, const
QString &target,
00168 const
QString &user, const
QString &group,
00169 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00170
00184 virtual
bool writeFile( const
QString& name, const
QString& user, const
QString& group, uint size, const
char* data );
00185
00207
bool writeFile( const
QString& name, const
QString& user, const
QString& group,
00208 uint size, mode_t perm, time_t atime, time_t mtime,
00209 time_t ctime, const
char* data );
00210
00225 virtual
bool prepareWriting( const
QString& name, const
QString& user, const
QString& group, uint size ) = 0;
00226
00248
bool prepareWriting( const
QString& name, const
QString& user,
00249 const
QString& group, uint size, mode_t perm,
00250 time_t atime, time_t mtime, time_t ctime );
00251
00256
bool writeData( const
char* data, uint size );
00257
00263 virtual
bool doneWriting( uint size ) = 0;
00264
00265 protected:
00271 virtual
bool openArchive(
int mode ) = 0;
00272
00277 virtual
bool closeArchive() = 0;
00278
00286 virtual
KArchiveDirectory* rootDir();
00287
00294
KArchiveDirectory * findOrCreate( const
QString & path );
00295
00299
void setDevice(
QIODevice *dev );
00300
00304
void setRootDir(
KArchiveDirectory *rootDir );
00305
00306 private:
00307
QIODevice * m_dev;
00308
bool m_open;
00309
char m_mode;
00310 protected:
00311 virtual
void virtual_hook(
int id,
void* data );
00312
00313 enum { VIRTUAL_WRITE_DATA = 1, VIRTUAL_WRITE_SYMLINK, VIRTUAL_WRITE_DIR,
00314 VIRTUAL_WRITE_FILE, VIRTUAL_PREPARE_WRITING };
00315
bool prepareWriting_impl(
const QString& name,
const QString& user,
00316
const QString& group, uint size, mode_t perm,
00317 time_t atime, time_t mtime, time_t ctime );
00318
struct PrepareWritingParams {
00319
const QString *
name;
00320
const QString *user;
00321
const QString *group;
00322 uint size;
00323 mode_t perm;
00324 time_t atime, mtime, ctime;
00325
bool retval;
00326 };
00327
bool writeFile_impl(
const QString& name,
const QString& user,
00328
const QString& group, uint size, mode_t perm,
00329 time_t atime, time_t mtime, time_t ctime,
00330
const char* data );
00331
struct WriteFileParams {
00332
const QString *
name;
00333
const QString *user;
00334
const QString *group;
00335 uint size;
00336 mode_t perm;
00337 time_t atime, mtime, ctime;
00338
const char *data;
00339
bool retval;
00340 };
00341
bool writeDir_impl(
const QString& name,
const QString& user,
00342
const QString& group, mode_t perm,
00343 time_t atime, time_t mtime, time_t ctime);
00344
struct WriteDirParams {
00345
const QString *
name;
00346
const QString *user;
00347
const QString *group;
00348 mode_t perm;
00349 time_t atime, mtime, ctime;
00350
bool retval;
00351 };
00352
bool writeSymLink_impl(
const QString &name,
const QString &target,
00353
const QString &user,
const QString &group,
00354 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00355
struct WriteSymlinkParams {
00356
const QString *
name;
00357
const QString *target;
00358
const QString *user;
00359
const QString *group;
00360 mode_t perm;
00361 time_t atime, mtime, ctime;
00362
bool retval;
00363 };
00364
bool writeData_impl(
const char* data, uint size );
00365
struct WriteDataParams {
00366
const char* data;
00367 uint size;
00368
bool retval;
00369 };
00370
private:
00371
class KArchivePrivate;
00372 KArchivePrivate * d;
00373 };
00374
00382 class KArchiveEntry
00383 {
00384
public:
00395
KArchiveEntry(
KArchive* archive,
const QString&
name,
int access,
int date,
00396
const QString&
user,
const QString&
group,
00397
const QString &
symlink );
00398
00399
virtual ~
KArchiveEntry() { }
00400
00405
QDateTime datetime()
const;
00406
00411 int date()
const {
return m_date; }
00412
00417 QString name()
const {
return m_name; }
00423 mode_t
permissions()
const {
return m_access; }
00428 QString user()
const {
return m_user; }
00433 QString group()
const {
return m_group; }
00434
00439 QString symlink()
const {
return m_symlink; }
00440
00445 virtual bool isFile()
const {
return false; }
00446
00451 virtual bool isDirectory()
const {
return false; }
00452
00453
protected:
00454
KArchive* archive()
const {
return m_archive; }
00455
00456
private:
00457
QString m_name;
00458
int m_date;
00459 mode_t m_access;
00460
QString m_user;
00461
QString m_group;
00462
QString m_symlink;
00463
KArchive* m_archive;
00464
protected:
00465
virtual void virtual_hook(
int id,
void* data );
00466
private:
00467
class KArchiveEntryPrivate* d;
00468 };
00469
00477 class KArchiveFile :
public KArchiveEntry
00478 {
00479
public:
00492
KArchiveFile(
KArchive* archive,
const QString& name,
int access,
int date,
00493
const QString& user,
const QString& group,
const QString &symlink,
00494
int pos,
int size );
00495
00496
virtual ~
KArchiveFile() { }
00497
00502
int position()
const;
00507
int size()
const;
00512 void setSize(
int s ) { m_size = s; }
00513
00519
virtual QByteArray data() const;
00520
00529
QIODevice *device() const;
00530
00535 virtual
bool isFile()
const {
return true; }
00536
00542
void copyTo(
const QString& dest)
const;
00543
00544
private:
00545
int m_pos;
00546
int m_size;
00547
protected:
00548
virtual void virtual_hook(
int id,
void* data );
00549
private:
00550
class KArchiveFilePrivate* d;
00551 };
00552
00560 class KArchiveDirectory :
public KArchiveEntry
00561 {
00562
public:
00573
KArchiveDirectory(
KArchive* archive,
const QString& name,
int access,
int date,
00574
const QString& user,
const QString& group,
00575
const QString& symlink);
00576
00577
virtual ~
KArchiveDirectory() { }
00578
00583
QStringList entries()
const;
00589
KArchiveEntry*
entry(
QString name );
00595
const KArchiveEntry* entry(
QString name )
const;
00596
00601
void addEntry(
KArchiveEntry* );
00602
00607 virtual bool isDirectory()
const {
return true; }
00608
00616
void copyTo(
const QString& dest,
bool recursive =
true)
const;
00617
00618
private:
00619
QDict<KArchiveEntry> m_entries;
00620
protected:
00621
virtual void virtual_hook(
int id,
void* data );
00622
private:
00623
class KArchiveDirectoryPrivate* d;
00624 };
00625
00626
#endif