//
//     Copyright 2008 Jim Bublitz <jbublitz@nwinternet.com>
//     Earlier copyrights 1998 - 2007 Jim Bublitz also apply

//                 Generated by twine

// This file is part of PyKDE4.

// PyKDE4 is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of
// the License, or (at your option) any later version.

// PyKDE4 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.





%ModuleHeaderCode
//ctscc
#include <karchive.h>
#include <kzip.h>
%End

class KArchive
{
%TypeHeaderCode
#include <karchive.h>
%End


protected:
                            KArchive (const QString& fileName);
                            KArchive (QIODevice* dev);

public:
    virtual bool            open (QIODevice::OpenMode mode);
    virtual bool            close ();
    bool                    isOpen () const;
    QIODevice::OpenMode     mode () const;
    QIODevice*              device () const;
    QString                 fileName () const;
    const KArchiveDirectory*  directory () const;
    bool                    addLocalFile (const QString& fileName, const QString& destName);
    bool                    addLocalDirectory (const QString& path, const QString& destName);

    enum 
    {
        UnknownTime
    };

    virtual bool            writeDir (const QString& name, const QString& user, const QString& group, mode_t perm = 040755, time_t atime = UnknownTime, time_t mtime = UnknownTime, time_t ctime = UnknownTime);
    virtual bool            writeSymLink (const QString& name, const QString& target, const QString& user, const QString& group, mode_t perm = 0120755, time_t atime = UnknownTime, time_t mtime = UnknownTime, time_t ctime = UnknownTime);
    virtual bool            writeFile (const QString& name, const QString& user, const QString& group, const char* data, qint64 size, mode_t perm = 0100644, time_t atime = UnknownTime, time_t mtime = UnknownTime, time_t ctime = UnknownTime);
    virtual bool            prepareWriting (const QString& name, const QString& user, const QString& group, qint64 size, mode_t perm = 0100644, time_t atime = UnknownTime, time_t mtime = UnknownTime, time_t ctime = UnknownTime);
    virtual bool            writeData (const char* data, qint64 size);
    virtual bool            finishWriting (qint64 size);

protected:
    virtual bool            openArchive (QIODevice::OpenMode mode) = 0;
    virtual bool            closeArchive () = 0;
    virtual KArchiveDirectory*  rootDir ();
    virtual bool            doWriteDir (const QString& name, const QString& user, const QString& group, mode_t perm, time_t atime, time_t mtime, time_t ctime) = 0;
    virtual bool            doWriteSymLink (const QString& name, const QString& target, const QString& user, const QString& group, mode_t perm, time_t atime, time_t mtime, time_t ctime) = 0;
    virtual bool            doPrepareWriting (const QString& name, const QString& user, const QString& group, qint64 size, mode_t perm, time_t atime, time_t mtime, time_t ctime) = 0;
    virtual bool            doFinishWriting (qint64 size) = 0;
    KArchiveDirectory*      findOrCreate (const QString& path);
    virtual bool            createDevice (QIODevice::OpenMode mode);
    void                    setDevice (QIODevice* dev);
    void                    setRootDir (KArchiveDirectory* rootDir);
//ig     virtual void       virtual_hook (int id, void* data);

private:
                            KArchive (const KArchive& other);
};   // KArchive


class KArchiveEntry
{
%TypeHeaderCode
#include <karchive.h>
%End


public:
                            KArchiveEntry (KArchive* archive, const QString& name, int access, int date, const QString& user, const QString& group, const QString& symlink);
    QDateTime               datetime () const;
    int                     date () const;
    QString                 name () const;
    mode_t                  permissions () const;
    QString                 user () const;
    QString                 group () const;
    QString                 symLinkTarget () const;
    virtual bool            isFile () const;
    virtual bool            isDirectory () const;

protected:
    KArchive*               archive () const;
//ig     virtual void       virtual_hook (int id, void* data);

private:
                            KArchiveEntry (const KArchiveEntry& other);
};   // KArchiveEntry


class KArchiveFile : KArchiveEntry
{
%TypeHeaderCode
#include <karchive.h>
%End


public:
                            KArchiveFile (KArchive* archive, const QString& name, int access, int date, const QString& user, const QString& group, const QString& symlink, qint64 pos, qint64 size);
    qint64                  position () const;
    qint64                  size () const;
    void                    setSize (qint64 s);
    virtual QByteArray      data () const;
    virtual QIODevice*      createDevice () const;
    virtual bool            isFile () const;
    void                    copyTo (const QString& dest) const;

protected:
//ig     virtual void       virtual_hook (int id, void* data);

private:
                            KArchiveFile (const KArchiveFile& other);
};   // KArchiveFile


class KArchiveDirectory : KArchiveEntry
{
%TypeHeaderCode
#include <karchive.h>
%End


public:
                            KArchiveDirectory (KArchive* archive, const QString& name, int access, int date, const QString& user, const QString& group, const QString& symlink);
    QStringList             entries () const;
    const KArchiveEntry*    entry (const QString& name) const;
    void                    addEntry (KArchiveEntry*);
    virtual bool            isDirectory () const;
    void                    copyTo (const QString& dest, bool recursive = 1) const;

protected:
//ig     virtual void       virtual_hook (int id, void* data);

private:
                            KArchiveDirectory (const KArchiveDirectory& other);

public:

//  Subclasses of KArchiveEntry

%ConvertToSubClassCode

    sipClass = NULL;

    if (dynamic_cast<KArchiveDirectory*>(sipCpp))
        sipClass = sipClass_KArchiveDirectory;
    else if (dynamic_cast<KArchiveFile*>(sipCpp))
        {
            sipClass = sipClass_KArchiveFile;
            if (dynamic_cast<KZipFileEntry*>(sipCpp))
                sipClass = sipClass_KZipFileEntry;
        }
%End

};   // KArchiveDirectory




