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 #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     /* @internal for virtual_hook */
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; // TODO use Q_LONG in KDE-4.0
00509     int size() const; // TODO use Q_LONG in KDE-4.0
00514     void setSize( int s ) { m_size = s; }
00515 
00521     virtual QByteArray data() const;
00522 
00531     QIODevice *device() const; // TODO make virtual
00532 
00537     virtual bool isFile() const { return true; }
00538 
00544     void copyTo(const QString& dest) const;
00545 
00546 private:
00547     int m_pos; // TODO use Q_LONG in KDE-4.0
00548     int m_size; // TODO use Q_LONG in KDE-4.0
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
KDE Logo
This file is part of the documentation for kio Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed May 4 07:13:18 2005 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003