/* Copyright 2009 Klarälvdalens Datakonsult AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License or (at your option) version 3 or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 14 of version 3 of the license. This program 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/>. */ #ifndef BACKUPJOB_H #define BACKUPJOB_H #include <kurl.h> #include <tqptrlist.h> #include <tqobject.h> class KMFolder; class KMMessage; class KArchive; class TDEProcess; class TQWidget; namespace KPIM { class ProgressItem; } namespace KMail { class FolderJob; /** * Writes an entire folder structure to an archive file. * The archive is structured like a hierarchy of maildir folders. However, every type of folder * works as the source, i.e. also online IMAP folders. * * The job deletes itself after it finished. */ class BackupJob : public TQObject { Q_OBJECT public: // These enum values have to stay in sync with the format combobox of ArchiveFolderDialog! enum ArchiveType { Zip = 0, Tar = 1, TarBz2 = 2, TarGz = 3 }; explicit BackupJob( TQWidget *parent = 0 ); ~BackupJob(); void setRootFolder( KMFolder *rootFolder ); void setSaveLocation( const KURL &savePath ); void setArchiveType( ArchiveType type ); void setDeleteFoldersAfterCompletion( bool deleteThem ); void start(); private slots: void messageRetrieved( KMMessage *message ); void folderJobFinished( KMail::FolderJob *job ); void processCurrentMessage(); void cancelJob(); private: void queueFolders( KMFolder *root ); void archiveNextFolder(); void archiveNextMessage(); TQString stripRootPath( const TQString &path ) const; bool hasChildren( KMFolder *folder ) const; void finish(); void abort( const TQString &errorMessage ); bool writeDirHelper( const TQString &directoryPath, const TQString &permissionPath ); KURL mMailArchivePath; ArchiveType mArchiveType; KMFolder *mRootFolder; KArchive *mArchive; TQWidget *mParentWidget; bool mCurrentFolderOpen; int mArchivedMessages; uint mArchivedSize; KPIM::ProgressItem *mProgressItem; bool mAborted; bool mDeleteFoldersAfterCompletion; // True if we obtained ownership of the kMMessage after calling getMsg(), since we need // to call ungetMsg() then. For that, we also remember the original index. bool mUnget; int mMessageIndex; TQPtrList<KMFolder> mPendingFolders; KMFolder *mCurrentFolder; TQValueList<unsigned long> mPendingMessages; KMMessage *mCurrentMessage; FolderJob *mCurrentJob; }; } #endif