karchive.h
00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2000 David Faure <faure@kde.org> 00003 Copyright (C) 2003 Leo Savernik <l.savernik@aon.at> 00004 00005 Moved from ktar.h by Roberto Teixeira <maragato@kde.org> 00006 00007 This library is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU Library General Public 00009 License version 2 as published by the Free Software Foundation. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public License 00017 along with this library; see the file COPYING.LIB. If not, write to 00018 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00019 Boston, MA 02110-1301, USA. 00020 */ 00021 #ifndef __karchive_h 00022 #define __karchive_h 00023 00024 #include <sys/stat.h> 00025 #include <sys/types.h> 00026 00027 #include <tqdatetime.h> 00028 #include <tqstring.h> 00029 #include <tqstringlist.h> 00030 #include <tqdict.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( TQIODevice * dev ); 00051 00052 public: 00053 virtual ~KArchive(); 00054 00061 virtual bool open( int mode ); 00062 00069 virtual void close(); 00070 00076 // TODO KDE4 merge with above 00077 bool closeSucceeded() const; 00078 00083 bool isOpened() const { return m_open; } 00084 00090 int mode() const { return m_mode; } 00091 00096 TQIODevice * device() const { return m_dev; } 00097 00103 const KArchiveDirectory* directory() const; 00104 00115 bool addLocalFile( const TQString& fileName, const TQString& destName ); 00116 00128 bool addLocalDirectory( const TQString& path, const TQString& destName ); 00129 00142 virtual bool writeDir( const TQString& name, const TQString& user, const TQString& group ) = 0; 00143 00161 bool writeDir( const TQString& name, const TQString& user, const TQString& group, 00162 mode_t perm, time_t atime, time_t mtime, time_t ctime ); 00163 00178 bool writeSymLink(const TQString &name, const TQString &target, 00179 const TQString &user, const TQString &group, 00180 mode_t perm, time_t atime, time_t mtime, time_t ctime); 00181 00195 virtual bool writeFile( const TQString& name, const TQString& user, const TQString& group, uint size, const char* data ); 00196 00218 bool writeFile( const TQString& name, const TQString& user, const TQString& group, 00219 uint size, mode_t perm, time_t atime, time_t mtime, 00220 time_t ctime, const char* data ); 00221 00238 virtual bool prepareWriting( const TQString& name, const TQString& user, const TQString& group, uint size ) = 0; 00239 00261 bool prepareWriting( const TQString& name, const TQString& user, 00262 const TQString& group, uint size, mode_t perm, 00263 time_t atime, time_t mtime, time_t ctime ); 00264 00269 bool writeData( const char* data, uint size ); 00270 00276 virtual bool doneWriting( uint size ) = 0; 00277 00278 protected: 00284 virtual bool openArchive( int mode ) = 0; 00285 00290 virtual bool closeArchive() = 0; 00291 00299 virtual KArchiveDirectory* rootDir(); 00300 00307 KArchiveDirectory * findOrCreate( const TQString & path ); 00308 00312 void setDevice( TQIODevice *dev ); 00313 00317 void setRootDir( KArchiveDirectory *rootDir ); 00318 00319 private: 00320 TQIODevice * m_dev; 00321 bool m_open; 00322 char m_mode; 00323 protected: 00324 virtual void virtual_hook( int id, void* data ); 00325 /* @internal for virtual_hook */ 00326 enum { VIRTUAL_WRITE_DATA = 1, VIRTUAL_WRITE_SYMLINK, VIRTUAL_WRITE_DIR, 00327 VIRTUAL_WRITE_FILE, VIRTUAL_PREPARE_WRITING }; 00328 bool prepareWriting_impl( const TQString& name, const TQString& user, 00329 const TQString& group, uint size, mode_t perm, 00330 time_t atime, time_t mtime, time_t ctime ); 00331 struct PrepareWritingParams { 00332 const TQString *name; 00333 const TQString *user; 00334 const TQString *group; 00335 uint size; 00336 mode_t perm; 00337 time_t atime, mtime, ctime; 00338 bool retval; 00339 }; 00340 bool writeFile_impl( const TQString& name, const TQString& user, 00341 const TQString& group, uint size, mode_t perm, 00342 time_t atime, time_t mtime, time_t ctime, 00343 const char* data ); 00344 struct WriteFileParams { 00345 const TQString *name; 00346 const TQString *user; 00347 const TQString *group; 00348 uint size; 00349 mode_t perm; 00350 time_t atime, mtime, ctime; 00351 const char *data; 00352 bool retval; 00353 }; 00354 bool writeDir_impl(const TQString& name, const TQString& user, 00355 const TQString& group, mode_t perm, 00356 time_t atime, time_t mtime, time_t ctime); 00357 struct WriteDirParams { 00358 const TQString *name; 00359 const TQString *user; 00360 const TQString *group; 00361 mode_t perm; 00362 time_t atime, mtime, ctime; 00363 bool retval; 00364 }; 00365 bool writeSymLink_impl(const TQString &name, const TQString &target, 00366 const TQString &user, const TQString &group, 00367 mode_t perm, time_t atime, time_t mtime, time_t ctime); 00368 struct WriteSymlinkParams { 00369 const TQString *name; 00370 const TQString *target; 00371 const TQString *user; 00372 const TQString *group; 00373 mode_t perm; 00374 time_t atime, mtime, ctime; 00375 bool retval; 00376 }; 00377 bool writeData_impl( const char* data, uint size ); 00378 struct WriteDataParams { 00379 const char* data; 00380 uint size; 00381 bool retval; 00382 }; 00383 private: 00384 class KArchivePrivate; 00385 KArchivePrivate * d; 00386 }; 00387 00395 class KIO_EXPORT KArchiveEntry 00396 { 00397 public: 00408 KArchiveEntry( KArchive* archive, const TQString& name, int access, int date, 00409 const TQString& user, const TQString& group, 00410 const TQString &symlink ); 00411 00412 virtual ~KArchiveEntry() { } 00413 00418 TQDateTime datetime() const; 00419 00424 int date() const { return m_date; } 00425 00430 TQString name() const { return m_name; } 00436 mode_t permissions() const { return m_access; } 00441 TQString user() const { return m_user; } 00446 TQString group() const { return m_group; } 00447 00452 TQString symlink() const { return m_symlink; } 00453 00458 virtual bool isFile() const { return false; } 00459 00464 virtual bool isDirectory() const { return false; } 00465 00466 protected: 00467 KArchive* archive() const { return m_archive; } 00468 00469 private: 00470 TQString m_name; 00471 int m_date; 00472 mode_t m_access; 00473 TQString m_user; 00474 TQString m_group; 00475 TQString m_symlink; 00476 KArchive* m_archive; 00477 protected: 00478 virtual void virtual_hook( int id, void* data ); 00479 private: 00480 class KArchiveEntryPrivate* d; 00481 }; 00482 00490 class KIO_EXPORT KArchiveFile : public KArchiveEntry 00491 { 00492 public: 00505 KArchiveFile( KArchive* archive, const TQString& name, int access, int date, 00506 const TQString& user, const TQString& group, const TQString &symlink, 00507 int pos, int size ); 00508 00509 virtual ~KArchiveFile() { } 00510 00515 int position() const; // TODO use TQ_LONG in KDE-4.0 00520 int size() const; // TODO use TQ_LONG in KDE-4.0 00525 void setSize( int s ) { m_size = s; } 00526 00532 virtual TQByteArray data() const; 00533 00542 TQIODevice *device() const; // TODO make virtual 00543 00548 virtual bool isFile() const { return true; } 00549 00555 void copyTo(const TQString& dest) const; 00556 00557 private: 00558 int m_pos; // TODO use TQ_LONG in KDE-4.0 00559 int m_size; // TODO use TQ_LONG in KDE-4.0 00560 protected: 00561 virtual void virtual_hook( int id, void* data ); 00562 private: 00563 class KArchiveFilePrivate* d; 00564 }; 00565 00573 class KIO_EXPORT KArchiveDirectory : public KArchiveEntry 00574 { 00575 public: 00586 KArchiveDirectory( KArchive* archive, const TQString& name, int access, int date, 00587 const TQString& user, const TQString& group, 00588 const TQString& symlink); 00589 00590 virtual ~KArchiveDirectory() { } 00591 00596 TQStringList entries() const; 00602 KArchiveEntry* entry( TQString name ); 00608 const KArchiveEntry* entry( TQString name ) const; 00609 00614 void addEntry( KArchiveEntry* ); 00615 00620 virtual bool isDirectory() const { return true; } 00621 00629 void copyTo(const TQString& dest, bool recursive = true) const; 00630 00631 private: 00632 TQDict<KArchiveEntry> m_entries; 00633 protected: 00634 virtual void virtual_hook( int id, void* data ); 00635 private: 00636 class KArchiveDirectoryPrivate* d; 00637 }; 00638 00639 #endif