/usr/include/kmbox/mbox.h is in kdepimlibs5-dev 4:4.13.0-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | /*
Copyright (c) 2009 Bertjan Broeksema <broeksema@kde.org>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library 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 Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#ifndef KMBOX_MBOX_H
#define KMBOX_MBOX_H
#include "kmbox_export.h"
#include "mboxentry.h"
#include <kmime/kmime_message.h>
namespace KMBox {
class MBoxPrivate;
/**
* @short A class to access mail storages in MBox format.
*
* @author Bertjan Broeksema <broeksema@kde.org>
* @since 4.6
*/
class KMBOX_EXPORT MBox
{
public:
/**
* Describes the type of locking that will be used.
*/
enum LockType {
ProcmailLockfile,
MuttDotlock,
MuttDotlockPrivileged,
None
};
/**
* Creates a new mbox object.
*/
MBox();
/**
* Destroys the mbox object.
*
* The file will be unlocked if it is still open.
*/
~MBox();
/**
* Appends @p message to the MBox and returns the corresponding mbox entry for it.
* You must load a mbox file by making a call to load( const QString& ) before
* appending entries.
* The returned mbox entry is <em>only</em> valid for that particular file.
*
* @param message The message to append to the mbox.
* @return the corresponding mbox entry for the message in the file or an invalid mbox entry
* if the message was not added.
*/
MBoxEntry appendMessage( const KMime::Message::Ptr &message );
/**
* Retrieve the mbox entry objects for all emails from the file except the
* @p deleteEntries.
* The @p deletedEntries should be a list of mbox entries with offsets of deleted messages.
* @param deletedEntries list of mbox entries that have been deleted and need not be retrieved
* Note: One <em>must</em> call load() before calling this method.
*/
MBoxEntry::List entries( const MBoxEntry::List &deletedEntries = MBoxEntry::List() ) const;
/**
* Returns the file name that was passed to the last call to load().
*/
QString fileName() const;
/**
* Loads the raw mbox data from disk into the current MBox object. Messages
* already present are <em>not</em> preserved. This method does not load the
* full messages into memory but only the offsets of the messages and their
* sizes. If the file currently is locked this method will do nothing and
* return false. Appended messages that are not written yet will get lost.
*
* @param fileName the name of the mbox on disk.
* @return true, if successful, false on error.
*
* @see save( const QString & )
*/
bool load( const QString &fileName );
/**
* Locks the mbox file using the configured lock method. This can be used
* for consecutive calls to readMessage and readMessageHeaders. Calling lock()
* before these calls prevents the mbox file being locked for every call.
*
* NOTE: Even when the lock method is None the mbox is internally marked as
* locked. This means that it must be unlocked before calling load().
*
* @return true if locked successful, false on error.
*
* @see setLockType( LockType ), unlock()
*/
bool lock();
/**
* Returns whether or not the mbox currently is locked.
*/
bool locked() const;
/**
* Removes all messages for the given mbox entries from the current reference file
* (i.e. the file that is loaded with load( const QString & ) or the file
* from the last save( const QString & ) call if that was not the same file).
* This method will first check if all lines at the offsets are actually
* separator lines if this is not then no message will be deleted to prevent
* corruption.
*
* @param deletedEntries The mbox entries of the messages that should be removed from
* the file.
* @param movedEntries Optional list for storing pairs of mbox entries that got moved
* within the file due to the deletions.
* The @c first member of the pair is the entry with the original offsets
* the @c second member is the entry with the new (current) offset
*
* @return true if all offsets refer to a mbox separator line and a file was
* loaded, false otherewhise. In the latter the physical file has
* not changed.
*/
bool purge( const MBoxEntry::List &deletedEntries, QList<MBoxEntry::Pair> *movedEntries = 0 );
/**
* Reads the entire message from the file for the given mbox @p entry. If the
* mbox file is not locked this method will lock the file before reading and
* unlock it after reading. If the file already is locked, it will not
* unlock the file after reading the entry.
*
* @param entry The entry in the mbox file.
* @return Message for the given entry or 0 if the file could not be locked
* or the entry offset > fileSize.
*
* @see lock(), unlock()
*/
KMime::Message *readMessage( const MBoxEntry &entry );
/**
* Reads the headers of the message for the given mbox @p entry. If the
* mbox file is not locked this method will lock the file before reading and
* unlock it after reading. If the file already is locked, it will not
* unlock the file after reading the entry.
*
* @param entry The entry in the mbox file.
* @return QByteArray containing the raw message header data.
*
* @see lock(), unlock()
*/
QByteArray readMessageHeaders( const MBoxEntry &entry );
/**
* Reads the entire message from the file for the given mbox @p entry. If the
* mbox file is not locked this method will lock the file before reading and
* unlock it after reading. If the file already is locked, it will not
* unlock the file after reading the entry.
*
* @param entry The entry in the mbox file.
* @return QByteArray containing the raw message data.
*
* @see lock(), unlock()
*/
QByteArray readRawMessage( const MBoxEntry &entry );
/**
* Writes the mbox to disk. If the fileName is empty only appended messages
* will be written to the file that was passed to load( const QString & ).
* Otherwise the contents of the file that was loaded with load is copied to
* @p fileName first.
*
* @param fileName the name of the file
* @return true if the save was successful; false otherwise.
*
* @see load( const QString & )
*/
bool save( const QString &fileName = QString() );
/**
* Sets the locktype that should be used for locking the mbox file. If the
* new LockType cannot be used (e.g. the lockfile executable could not be
* found) the LockType will not be changed.
* @param ltype the locktype to set
* This method will not do anything if the mbox obeject is currently locked
* to make sure that it doesn't leave a locked file for one of the lockfile
* / mutt_dotlock methods.
*/
bool setLockType( LockType ltype );
/**
* Sets the lockfile that should be used by the procmail or the KDE lock
* file method. If this method is not called and one of the before mentioned
* lock methods is used the name of the lock file will be equal to
* MBOXFILENAME.lock.
* @param lockFile the lockfile to set
*/
void setLockFile( const QString &lockFile );
/**
* By default the unlock method will directly unlock the file. However this
* is expensive in case of many consecutive calls to readEntry. Setting the
* time out to a non zero value will keep the lock open until the timeout has
* passed. On each read the timer will be reset.
* @param msec the time out to set for file lock
*/
void setUnlockTimeout( int msec );
/**
* Unlock the mbox file.
*
* @return true if the unlock was successful, false otherwise.
*
* @see lock()
*/
bool unlock();
private:
//@cond PRIVATE
friend class MBoxPrivate;
MBoxPrivate * const d;
//@endcond
};
}
#endif // KMBOX_MBOX_H
|