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.
 
 
 

257 lines
9.2 KiB

/* kmmessage.h: Mime Message Class
*
*/
#ifndef kmmessage_h
#define kmmessage_h
#include <mimelib/string.h>
#include "kmmsgbase.h"
class KMFolder;
class DwMessage;
class KMMessagePart;
class KMMsgInfo;
#define KMMessageInherited KMMsgBase
class KMMessage: public KMMsgBase
{
friend class KMFolder;
public:
/** Straight forward initialization. */
KMMessage(KMFolder* parent=NULL);
/** Constructor from a DwMessage. Handy for KRN*/
KMMessage(DwMessage*);
/** Copy constructor. Does *not* automatically load the message. */
KMMessage(const KMMsgInfo& msgInfo);
/** Destructor. */
virtual ~KMMessage();
/** Returns TRUE if object is a real message (not KMMsgInfo or KMMsgBase) */
virtual bool isMessage(void) const;
/** Mark the message as deleted */
void del(void) { setStatus(KMMsgStatusDeleted); }
/** Undelete the message. Same as touch */
void undel(void) { setStatus(KMMsgStatusOld); }
/** Touch the message - mark it as read */
void touch(void) { setStatus(KMMsgStatusOld); }
/** Create a new message that is a reply to this message, filling all
required header fields with the proper values. The returned message
is not stored in any folder. Marks this message as replied. */
virtual KMMessage* createReply(bool replyToAll=FALSE);
/** Create a new message that is a forward of this message, filling all
required header fields with the proper values. The returned message
is not stored in any folder. Marks this message as forwarded. */
virtual KMMessage* createForward(void);
/** Parse the string and create this message from it. */
virtual void fromString(const QString str);
/** Return the entire message contents as a string. */
virtual const QString asString(void);
/** Return header as string. */
virtual const QString headerAsString(void);
/** Returns message body with quoting header and indented by the
given indentation string. This is suitable for including the message
in another message of for replies, forwards. The header string is
a template where the following fields are replaced with the
corresponding values:
%D: date of this message
%S: subject of this message
%F: sender (from) of this message
%%: a single percent sign */
virtual const QString asQuotedString(const QString headerStr,
const QString indentStr) const;
/** Initialize header fields. Should be called on new messages
if they are not set manually. E.g. before composing. Calling
of setAutomaticFields(), see below, is still required. */
virtual void initHeader(void);
/** Removes empty fields from the header, e.g. an empty Cc: or Bcc:
field. */
virtual void cleanupHeader(void);
/** Set fields that are either automatically set (Message-id)
or that do not change from one message to another (MIME-Version).
Call this method before sending *after* all changes to the message
are done because this method does things different if there are
attachments / multiple body parts. */
virtual void setAutomaticFields(void);
/** Get or set the 'Date' header field */
virtual const QString dateStr(void) const;
virtual const QString dateShortStr(void) const;
virtual time_t date(void) const;
virtual void setDate(const QString str);
virtual void setDate(time_t aUnixTime);
/** Set the 'Date' header field to the current date. */
virtual void setDateToday(void);
/** Get or set the 'To' header field */
virtual const QString to(void) const;
virtual void setTo(const QString aStr);
/** Get or set the 'ReplyTo' header field */
virtual const QString replyTo(void) const;
virtual void setReplyTo(const QString aStr);
virtual void setReplyTo(KMMessage*);
/** Get or set the 'Cc' header field */
virtual const QString cc(void) const;
virtual void setCc(const QString aStr);
/** Get or set the 'Bcc' header field */
virtual const QString bcc(void) const;
virtual void setBcc(const QString aStr);
/** Get or set the 'From' header field */
virtual const QString from(void) const;
virtual void setFrom(const QString aStr);
/** Get or set the 'Subject' header field */
virtual const QString subject(void) const;
virtual void setSubject(const QString aStr);
/** Get or set the 'X-Mark' header field */
virtual const QString xmark(void) const;
virtual void setXMark(const QString aStr);
/** Get the groups it should be posted to (Added for krn)*/
virtual const QString groups(void) const;
/** Set the groups to be posted to (Added for krn)*/
virtual void setGroups(const QString aStr);
/** Get the groups it should followup to (Added for krn)*/
virtual const QString followup(void) const;
/** Set the groups to followup to (Added for krn)*/
virtual void setFollowup(const QString aStr);
/** Get the references for this message (Added for krn)*/
virtual const QString references(void) const;
/** Set the references for this message (Added for krn)*/
virtual void setReferences(const QString aStr);
/** Returns the message ID, useful for followups (Added for krn)*/
virtual const QString id(void) const;
/** Get or set header field with given name */
virtual const QString headerField(const QString name) const;
virtual void setHeaderField(const QString name, const QString value);
/** Remove header field with given name */
virtual void removeHeaderField(const QString name);
/** Get or set the 'Content-Type' header field
The member functions that involve enumerated types (ints)
will work only for well-known types or subtypes. */
virtual const QString typeStr(void) const;
virtual int type(void) const;
virtual void setTypeStr(const QString aStr);
virtual void setType(int aType);
// Subtype
virtual const QString subtypeStr(void) const;
virtual int subtype(void) const;
virtual void setSubtypeStr(const QString aStr);
virtual void setSubtype(int aSubtype);
/** Get or set the 'Content-Transfer-Encoding' header field
The member functions that involve enumerated types (ints)
will work only for well-known encodings. */
virtual const QString contentTransferEncodingStr(void) const;
virtual int contentTransferEncoding(void) const;
virtual void setContentTransferEncodingStr(const QString aStr);
virtual void setContentTransferEncoding(int aCte);
/** Cte is short for ContentTransferEncoding.
These functions are an alternative to the ones with longer names. */
const QString cteStr(void) const { return contentTransferEncodingStr(); }
int cte(void) const { return contentTransferEncoding(); }
void setCteStr(const QString aStr) { setContentTransferEncodingStr(aStr); }
void setCte(int aCte) { setContentTransferEncoding(aCte); }
/** Get the message body. Does not decode the body. */
virtual const QString body(void) const;
/** Set the message body. Does not encode the body. */
virtual void setBody(const QString aStr);
/** Set the message body, encoding it according to the current content
transfer encoding. */
virtual void setBodyEncoded(const QString aStr);
/** Returns a decoded version of the body from the current content transfer
encoding. */
virtual const QString bodyDecoded(void) const;
/** Number of body parts the message has. This is one for plain messages
without any attachment. */
virtual int numBodyParts(void) const;
/** Get the body part at position in aIdx. Indexing starts at 0.
If there is no body part at that index, aPart will have its
attributes set to empty values. */
virtual void bodyPart(int aIdx, KMMessagePart* aPart) const;
/** Set the body part at position in aIdx. Indexing starts at 0.
If you have aIdx = 10 and there are only 2 body parts, 7 empty
body parts will be created to fill slots 2 through 8. If you
just want to add a body part at the end, use AddBodyPart().
*/
virtual void setBodyPart(int aIdx, const KMMessagePart* aPart);
/** Append a body part to the message. */
virtual void addBodyPart(const KMMessagePart* aPart);
/** Delete all body parts. */
virtual void deleteBodyParts(void);
/** Open a window containing the complete, unparsed, message. */
virtual void viewSource(const QString windowCaption) const;
/** Set "Status" and "X-Status" fields of the message from the
* internal message status. */
virtual void setStatusFields(void);
/** Strip email address from string. Examples:
* "Stefan Taferner <taferner@kde.org>" returns "Stefan Taferner"
* "joe@nowhere.com" returns "joe@nowhere.com" */
static const QString stripEmailAddr(const QString emailAddr);
/** Converts given email address to a nice HTML mailto: anchor.
* If stripped is TRUE then the visible part of the anchor contains
* only the name part and not the given emailAddr. */
static const QString emailAddrAsAnchor(const QString emailAddr,
bool stripped=TRUE);
#ifdef KRN
/** Convert a normal References: header into a list of anchors
to news URLs for the referred articles. Right now, only for KRN. */
static const QString refsAsAnchor(const QString references);
#endif
/** Reads config settings from group "KMMessage" and sets all internal
* variables (e.g. indent-prefix, etc.) */
static void readConfig(void);
protected:
DwMessage* mMsg;
bool mNeedsAssembly;
};
typedef KMMessage* KMMessagePtr;
#endif /*kmmessage_h*/