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.
kshowmail/kshowmail/showrecordelem.h

448 lines
12 KiB

/***************************************************************************
showrecord.h - description
-------------------
begin : Thu Dec 28 2000
copyright : (C) 2000-2001 by Eggert Ehmke
email : eggert.ehmke@berlin.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef SHOWRECORDELEM_H
#define SHOWRECORDELEM_H
//TQt headers
#include <tqdom.h>
#include <tqstring.h>
#include <tqlistview.h>
#include <tqdatetime.h>
//KDE headers
#include <tdelocale.h>
#include <tdeglobal.h>
#include <kdebug.h>
#include <mimelib/datetime.h>
#include <kmdcodec.h>
//KShowmail headers
#include "showlistviewitem.h"
#include "decodeRFC2047.h"
#include "constants.h"
#include "kshowmailview.h"
#include "showheaderdialog.h"
#include "headerfilter.h"
#include "filterlog.h"
using namespace Constants;
//forward class declarations
class KshowmailView;
class FilterElem;
/**
* @short Represents a mail.
*
* It contains UID, Subject, From, To and date of the mail. Subject, From and To
* will be read out from the given header. It also contains pointer to the
* corresponding list view entry and maybe to a matching filter.
* All mail objects are held by ShowRecord.
* @see ShowRecord
* @see ConfigElem
* @author Eggert Ehmke
*/
class ShowRecordElem
{
public:
/**
* Returned by showHeader(), if the user has
* clicked OK.
*/
static const int continueShowHeaders;
/**
* Returned by showHeader(), if the user has
* clicked Cancel.
*/
static const int cancelShowHeaders;
/**
* Constructor
*/
ShowRecordElem ();
/**
* Constructor
* @param number number of the mail on the server
* @param uid Unique ID of the mail
* @param isNew TRUE - mail is new; FALSE - mail is not new
*/
ShowRecordElem( int number, TQString& uid, bool isNew );
/**
* Sets the mail header and extracts From, To, Subject, Date and Content Type.
* All parts of the header are coded according RFC 2047.
* @param header the mail header
*/
void setHeader( const TQString& header );
/**
* Returns the whole header.
* @return the mail header
*/
TQString header() const;
/**
* Returns the sender address.
* @return sender address
*/
TQString from() const;
/**
* Returns the addressee.
* @return the addressee
*/
TQString to() const;
/**
* Returns the subject.
* @return mail subject
*/
TQString subject() const;
/**
* Returns the stored content type.
* @return content type
*/
TQString content() const;
/**
* Returns the date on which the mail was sent, formated to the current
* locale's conventions.
* @return the date
*/
TQString date() const;
/**
* Returns the date on which the mail was sent.
* The format corresponds to the ISO 8601 extended specification for
* representations of dates and times, which is YYYY-MM-DDTHH:MM:SS
* @return the date
*/
TQString strUnixTime () const;
/**
* Returns the date and time on which the mail was sent.
* @return the date
*/
TQDateTime sentDateTime() const;
/**
* Sets the unique mail ID.
* @param uid the ID
*/
void setUIDL( const TQString& uid );
/**
* Returns the unique ID of this mail.
* @return UID
*/
TQString uidl() const;
/**
* Sets the size of the mail.
* @param size Size
*/
void setSize( int size );
/**
* Returns the mail size as numeric value.
* @return size of the mail
*/
int size() const;
/**
* Returns the mail size as string.
* The String has a length of 8 and the number is right-aligned to allow sorting.
*/
TQString strSize () const;
/**
* Returns the mails size as string with prefix
*/
TQString strSizePrefix() const;
/**
* Sets whether the mail is new or not.
* @param isnew TRUE - mail is new; FALSE - mail is not new
*/
void setNew( bool isnew );
/**
* Returns whether the mail is new or not.
* @return TRUE - mail is new
* @return FALSE - mail is not new
*/
bool isNew() const;
/**
* Returns whether the mail is new or not.
* @return localized String "new", if the mail is new
* @return localized String "old", if the mail is not new
*/
TQString state() const;
/**
* Sets the number of this mail.
* @param n mail number
*/
void setNumber( int n );
/**
* Returns the number of this mail.
* @return mail number
*/
int number() const;
/**
* Sets the pointer to the corresponding list view item.
* @see m_pItem
* @see ShowListViewItem
* @param item pointer to the corresponding item
*/
void setViewItem( ShowListViewItem* item );
/**
* Returns the pointer to the corresponding list view item.
* @see m_pItem
* @see ShowListViewItem
* @return pointer to the item
*/
ShowListViewItem* viewItem() const;
/**
* Looks for a filter matching the mail header and returns the action recommend by this filter.
* If the action is MARK, it set markAtViewRefresh to True so the related view entry will be marked
* at the next view refresh.
* @param filter pointer to the header filter
* @param account name of the account
* @param mailbox reference to a TQString object in which the mailbox name shall be written if the action is MOVE
* @param log pointer to the filter log
* @return recommend action
* @see FilterAction_Type
* @see HeaderFilter
* @see markAtViewRefresh
*/
FilterAction_Type applyHeaderFilter( HeaderFilter* filter, TQString account, TQString& mailbox, FilterLog* log = NULL );
/**
* Read a mail (header, size, uid and number) from the given DOM element
* and store it in this mail object.
* The element has to contains the attributes "uidl", "size", "number" and
* a child node called "header".
* @param elem a DOM element which contains a mail
*/
void readOptions( TQDomElement& elem );
/**
* Creates a new DOM element in the given DOM document and add it to given
* DOM parent element
* @param doc the DOM document in that all options are stored
* @param parent the parent element (account) of the mail
*/
void saveOptions( TQDomDocument& doc, TQDomElement& parent );
/**
* Returns whether the mail is selected in the list view.
* @return TRUE - mail is selected
* @return FALSE - mail is not selected
*/
bool isSelected() const;
/**
* Decodes the given mail body.
* The mail object has to do this job, because
* it has stored the mail header and therefore it knows the content
* type and encoding of the mail.
* It decodes just the text or html part of the body. The rest of it
* will be rejected.
* @param body the encoded mail (including header)
* @param preferHTML decode HTML part if present
* @return decoded mail body
*/
TQString decodeMailBody( TQByteArray body, bool preferHTML ) const;
/**
* Shows the header in a dialog box.
* @param account account name
* @return continueShowHeaders - the user has OK clicked. The invoking function will show the next header
* @return cancelShowHeaders - the user has Cancel clicked. The invoking function will not show the next header.
*/
int showHeader( TQString& account );
/**
* Writes this mail into the Move Log.
* @param log pointer to the log
* @param account name of the account
* @param mailbox name of the mailbox
*/
void writeToMoveLog( FilterLog* log, TQString account, TQString mailbox );
/**
* Writes this mail into the Delete Log.
* @param log pointer to the log
* @param account name of the account
*/
void writeToDeleteLog( FilterLog* log, TQString account );
/**
* The mail will be marked at the next view refresh.
*/
void setMarkAtNextViewRefresh();
private:
/**
* Mail header; coded according RFC 2047
*/
TQCString m_header;
/**
* The sender address; coded according RFC 2047
*/
TQCString m_from;
/**
* The addressee; coded according RFC 2047
*/
TQCString m_to;
/**
* The subject; coded according RFC 2047
*/
TQCString m_subject;
/**
* The date on which the mail was sent
*/
TQDateTime m_unixDate;
/**
* The content type
*/
TQCString m_content;
/**
* The unique ID of the mail.
*/
TQString m_uid;
/**
* Size of the mail
*/
int m_size;
/**
* It is set to TRUE when the mail is new.
*/
bool m_new;
/**
* The mail number of the account
*/
int m_nNumber;
/**
* TRUE - the mail shall be marked at the next mail view refresh.
* It will be set to True by applyHeaderFilter() if the recommend filter action is MARK.
* It is used by setViewItem(). This methode marks the related list entry and after then it set
* this variable to False.
*/
bool markAtViewRefresh;
/**
* Pointer to the corresponding list view entry. Used to check
* whether the entry is highlighted and we have to process this mail.
* @see ShowListViewItem
*/
ShowListViewItem* m_pItem;
/**
* Searches in the header for a line which starts with the
* given item.
* For example:
* scanHeader( "From") will find the line
* "From: Ulrich Weigelt <ulrich.weigelt@gmx.de>"
* and returns "Ulrich Weigelt <ulrich.weigelt@gmx.de>"
* Returns an empty string (""), if nothing was found.
* @param item the search item
* @return the content of the found line
*/
TQCString scanHeader( const TQString& item ) const;
/**
* Sets the given string as sender address
* @param from sender address
*/
void setFrom( const TQCString& from );
/**
* Sets the given string as recipient address
* @param to recipient address
*/
void setTo( const TQCString& to );
/**
* Sets the given string as subject
* @param subject the mail subject
*/
void setSubject( const TQCString& subject );
/**
* Converts the given string to a date-time value and stores it.
* @param date the date
*/
void setDate( const TQCString& date );
/**
* Sets the given string as content type.
* @param content the content type
*/
void setContent( const TQCString& content );
/**
* Returns the boundary, if the mail has a multi part body.
* Otherwise it returns an empty string.
* @return boundary
*/
TQString getBoundary() const;
/**
* Returns the char set of the content (e.g. iso-8859-1).
* If no char set is denoted, it will returns an empty string.
* @return charset
*/
TQString getCharset() const;
/**
* Returns the content transfer encoding of the content
* (e.g. quoted-printable).
* If no encoding is denoted, it will returns an empty string.
* @return content transfer encoding
*/
TQString getTransferEncoding() const;
};
#endif