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
#include <kdelibs_export.h>
00033
00034
class KArchiveDirectory;
00035
class KArchiveFile;
00036
00042 class KIO_EXPORT KArchive
00043 {
00044
protected:
00050 KArchive(
QIODevice * dev );
00051
00052
public:
00053
virtual ~KArchive();
00054
00061
virtual bool open(
int mode );
00062
00069
virtual void close();
00070
00075 bool isOpened()
const {
return m_open; }
00076
00082 int mode()
const {
return m_mode; }
00083
00088 QIODevice * device()
const {
return m_dev; }
00089
00095
const KArchiveDirectory* directory() const;
00096
00107
bool addLocalFile( const
QString& fileName, const
QString& destName );
00108
00120
bool addLocalDirectory( const
QString& path, const
QString& destName );
00121
00133 virtual
bool writeDir( const
QString& name, const
QString& user, const
QString& group ) = 0;
00134
00152
bool writeDir( const
QString& name, const
QString& user, const
QString& group,
00153 mode_t perm, time_t atime, time_t mtime, time_t ctime );
00154
00169
bool writeSymLink(const
QString &name, const
QString &target,
00170 const
QString &user, const
QString &group,
00171 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00172
00186 virtual
bool writeFile( const
QString& name, const
QString& user, const
QString& group, uint size, const
char* data );
00187
00209
bool writeFile( const
QString& name, const
QString& user, const
QString& group,
00210 uint size, mode_t perm, time_t atime, time_t mtime,
00211 time_t ctime, const
char* data );
00212
00227 virtual
bool prepareWriting( const
QString& name, const
QString& user, const
QString& group, uint size ) = 0;
00228
00250
bool prepareWriting( const
QString& name, const
QString& user,
00251 const
QString& group, uint size, mode_t perm,
00252 time_t atime, time_t mtime, time_t ctime );
00253
00258
bool writeData( const
char* data, uint size );
00259
00265 virtual
bool doneWriting( uint size ) = 0;
00266
00267 protected:
00273 virtual
bool openArchive(
int mode ) = 0;
00274
00279 virtual
bool closeArchive() = 0;
00280
00288 virtual
KArchiveDirectory* rootDir();
00289
00296
KArchiveDirectory * findOrCreate( const
QString & path );
00297
00301
void setDevice(
QIODevice *dev );
00302
00306
void setRootDir(
KArchiveDirectory *rootDir );
00307
00308 private:
00309
QIODevice * m_dev;
00310
bool m_open;
00311
char m_mode;
00312 protected:
00313 virtual
void virtual_hook(
int id,
void* data );
00314
00315 enum { VIRTUAL_WRITE_DATA = 1, VIRTUAL_WRITE_SYMLINK, VIRTUAL_WRITE_DIR,
00316 VIRTUAL_WRITE_FILE, VIRTUAL_PREPARE_WRITING };
00317
bool prepareWriting_impl(
const QString& name,
const QString& user,
00318
const QString& group, uint size, mode_t perm,
00319 time_t atime, time_t mtime, time_t ctime );
00320
struct PrepareWritingParams {
00321
const QString *
name;
00322
const QString *user;
00323
const QString *group;
00324 uint size;
00325 mode_t perm;
00326 time_t atime, mtime, ctime;
00327
bool retval;
00328 };
00329
bool writeFile_impl(
const QString& name,
const QString& user,
00330
const QString& group, uint size, mode_t perm,
00331 time_t atime, time_t mtime, time_t ctime,
00332
const char* data );
00333
struct WriteFileParams {
00334
const QString *
name;
00335
const QString *user;
00336
const QString *group;
00337 uint size;
00338 mode_t perm;
00339 time_t atime, mtime, ctime;
00340
const char *data;
00341
bool retval;
00342 };
00343
bool writeDir_impl(
const QString& name,
const QString& user,
00344
const QString& group, mode_t perm,
00345 time_t atime, time_t mtime, time_t ctime);
00346
struct WriteDirParams {
00347
const QString *
name;
00348
const QString *user;
00349
const QString *group;
00350 mode_t perm;
00351 time_t atime, mtime, ctime;
00352
bool retval;
00353 };
00354
bool writeSymLink_impl(
const QString &name,
const QString &target,
00355
const QString &user,
const QString &group,
00356 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00357
struct WriteSymlinkParams {
00358
const QString *
name;
00359
const QString *target;
00360
const QString *user;
00361
const QString *group;
00362 mode_t perm;
00363 time_t atime, mtime, ctime;
00364
bool retval;
00365 };
00366
bool writeData_impl(
const char* data, uint size );
00367
struct WriteDataParams {
00368
const char* data;
00369 uint size;
00370
bool retval;
00371 };
00372
private:
00373
class KArchivePrivate;
00374 KArchivePrivate * d;
00375 };
00376
00384 class KIO_EXPORT KArchiveEntry
00385 {
00386
public:
00397 KArchiveEntry( KArchive* archive,
const QString& name,
int access,
int date,
00398
const QString& user,
const QString& group,
00399
const QString &symlink );
00400
00401
virtual ~KArchiveEntry() { }
00402
00407
QDateTime datetime()
const;
00408
00413 int date()
const {
return m_date; }
00414
00419 QString name()
const {
return m_name; }
00425 mode_t permissions()
const {
return m_access; }
00430 QString user()
const {
return m_user; }
00435 QString group()
const {
return m_group; }
00436
00441 QString symlink()
const {
return m_symlink; }
00442
00447 virtual bool isFile()
const {
return false; }
00448
00453 virtual bool isDirectory()
const {
return false; }
00454
00455
protected:
00456 KArchive* archive()
const {
return m_archive; }
00457
00458
private:
00459
QString m_name;
00460
int m_date;
00461 mode_t m_access;
00462
QString m_user;
00463
QString m_group;
00464
QString m_symlink;
00465 KArchive* m_archive;
00466
protected:
00467
virtual void virtual_hook(
int id,
void* data );
00468
private:
00469
class KArchiveEntryPrivate* d;
00470 };
00471
00479 class KIO_EXPORT KArchiveFile :
public KArchiveEntry
00480 {
00481
public:
00494 KArchiveFile( KArchive* archive,
const QString& name,
int access,
int date,
00495
const QString& user,
const QString& group,
const QString &symlink,
00496
int pos,
int size );
00497
00498
virtual ~KArchiveFile() { }
00499
00504
int position()
const;
00509
int size()
const;
00514 void setSize(
int s ) { m_size = s; }
00515
00521
virtual QByteArray data() const;
00522
00531
QIODevice *device() const;
00532
00537 virtual
bool isFile()
const {
return true; }
00538
00544
void copyTo(
const QString& dest)
const;
00545
00546
private:
00547
int m_pos;
00548
int m_size;
00549
protected:
00550
virtual void virtual_hook(
int id,
void* data );
00551
private:
00552
class KArchiveFilePrivate* d;
00553 };
00554
00562 class KIO_EXPORT KArchiveDirectory :
public KArchiveEntry
00563 {
00564
public:
00575 KArchiveDirectory( KArchive* archive,
const QString& name,
int access,
int date,
00576
const QString& user,
const QString& group,
00577
const QString& symlink);
00578
00579
virtual ~KArchiveDirectory() { }
00580
00585
QStringList entries()
const;
00591 KArchiveEntry* entry(
QString name );
00597
const KArchiveEntry* entry(
QString name )
const;
00598
00603
void addEntry( KArchiveEntry* );
00604
00609 virtual bool isDirectory()
const {
return true; }
00610
00618
void copyTo(
const QString& dest,
bool recursive =
true)
const;
00619
00620
private:
00621
QDict<KArchiveEntry> m_entries;
00622
protected:
00623
virtual void virtual_hook(
int id,
void* data );
00624
private:
00625
class KArchiveDirectoryPrivate* d;
00626 };
00627
00628
#endif