00001
00002
00003
00004
00005 #ifndef kmmsgbase_h
00006 #define kmmsgbase_h
00007
00008
00009 #include <config.h>
00010 #include <sys/types.h>
00011 #include <qstring.h>
00012 #include <time.h>
00013
00014 class QCString;
00015 class QStringList;
00016 class QTextCodec;
00017 class KMFolder;
00018 class KMFolderIndex;
00019
00021 enum MsgStatus
00022 {
00023 KMMsgStatusUnknown = 0x00000000,
00024 KMMsgStatusNew = 0x00000001,
00025 KMMsgStatusUnread = 0x00000002,
00026 KMMsgStatusRead = 0x00000004,
00027 KMMsgStatusOld = 0x00000008,
00028 KMMsgStatusDeleted = 0x00000010,
00029 KMMsgStatusReplied = 0x00000020,
00030 KMMsgStatusForwarded = 0x00000040,
00031 KMMsgStatusQueued = 0x00000080,
00032 KMMsgStatusSent = 0x00000100,
00033 KMMsgStatusFlag = 0x00000200,
00034 KMMsgStatusWatched = 0x00000400,
00035 KMMsgStatusIgnored = 0x00000800,
00036 KMMsgStatusTodo = 0x00001000,
00037 KMMsgStatusSpam = 0x00002000,
00038 KMMsgStatusHam = 0x00004000,
00039 KMMsgStatusHasAttach = 0x00008000,
00040 KMMsgStatusHasNoAttach = 0x00010000
00041 };
00042
00043 typedef uint KMMsgStatus;
00044
00048 typedef enum
00049 {
00050 KMLegacyMsgStatusUnknown=' ',
00051 KMLegacyMsgStatusNew='N',
00052 KMLegacyMsgStatusUnread='U',
00053 KMLegacyMsgStatusRead='R',
00054 KMLegacyMsgStatusOld='O',
00055 KMLegacyMsgStatusDeleted='D',
00056 KMLegacyMsgStatusReplied='A',
00057 KMLegacyMsgStatusForwarded='F',
00058 KMLegacyMsgStatusQueued='Q',
00059 KMLegacyMsgStatusSent='S',
00060 KMLegacyMsgStatusFlag='G'
00061 } KMLegacyMsgStatus;
00062
00063
00064
00066 typedef enum
00067 {
00068 KMMsgEncryptionStateUnknown=' ',
00069 KMMsgNotEncrypted='N',
00070 KMMsgPartiallyEncrypted='P',
00071 KMMsgFullyEncrypted='F',
00072 KMMsgEncryptionProblematic='X'
00073 } KMMsgEncryptionState;
00074
00076 typedef enum
00077 {
00078 KMMsgSignatureStateUnknown=' ',
00079 KMMsgNotSigned='N',
00080 KMMsgPartiallySigned='P',
00081 KMMsgFullySigned='F',
00082 KMMsgSignatureProblematic='X'
00083 } KMMsgSignatureState;
00084
00086 typedef enum
00087 {
00088 KMMsgMDNStateUnknown = ' ',
00089 KMMsgMDNNone = 'N',
00090 KMMsgMDNIgnore = 'I',
00091 KMMsgMDNDisplayed = 'R',
00092 KMMsgMDNDeleted = 'D',
00093 KMMsgMDNDispatched = 'F',
00094 KMMsgMDNProcessed = 'P',
00095 KMMsgMDNDenied = 'X',
00096 KMMsgMDNFailed = 'E'
00097 } KMMsgMDNSentState;
00098
00100 typedef enum
00101 {
00102 KMMsgDnDActionMOVE=0,
00103 KMMsgDnDActionCOPY=1,
00104 KMMsgDnDActionASK=2
00105 } KMMsgDnDAction;
00106
00108 typedef enum
00109 {
00110 KMMsgHasAttachment,
00111 KMMsgHasNoAttachment,
00112 KMMsgAttachmentUnknown
00113 } KMMsgAttachmentState;
00114
00115
00116 class KMMsgBase
00117 {
00118 public:
00119 KMMsgBase(KMFolder* p=0);
00120 virtual ~KMMsgBase();
00121
00123 KMFolderIndex* storage() const;
00124
00126 KMFolder* parent() const { return mParent; }
00127
00129 void setParent(KMFolder* p) { mParent = p; }
00130
00132 static QCString statusToStr(const KMMsgStatus status);
00133
00135 QString statusToSortRank();
00136
00138 virtual bool isMessage(void) const;
00139
00141 virtual bool isUnread(void) const;
00142
00144 virtual bool isNew(void) const;
00145
00147 virtual bool isOfUnknownStatus(void) const;
00148
00150 virtual bool isOld(void) const;
00151
00153 virtual bool isRead(void) const;
00154
00156 virtual bool isDeleted(void) const;
00157
00159 virtual bool isReplied(void) const;
00160
00162 virtual bool isForwarded(void) const;
00163
00165 virtual bool isQueued(void) const;
00166
00168 virtual bool isSent(void) const;
00169
00171 virtual bool isImportant(void) const;
00172
00174 virtual bool isWatched(void) const;
00175
00177 virtual bool isIgnored(void) const;
00178
00180 virtual bool isSpam(void) const;
00181
00183 virtual bool isHam(void) const;
00184
00185
00187 virtual KMMsgStatus status(void) const = 0;
00188
00191 virtual void setStatus(const KMMsgStatus status, int idx = -1);
00192 virtual void toggleStatus(const KMMsgStatus status, int idx = -1);
00193 virtual void setStatus(const char* statusField, const char* xstatusField=0);
00194
00196 virtual KMMsgEncryptionState encryptionState() const = 0;
00197
00199 virtual KMMsgSignatureState signatureState() const = 0;
00200
00202 virtual KMMsgMDNSentState mdnSentState() const = 0;
00203
00205 virtual void setMDNSentState( KMMsgMDNSentState status, int idx=-1 );
00206
00210 virtual void setEncryptionState(const KMMsgEncryptionState, int idx = -1);
00211
00215 virtual void setSignatureState(const KMMsgSignatureState, int idx = -1);
00216
00220 virtual void setEncryptionStateChar( QChar status, int idx = -1 );
00221
00225 virtual void setSignatureStateChar( QChar status, int idx = -1 );
00226
00228 virtual QString subject(void) const = 0;
00229 virtual QString fromStrip(void) const = 0;
00230 virtual QString toStrip(void) const = 0;
00231 virtual QString replyToIdMD5(void) const = 0;
00232 virtual QString msgIdMD5(void) const = 0;
00233 virtual QString replyToAuxIdMD5() const = 0;
00234 virtual QString strippedSubjectMD5() const = 0;
00235 virtual bool subjectIsPrefixed() const = 0;
00236 virtual time_t date(void) const = 0;
00237 virtual QString dateStr(void) const;
00238 virtual QString xmark(void) const = 0;
00239
00241 virtual void setDate(const QCString &aStrDate);
00242 virtual void setDate(time_t aUnixTime) = 0;
00243
00245 virtual bool dirty(void) const { return mDirty; }
00246
00248 void setDirty(bool b) { mDirty = b; }
00249
00251 virtual void setSubject(const QString&) = 0;
00252 virtual void setXMark(const QString&) = 0;
00253
00255 virtual void initStrippedSubjectMD5() = 0;
00256
00258 const uchar *asIndexString(int &len) const;
00259
00261 virtual off_t folderOffset(void) const = 0;
00262 virtual void setFolderOffset(off_t offs) = 0;
00263
00265 virtual QString fileName(void) const = 0;
00266 virtual void setFileName(const QString& filename) = 0;
00267
00269 virtual size_t msgSize(void) const = 0;
00270 virtual void setMsgSize(size_t sz) = 0;
00271
00273 virtual size_t msgSizeServer(void) const = 0;
00274 virtual void setMsgSizeServer(size_t sz) = 0;
00275
00277 virtual ulong UID(void) const = 0;
00278 virtual void setUID(ulong uid) = 0;
00279
00281 virtual void setIndexOffset(off_t off) { mIndexOffset = off; }
00282 virtual off_t indexOffset() const { return mIndexOffset; }
00283
00285 virtual void setIndexLength(short len) { mIndexLength = len; }
00286 virtual short indexLength() const { return mIndexLength; }
00287
00292 static QString skipKeyword(const QString& str, QChar sepChar=':',
00293 bool* keywordFound=0);
00294
00297 static const QTextCodec* codecForName(const QCString& _str);
00298
00302 static QCString toUsAscii(const QString& _str, bool *ok=0);
00303
00305 static QStringList supportedEncodings(bool usAscii);
00306
00308 void assign(const KMMsgBase* other);
00309
00311 KMMsgBase& operator=(const KMMsgBase& other);
00312
00314 KMMsgBase( const KMMsgBase& other );
00315
00317 static QCString encodeRFC2047Quoted(const QCString& aStr, bool base64);
00318
00321 static QString decodeRFC2047String(const QCString& aStr);
00322
00325 static QCString encodeRFC2047String(const QString& aStr,
00326 const QCString& charset);
00327
00330 static QCString encodeRFC2231String(const QString& aStr,
00331 const QCString& charset);
00332
00334 static QString decodeRFC2231String(const QCString& aStr);
00335
00339 static QString base64EncodedMD5( const QString & aStr, bool utf8=false );
00340 static QString base64EncodedMD5( const QCString & aStr );
00341 static QString base64EncodedMD5( const char * aStr, int len=-1 );
00342
00348 static QCString autoDetectCharset(const QCString &encoding, const QStringList &encodingList, const QString &text);
00349
00351 virtual unsigned long getMsgSerNum() const;
00352
00354 virtual bool enableUndo() { return mEnableUndo; }
00355 virtual void setEnableUndo( bool enable ) { mEnableUndo = enable; }
00356
00359 bool isComplete();
00361 void setComplete(bool value);
00362
00364 bool readyToShow();
00366 void setReadyToShow(bool);
00367
00369 bool transferInProgress();
00371 void setTransferInProgress(bool value, bool force = false);
00372
00374 virtual KMMsgAttachmentState attachmentState() const;
00375
00382 static QString replacePrefixes( const QString& str,
00383 const QStringList& prefixRegExps,
00384 bool replace,
00385 const QString& newPrefix );
00386
00389 static QString stripOffPrefixes( const QString& str );
00390
00397 QString cleanSubject(const QStringList& prefixRegExps, bool replace,
00398 const QString& newPrefix) const;
00399
00402 QString cleanSubject() const;
00403
00405 QString forwardSubject() const;
00406
00408 QString replySubject() const;
00409
00412 static void readConfig();
00413
00414 protected:
00415 KMFolder* mParent;
00416 off_t mIndexOffset;
00417 short mIndexLength;
00418 bool mDirty;
00419 bool mEnableUndo;
00420 mutable KMMsgStatus mStatus;
00421
00422
00423 mutable KMLegacyMsgStatus mLegacyStatus;
00424
00425 public:
00426 enum MsgPartType
00427 {
00428 MsgNoPart = 0,
00429
00430 MsgFromPart = 1,
00431 MsgSubjectPart = 2,
00432 MsgToPart = 3,
00433 MsgReplyToIdMD5Part = 4,
00434 MsgIdMD5Part = 5,
00435 MsgXMarkPart = 6,
00436
00437 MsgOffsetPart = 7,
00438 MsgLegacyStatusPart = 8,
00439 MsgSizePart = 9,
00440 MsgDatePart = 10,
00441 MsgFilePart = 11,
00442 MsgCryptoStatePart = 12,
00443 MsgMDNSentPart = 13,
00444
00445 MsgReplyToAuxIdMD5Part = 14,
00446 MsgStrippedSubjectMD5Part = 15,
00447
00448 MsgStatusPart = 16,
00449 MsgSizeServerPart = 17,
00450 MsgUIDPart = 18
00451 };
00453 off_t getLongPart(MsgPartType) const;
00455 QString getStringPart(MsgPartType) const;
00457 bool syncIndexString() const;
00458 };
00459
00460 #endif