You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.5 KiB
140 lines
4.5 KiB
/* Local Mail folder |
|
* |
|
* Author: Stefan Taferner <taferner@kde.org> |
|
* This code is under GPL |
|
* |
|
*/ |
|
#ifndef kmfoldermbox_h |
|
#define kmfoldermbox_h |
|
|
|
#include "kmfolderindex.h" |
|
#include "mboxjob.h" |
|
|
|
#include <sys/types.h> // for size_t |
|
|
|
namespace KMail { |
|
class FolderJob; |
|
class MboxJob; |
|
class AttachmentStrategy; |
|
} |
|
using KMail::FolderJob; |
|
using KMail::MboxJob; |
|
using KMail::AttachmentStrategy; |
|
|
|
class KMFolderMbox; |
|
|
|
|
|
/* Mail folder. |
|
* (description will be here). |
|
* |
|
* Accounts: |
|
* The accounts (of KMail) that are fed into the folder are |
|
* represented as the children of the folder. They are only stored here |
|
* during runtime to have a reference for which accounts point to a |
|
* specific folder. |
|
*/ |
|
|
|
class KMFolderMbox : public KMFolderIndex |
|
{ |
|
Q_OBJECT |
|
friend class MboxJob; |
|
public: |
|
|
|
|
|
/** Usually a parent is given. But in some cases there is no |
|
fitting parent object available. Then the name of the folder |
|
is used as the absolute path to the folder file. */ |
|
KMFolderMbox(KMFolder* folder, const char* name=0); |
|
virtual ~KMFolderMbox(); |
|
|
|
/** Returns the type of this folder */ |
|
virtual KMFolderType folderType() const { return KMFolderTypeMbox; } |
|
|
|
/** Read a message and return a referece to a string */ |
|
virtual QCString& getMsgString(int idx, QCString& mDest); |
|
DwString getDwString(int idx); |
|
|
|
/** Add the given message to the folder. Usually the message |
|
is added at the end of the folder. Returns zero on success and |
|
an errno error code on failure. The index of the new message |
|
is stored in index_return if given. |
|
Please note that the message is added as is to the folder and the folder |
|
takes ownership of the message (deleting it in the destructor).*/ |
|
virtual int addMsg( KMMessage* msg, int* index_return = 0 ); |
|
|
|
/** Open folder for access. Does not work if the parent is not set. |
|
Does nothing if the folder is already opened. To reopen a folder |
|
call close() first. |
|
Returns zero on success and an error code equal to the c-library |
|
fopen call otherwise (errno). */ |
|
virtual int open(); |
|
|
|
/** Close folder. If force is TRUE the files are closed even if |
|
others still use it (e.g. other mail reader windows). */ |
|
virtual void close(bool force=FALSE); |
|
|
|
virtual int canAccess(); |
|
|
|
/** fsync buffers to disk */ |
|
virtual void sync(); |
|
|
|
/** Create a new folder with the name of this object and open it. |
|
Returns zero on success and an error code equal to the |
|
c-library fopen call otherwise. */ |
|
virtual int create(bool imap = FALSE); |
|
|
|
/** Remove deleted messages from the folder. Returns zero on success |
|
and an errno on failure. */ |
|
virtual int compact(); |
|
|
|
/** Is the folder read-only? */ |
|
virtual bool isReadOnly() const { return !mFilesLocked; } |
|
|
|
void setLockType( LockType ltype=FCNTL ); |
|
|
|
void setProcmailLockFileName( const QString& ); |
|
|
|
static QCString escapeFrom( const QCString & str ); |
|
|
|
protected: |
|
virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt, KMFolder *folder, |
|
QString partSpecifier, const AttachmentStrategy *as ) const; |
|
virtual FolderJob* doCreateJob( QPtrList<KMMessage>& msgList, const QString& sets, |
|
FolderJob::JobType jt, KMFolder *folder ) const; |
|
/** Load message from file and store it at given index. Returns 0 |
|
on failure. */ |
|
virtual KMMessage* readMsg(int idx); |
|
|
|
/** Create index file from messages file and fill the message-info list |
|
mMsgList. Returns 0 on success and an errno value (see fopen) on |
|
failure. */ |
|
virtual int createIndexFromContents(); |
|
|
|
/** Lock mail folder files. Called by ::open(). Returns 0 on success and |
|
an errno error code on failure. */ |
|
virtual int lock(); |
|
|
|
/** Unlock mail folder files. Called by ::close(). Returns 0 on success |
|
and an errno error code on failure. */ |
|
virtual int unlock(); |
|
|
|
virtual IndexStatus indexStatus(); |
|
|
|
/** Called by KMFolder::remove() to delete the actual contents. |
|
At the time of the call the folder has already been closed, and |
|
the various index files deleted. Returns 0 on success. */ |
|
virtual int removeContents(); |
|
|
|
/** Called by KMFolder::expunge() to delete the actual contents. |
|
At the time of the call the folder has already been closed, and |
|
the various index files deleted. Returns 0 on success. */ |
|
virtual int expungeContents(); |
|
|
|
private: |
|
FILE *mStream; |
|
bool mFilesLocked; // TRUE if the files of the folder are locked (writable) |
|
LockType mLockType; |
|
QString mProcmailLockFileName; |
|
}; |
|
|
|
#endif // kmfoldermbox_h
|
|
|