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() );
205 KMime::MDN::DispositionType d,
207 TQValueList<KMime::MDN::DispositionModifier> m=TQValueList<KMime::MDN::DispositionModifier>() );
210 void sanitizeHeaders(
const TQStringList& whiteList = TQStringList() );
214 void fromString(
const TQCString& str,
bool setStatus=
false);
215 void fromByteArray(
const TQByteArray & ba,
bool setStatus=
false);
222 const DwMessage *asDwMessage();
261 TQCString& parsedString,
262 const TQTextCodec*&
codec,
263 bool& isHTML )
const;
301 TQString dateIsoStr()
const;
303 void setDate(
const TQCString& str);
304 void setDate(time_t aUnixTime);
311 void setTo(
const TQString& aStr);
312 TQString toStrip()
const;
316 void setReplyTo(
const TQString &aStr );
321 void setCc(
const TQString &aStr );
322 TQString ccStrip()
const;
325 TQString
bcc()
const;
326 void setBcc(
const TQString &aStr );
329 TQString
fcc()
const;
330 void setFcc(
const TQString &aStr );
333 TQString
drafts()
const {
return mDrafts; }
334 void setDrafts(
const TQString &aStr );
338 void setTemplates(
const TQString &aStr );
341 TQString
from()
const;
342 void setFrom(
const TQString& aStr);
343 TQString fromStrip()
const;
352 TQString
who()
const;
356 void setSubject(
const TQString& aStr);
362 TQString
xmark()
const;
363 void setXMark(
const TQString& aStr);
367 void setReplyToId(
const TQString& aStr);
368 TQString replyToIdMD5()
const;
403 TQString& brokenAddress );
415 TQString
msgId()
const;
416 void setMsgId(
const TQString& aStr);
417 TQString msgIdMD5()
const;
421 void setReferences(
const TQCString& aStr);
424 TQCString
id()
const;
438 enum HeaderFieldType { Unstructured, Structured, Address };
444 void setHeaderField(
const TQCString& name,
const TQString& value,
445 HeaderFieldType type = Unstructured,
446 bool prepend =
false );
449 TQStringList
headerFields(
const TQCString& name )
const;
460 TQValueList<TQCString>
rawHeaderFields(
const TQCString & field )
const;
463 static KMime::Types::AddressList
splitAddrField(
const TQCString & str );
468 KMime::Types::AddressList
headerAddrField(
const TQCString& name)
const;
469 KMime::Types::AddrSpecList extractAddrSpecs(
const TQCString & headerNames )
const;
482 void setTypeStr(
const TQCString& aStr);
483 void setType(
int aType);
487 void setSubtypeStr(
const TQCString& aStr);
488 void setSubtype(
int aSubtype);
491 const TQCString& attr,
492 const TQCString& val );
522 int contentTransferEncoding( DwEntity *entity = 0 )
const;
523 void setContentTransferEncodingStr(
const TQCString& cteString, DwEntity *entity = 0 );
524 void setContentTransferEncoding(
int cte, DwEntity *entity = 0 );
531 int cte( DwEntity *entity = 0 )
const {
return contentTransferEncoding( entity ); }
532 void setCteStr(
const TQCString& aStr, DwEntity *entity = 0 ) {
533 setContentTransferEncodingStr( aStr, entity );
535 void setCte(
int aCte, DwEntity *entity = 0 ) {
536 setContentTransferEncoding( aCte, entity );
553 TQCString
body()
const;
556 void setBody(
const TQCString& aStr);
557 void setBody(
const DwString& aStr);
558 void setBody(
const char* aStr);
572 void setBodyEncoded(
const TQCString& aStr, DwEntity *entity = 0 );
573 void setBodyEncodedBinary(
const TQByteArray& aStr, DwEntity *entity = 0 );
596 bool allow8Bit =
false,
597 bool willBeSigned =
false,
598 DwEntity *entity = 0 );
601 TQValueList<int>& allowedCte,
602 bool allow8Bit =
false,
603 bool willBeSigned =
false,
604 DwEntity *entity = 0 );
610 TQByteArray bodyDecodedBinary()
const;
622 DwBodyPart *
findDwBodyPart(
const TQCString& type,
const TQCString& subtype )
const;
626 DwBodyPart*
findDwBodyPart( DwBodyPart* part,
const TQString & partSpecifier );
634 int partNumber( DwBodyPart * aDwBodyPart )
const;
639 DwMessage * getTopLevelPart()
const {
return mMsg; }
644 static void bodyPart(DwBodyPart* aDwBodyPart, KMMessagePart* aPart,
645 bool withBody =
true );
650 void bodyPart(
int aIdx, KMMessagePart* aPart)
const;
685 static TQCString
html2source(
const TQCString & src );
713 bool removeLineBreaks =
false );
720 bool stripped=
true,
const TQString& cssStyle = TQString(),
bool link =
true);
726 const TQStringList& addresses );
736 const TQStringList& addresses );
754 static TQString
smartQuote(
const TQString &msg,
int maxLineLength );
779 const TQTextCodec *
codec()
const;
786 { mDecodeHTML = aDecodeHTML; }
799 void setFolderOffset(off_t offs) {
if(mFolderOffset != offs) { mFolderOffset=offs; setDirty(
true); } }
803 void setFileName(
const TQString& file) {
if(mFileName != file) { mFileName=file; setDirty(
true); } }
809 void setMsgSize(
size_t sz) {
if(mMsgSize != sz) { mMsgSize = sz; setDirty(
true); } }
814 {
return (mMsgLength) ? mMsgLength : mMsgSize; }
815 void setMsgLength(
size_t sz) { mMsgLength = sz; }
819 void setMsgSizeServer(
size_t sz);
823 void setUID(ulong uid);
826 KMMsgStatus
status()
const {
return mStatus; }
837 void setMDNSentState( KMMsgMDNSentState
status,
int idx=-1 );
845 KMMsgMDNSentState mdnSentState()
const {
return mMDNSentState; }
851 void getLink(
int n, ulong *retMsgSerNum, KMMsgStatus *reStatus)
const;
857 void updateBodyPart(
const TQString partSpecifier,
const TQByteArray & data);
872 void updateAttachmentState( DwBodyPart *part = 0 );
873 void updateInvitationState();
902 const TQString & indentStr,
903 const TQString & selection=TQString(),
904 bool aStripSignature=
true,
905 bool allowDecryption=
true)
const;
909 TQString
asPlainText(
bool stripSignature,
bool allowDecryption )
const;
918 bool allowDecryption )
const;
933 bool isBeingParsed()
const {
return mIsParsed; }
934 void setIsBeingParsed(
bool t ) { mIsParsed = t; }
939 DwBodyPart* findPart(
int index );
944 void init( DwMessage* aMsg = 0 );
948 DwBodyPart* findPartInternal( DwEntity* root,
int index,
int &accu );
952 mutable DwMessage* mMsg;
953 mutable bool mNeedsAssembly :1;
955 bool mReadyToShow :1;
958 static const KMail::HeaderStrategy * sHeaderStrategy;
959 static TQString sForwardStr;
960 const TQTextCodec * mOverrideCodec;
964 size_t mMsgSize, mMsgLength;
966 KMMsgEncryptionState mEncryptionState;
967 KMMsgSignatureState mSignatureState;
968 KMMsgMDNSentState mMDNSentState;
970 DwBodyPart* mLastUpdated;
973 static TQValueList<KMMessage*> sPendingDeletes;