diff options
Diffstat (limited to 'kmail/importjob.h')
-rw-r--r-- | kmail/importjob.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/kmail/importjob.h b/kmail/importjob.h new file mode 100644 index 000000000..ee7a0ac8b --- /dev/null +++ b/kmail/importjob.h @@ -0,0 +1,126 @@ +/* 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 IMPORTJOB_H +#define IMPORTJOB_H + +#include <kurl.h> + +#include <tqobject.h> +#include <tqvaluelist.h> +#include <tqptrlist.h> + +#include <sys/types.h> + +class TQWidget; +class KArchive; +class KArchiveDirectory; +class KArchiveFile; +class KMFolder; +class KMMessage; + +namespace KPIM +{ + class ProgressItem; +} + +namespace KMail +{ + class FolderJob; + +/** + * Imports an archive that was previously backed up with an BackupJob. + * This job will re-create the folder structure, under the root folder given in setRootFolder(). + * + * The job deletes itself after it finished. + */ +class ImportJob : public TQObject +{ + Q_OBJECT + + public: + + explicit ImportJob( TQWidget *parentWidget = 0 ); + ~ImportJob(); + void start(); + void setFile( const KURL &archiveFile ); + void setRootFolder( KMFolder *rootFolder ); + + private slots: + + void importNextMessage(); + void cancelJob(); + void messagePutResult( KMail::FolderJob *job ); + + private: + + struct Folder + { + KMFolder *parent; + const KArchiveDirectory *archiveDir; + }; + + struct Messages + { + KMFolder *parent; + TQPtrList<KArchiveFile> files; + }; + + void finish(); + void abort( const TQString &errorMessage ); + void queueFolders(); + void importNextDirectory(); + KMFolder* createSubFolder( KMFolder *parent, const TQString &folderName, mode_t permissions ); + KMFolder* getOrCreateSubFolder( KMFolder *parentFolder, const TQString &subFolderName, + mode_t subFolderPermissions ); + void enqueueMessages( const KArchiveDirectory *dir, KMFolder *folder ); + void messageAdded(); + + KArchive *mArchive; + + // The root folder which the user has selected as the folder to which everything should be + // imported + KMFolder *mRootFolder; + + TQWidget *mParentWidget; + KURL mArchiveFile; + int mNumberOfImportedMessages; + + // List of archive folders with their corresponding KMail parent folder that are awaiting + // processing + TQValueList<Folder> mQueuedDirectories; + + // List of list of messages and their parent folders which are awaiting processing + TQValueList<Messages> mQueuedMessages; + + // The folder to which we are currently importing messages + KMFolder *mCurrentFolder; + + // The message which is currently being added + KMMessage *mCurrentMessage; + + // The archive file of the current message that is being added + KArchiveFile *mCurrentMessageFile; + + KPIM::ProgressItem *mProgressItem; + bool mAborted; +}; + +} + +#endif |