12 #include <sys/types.h>
14 #include <mimelib/string.h>
15 #include "kmmsgbase.h"
18 #include <kmime_mdn.h>
20 #include<libemailfunctions/email.h>
36 class KMForwardDigestCommand;
43 typedef TQValueList<Address> AddressList;
44 typedef TQValueList<AddrSpec> AddrSpecList;
60 enum ReplyStrategy { ReplySmart = 0,
68 class KMMessage:
public KMMsgBase,
public KMail::ISubject
70 friend class ::KMForwardDigestCommand;
74 using KMMsgBase::parent;
75 using KMMsgBase::setParent;
76 using KMMsgBase::enableUndo;
77 using KMMsgBase::setEnableUndo;
78 using KMMsgBase::isRead;
79 using KMMsgBase::isUnread;
80 using KMMsgBase::isNew;
81 using KMMsgBase::isOld;
82 using KMMsgBase::isWatched;
83 using KMMsgBase::isIgnored;
84 using KMMsgBase::setEncryptionStateChar;
85 using KMMsgBase::setSignatureStateChar;
101 #if 0 // currently unused
116 const KMMsgBase &
toMsgBase()
const {
return *
this; }
165 TQString selection=TQString(),
bool noQuote =
false,
166 bool allowDecryption =
true,
167 const TQString &tmpl = TQString(),
168 const TQString &originatingAccount = TQString() );
206 KMime::MDN::DispositionType d,
208 TQValueList<KMime::MDN::DispositionModifier> m=TQValueList<KMime::MDN::DispositionModifier>() );
211 void sanitizeHeaders(
const TQStringList& whiteList = TQStringList() );
215 void fromString(
const TQCString& str,
bool setStatus=
false);
216 void fromByteArray(
const TQByteArray & ba,
bool setStatus=
false);
223 const DwMessage *asDwMessage();
262 TQCString& parsedString,
263 const TQTextCodec*&
codec,
264 bool& isHTML )
const;
302 TQString dateIsoStr()
const;
304 void setDate(
const TQCString& str);
305 void setDate(time_t aUnixTime);
312 void setTo(
const TQString& aStr);
313 TQString toStrip()
const;
317 void setReplyTo(
const TQString &aStr );
322 void setCc(
const TQString &aStr );
323 TQString ccStrip()
const;
326 TQString
bcc()
const;
327 void setBcc(
const TQString &aStr );
330 TQString
fcc()
const;
331 void setFcc(
const TQString &aStr );
334 TQString
drafts()
const {
return mDrafts; }
335 void setDrafts(
const TQString &aStr );
339 void setTemplates(
const TQString &aStr );
342 TQString
from()
const;
343 void setFrom(
const TQString& aStr);
344 TQString fromStrip()
const;
353 TQString
who()
const;
357 void setSubject(
const TQString& aStr);
363 TQString
xmark()
const;
364 void setXMark(
const TQString& aStr);
368 void setReplyToId(
const TQString& aStr);
369 TQString replyToIdMD5()
const;
404 TQString& brokenAddress );
416 TQString
msgId()
const;
417 void setMsgId(
const TQString& aStr);
418 TQString msgIdMD5()
const;
422 void setReferences(
const TQCString& aStr);
425 TQCString
id()
const;
439 enum HeaderFieldType { Unstructured, Structured, Address };
445 void setHeaderField(
const TQCString& name,
const TQString& value,
446 HeaderFieldType type = Unstructured,
447 bool prepend =
false );
450 TQStringList
headerFields(
const TQCString& name )
const;
461 TQValueList<TQCString>
rawHeaderFields(
const TQCString & field )
const;
464 static KMime::Types::AddressList
splitAddrField(
const TQCString & str );
469 KMime::Types::AddressList
headerAddrField(
const TQCString& name)
const;
470 KMime::Types::AddrSpecList extractAddrSpecs(
const TQCString & headerNames )
const;
483 void setTypeStr(
const TQCString& aStr);
484 void setType(
int aType);
488 void setSubtypeStr(
const TQCString& aStr);
489 void setSubtype(
int aSubtype);
492 const TQCString& attr,
493 const TQCString& val );
523 int contentTransferEncoding( DwEntity *entity = 0 )
const;
524 void setContentTransferEncodingStr(
const TQCString& cteString, DwEntity *entity = 0 );
525 void setContentTransferEncoding(
int cte, DwEntity *entity = 0 );
532 int cte( DwEntity *entity = 0 )
const {
return contentTransferEncoding( entity ); }
533 void setCteStr(
const TQCString& aStr, DwEntity *entity = 0 ) {
534 setContentTransferEncodingStr( aStr, entity );
536 void setCte(
int aCte, DwEntity *entity = 0 ) {
537 setContentTransferEncoding( aCte, entity );
554 TQCString
body()
const;
557 void setBody(
const TQCString& aStr);
558 void setBody(
const DwString& aStr);
559 void setBody(
const char* aStr);
573 void setBodyEncoded(
const TQCString& aStr, DwEntity *entity = 0 );
574 void setBodyEncodedBinary(
const TQByteArray& aStr, DwEntity *entity = 0 );
597 bool allow8Bit =
false,
598 bool willBeSigned =
false,
599 DwEntity *entity = 0 );
602 TQValueList<int>& allowedCte,
603 bool allow8Bit =
false,
604 bool willBeSigned =
false,
605 DwEntity *entity = 0 );
611 TQByteArray bodyDecodedBinary()
const;
623 DwBodyPart *
findDwBodyPart(
const TQCString& type,
const TQCString& subtype )
const;
627 DwBodyPart*
findDwBodyPart( DwBodyPart* part,
const TQString & partSpecifier );
635 int partNumber( DwBodyPart * aDwBodyPart )
const;
640 DwMessage * getTopLevelPart()
const {
return mMsg; }
645 static void bodyPart(DwBodyPart* aDwBodyPart, KMMessagePart* aPart,
646 bool withBody =
true );
651 void bodyPart(
int aIdx, KMMessagePart* aPart)
const;
686 static TQCString
html2source(
const TQCString & src );
714 bool removeLineBreaks =
false );
721 bool stripped=
true,
const TQString& cssStyle = TQString(),
bool link =
true);
727 const TQStringList& addresses );
737 const TQStringList& addresses );
755 static TQString
smartQuote(
const TQString &msg,
int maxLineLength );
780 const TQTextCodec *
codec()
const;
787 { mDecodeHTML = aDecodeHTML; }
800 void setFolderOffset(off_t offs) {
if(mFolderOffset != offs) { mFolderOffset=offs; setDirty(
true); } }
804 void setFileName(
const TQString& file) {
if(mFileName != file) { mFileName=file; setDirty(
true); } }
808 void setOriginatingAccountName(
const TQString& account) {
if(mOriginatingAccountName != account) { mOriginatingAccountName=account; setDirty(
true); } }
814 void setMsgSize(
size_t sz) {
if(mMsgSize != sz) { mMsgSize = sz; setDirty(
true); } }
819 {
return (mMsgLength) ? mMsgLength : mMsgSize; }
820 void setMsgLength(
size_t sz) { mMsgLength = sz; }
824 void setMsgSizeServer(
size_t sz);
828 void setUID(ulong uid);
831 KMMsgStatus
status()
const {
return mStatus; }
842 void setMDNSentState( KMMsgMDNSentState
status,
int idx=-1 );
850 KMMsgMDNSentState mdnSentState()
const {
return mMDNSentState; }
856 void getLink(
int n, ulong *retMsgSerNum, KMMsgStatus *reStatus)
const;
862 void updateBodyPart(
const TQString partSpecifier,
const TQByteArray & data);
877 void updateAttachmentState( DwBodyPart *part = 0 );
878 void updateInvitationState();
907 const TQString & indentStr,
908 const TQString & selection=TQString(),
909 bool aStripSignature=
true,
910 bool allowDecryption=
true)
const;
914 TQString
asPlainText(
bool stripSignature,
bool allowDecryption )
const;
923 bool allowDecryption )
const;
938 bool isBeingParsed()
const {
return mIsParsed; }
939 void setIsBeingParsed(
bool t ) { mIsParsed = t; }
944 DwBodyPart* findPart(
int index );
949 void init( DwMessage* aMsg = 0 );
953 DwBodyPart* findPartInternal( DwEntity* root,
int index,
int &accu );
957 mutable DwMessage* mMsg;
958 mutable bool mNeedsAssembly :1;
960 bool mReadyToShow :1;
963 static const KMail::HeaderStrategy * sHeaderStrategy;
964 static TQString sForwardStr;
965 const TQTextCodec * mOverrideCodec;
968 TQString mOriginatingAccountName;
970 size_t mMsgSize, mMsgLength;
972 KMMsgEncryptionState mEncryptionState;
973 KMMsgSignatureState mSignatureState;
974 KMMsgMDNSentState mMDNSentState;
976 DwBodyPart* mLastUpdated;
979 static TQValueList<KMMessage*> sPendingDeletes;