kio Library API Documentation

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., 59 Temple Place - Suite 330,
00019    Boston, MA 02111-1307, USA.
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     /* @internal for virtual_hook */
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; // TODO use Q_LONG in KDE-4.0
00507     int size() const; // TODO use Q_LONG in KDE-4.0
00512     void setSize( int s ) { m_size = s; }
00513 
00519     virtual QByteArray data() const;
00520 
00529     QIODevice *device() const; // TODO make virtual
00530 
00535     virtual bool isFile() const { return true; }
00536 
00542     void copyTo(const QString& dest) const;
00543 
00544 private:
00545     int m_pos; // TODO use Q_LONG in KDE-4.0
00546     int m_size; // TODO use Q_LONG in KDE-4.0
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
KDE Logo
This file is part of the documentation for kio Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Nov 27 13:45:18 2004 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003