summaryrefslogtreecommitdiffstats
path: root/kmail/importjob.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmail/importjob.h')
-rw-r--r--kmail/importjob.h126
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