blob: f6383d6693b31c11e56c1ad1ccf0f6922c37c415 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/* 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 KProcess;
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
|