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 <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 
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     QIODevice * device() const { return m_dev; }
00097 
00103     const KArchiveDirectory* directory() const;
00104 
00115     bool addLocalFile( const QString& fileName, const QString& destName );
00116 
00128     bool addLocalDirectory( const QString& path, const QString& destName );
00129 
00142     virtual bool writeDir( const QString& name, const QString& user, const QString& group ) = 0;
00143 
00161     bool writeDir( const QString& name, const QString& user, const QString& group,
00162                 mode_t perm, time_t atime, time_t mtime, time_t ctime );
00163 
00178     bool writeSymLink(const QString &name, const QString &target,
00179                 const QString &user, const QString &group,
00180                 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00181 
00195     virtual bool writeFile( const QString& name, const QString& user, const QString& group, uint size, const char* data );
00196 
00218     bool writeFile( const QString& name, const QString& user, const QString& 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 QString& name, const QString& user, const QString& group, uint size ) = 0;
00239 
00261     bool prepareWriting( const QString& name, const QString& user,
00262                 const QString& 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 QString & path );
00308 
00312     void setDevice( QIODevice *dev );
00313 
00317     void setRootDir( KArchiveDirectory *rootDir );
00318 
00319 private:
00320     QIODevice * 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 QString& name, const QString& user,
00329                 const QString& group, uint size, mode_t perm,
00330                 time_t atime, time_t mtime, time_t ctime );
00331     struct PrepareWritingParams {
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     bool retval;
00339     };
00340     bool writeFile_impl( const QString& name, const QString& user,
00341                 const QString& 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 QString *name;
00346     const QString *user;
00347     const QString *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 QString& name, const QString& user,
00355                 const QString& group, mode_t perm,
00356                 time_t atime, time_t mtime, time_t ctime);
00357     struct WriteDirParams {
00358     const QString *name;
00359     const QString *user;
00360     const QString *group;
00361     mode_t perm;
00362     time_t atime, mtime, ctime;
00363     bool retval;
00364     };
00365     bool writeSymLink_impl(const QString &name, const QString &target,
00366                 const QString &user, const QString &group,
00367                 mode_t perm, time_t atime, time_t mtime, time_t ctime);
00368     struct WriteSymlinkParams {
00369     const QString *name;
00370     const QString *target;
00371     const QString *user;
00372     const QString *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 protected:
00388     QString decodeEntryName( const QCString & name );
00389 };
00390 
00398 class KIO_EXPORT KArchiveEntry
00399 {
00400 public:
00411     KArchiveEntry( KArchive* archive, const QString& name, int access, int date,
00412                const QString& user, const QString& group,
00413                const QString &symlink );
00414 
00415     virtual ~KArchiveEntry() { }
00416 
00421     QDateTime datetime() const;
00422 
00427     int date() const { return m_date; }
00428 
00433     QString name() const { return m_name; }
00439     mode_t permissions() const { return m_access; }
00444     QString user() const { return m_user; }
00449     QString group() const { return m_group; }
00450 
00455     QString symlink() const { return m_symlink; }
00456 
00461     virtual bool isFile() const { return false; }
00462 
00467     virtual bool isDirectory() const { return false; }
00468 
00469 protected:
00470     KArchive* archive() const { return m_archive; }
00471 
00472 private:
00473     QString m_name;
00474     int m_date;
00475     mode_t m_access;
00476     QString m_user;
00477     QString m_group;
00478     QString m_symlink;
00479     KArchive* m_archive;
00480 protected:
00481     virtual void virtual_hook( int id, void* data );
00482 private:
00483     class KArchiveEntryPrivate* d;
00484 };
00485 
00493 class KIO_EXPORT KArchiveFile : public KArchiveEntry
00494 {
00495 public:
00508     KArchiveFile( KArchive* archive, const QString& name, int access, int date,
00509               const QString& user, const QString& group, const QString &symlink,
00510               int pos, int size );
00511 
00512     virtual ~KArchiveFile() { }
00513 
00518     int position() const; // TODO use Q_LONG in KDE-4.0
00523     int size() const; // TODO use Q_LONG in KDE-4.0
00528     void setSize( int s ) { m_size = s; }
00529 
00535     virtual QByteArray data() const;
00536 
00545     QIODevice *device() const; // TODO make virtual
00546 
00551     virtual bool isFile() const { return true; }
00552 
00558     void copyTo(const QString& dest) const;
00559 
00560 private:
00561     int m_pos; // TODO use Q_LONG in KDE-4.0
00562     int m_size; // TODO use Q_LONG in KDE-4.0
00563 protected:
00564     virtual void virtual_hook( int id, void* data );
00565 private:
00566     class KArchiveFilePrivate* d;
00567 };
00568 
00576 class KIO_EXPORT KArchiveDirectory : public KArchiveEntry
00577 {
00578 public:
00589     KArchiveDirectory( KArchive* archive, const QString& name, int access, int date,
00590                    const QString& user, const QString& group,
00591                    const QString& symlink);
00592 
00593     virtual ~KArchiveDirectory() { }
00594 
00599     QStringList entries() const;
00605     KArchiveEntry* entry( QString name );
00611     const KArchiveEntry* entry( QString name ) const;
00612 
00617     void addEntry( KArchiveEntry* );
00618 
00623     virtual bool isDirectory() const { return true; }
00624 
00632      void copyTo(const QString& dest, bool recursive = true) const;
00633 
00634 private:
00635     QDict<KArchiveEntry> m_entries;
00636 protected:
00637     virtual void virtual_hook( int id, void* data );
00638 private:
00639     class KArchiveDirectoryPrivate* d;
00640 };
00641 
00642 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys