00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#include "kmime_message.h"
00018
00019
using namespace KMime;
00020
00021
namespace KMime {
00022
00023 Message::Message()
00024 {
00025 s_ubject.setParent(
this);
00026 d_ate.setParent(
this);
00027 }
00028
00029 Message::~Message() {}
00030
00031
void Message::parse()
00032 {
00033 Content::parse();
00034
00035
QCString raw;
00036
if( !(raw=rawHeader(s_ubject.type())).isEmpty() )
00037 s_ubject.from7BitString(raw);
00038
00039
if( !(raw=rawHeader(d_ate.type())).isEmpty() )
00040 d_ate.from7BitString(raw);
00041 }
00042
00043
00044
void Message::assemble()
00045 {
00046
Headers::Base *h;
00047
QCString newHead=
"";
00048
00049
00050
if( (h=messageID(
false))!=0 )
00051 newHead+=h->
as7BitString()+
"\n";
00052
00053
00054 h=from();
00055 newHead+=h->
as7BitString()+
"\n";
00056
00057
00058 h=subject();
00059 newHead+=h->
as7BitString()+
"\n";
00060
00061
00062
if( (h=to(
false))!=0 )
00063 newHead+=h->
as7BitString()+
"\n";
00064
00065
00066
if( (h=replyTo(
false))!=0 )
00067 newHead+=h->
as7BitString()+
"\n";
00068
00069
00070 h=date();
00071 newHead+=h->
as7BitString()+
"\n";
00072
00073
00074
if( (h=references(
false))!=0 )
00075 newHead+=h->
as7BitString()+
"\n";
00076
00077
00078
if( (h=organization(
false))!=0 )
00079 newHead+=h->
as7BitString()+
"\n";
00080
00081
00082 newHead+=
"MIME-Version: 1.0\n";
00083
00084
00085 newHead+=contentType()->as7BitString()+
"\n";
00086
00087
00088 newHead+=contentTransferEncoding()->as7BitString()+
"\n";
00089
00090
00091
int pos=h_ead.find(
"\nX-");
00092
if(pos>-1)
00093 newHead+=h_ead.mid(++pos, h_ead.length()-pos);
00094
else if(h_eaders && !h_eaders->isEmpty()) {
00095
for(h=h_eaders->first(); h; h=h_eaders->next()) {
00096
if( h->
isXHeader() && (strncasecmp(h->
type(),
"X-KNode", 7)!=0) )
00097 newHead+=h->
as7BitString()+
"\n";
00098 }
00099 }
00100
00101 h_ead=newHead;
00102 }
00103
00104
00105
void Message::clear()
00106 {
00107 s_ubject.clear();
00108 d_ate.clear();
00109 f_lags.clear();
00110 Content::clear();
00111 }
00112
00113
00114
Headers::Base* Message::getHeaderByType(
const char *type)
00115 {
00116
if(strcasecmp(
"Subject", type)==0) {
00117
if(s_ubject.isEmpty())
return 0;
00118
else return &s_ubject;
00119 }
00120
else if(strcasecmp(
"Date", type)==0){
00121
if(d_ate.isEmpty())
return 0;
00122
else return &d_ate;
00123 }
00124
else
00125
return Content::getHeaderByType(type);
00126 }
00127
00128
00129
void Message::setHeader(
Headers::Base *h)
00130 {
00131
bool del=
true;
00132
if(h->
is(
"Subject"))
00133 s_ubject.fromUnicodeString(h->
asUnicodeString(), h->
rfc2047Charset());
00134
else if(h->
is(
"Date"))
00135 d_ate.setUnixTime( (static_cast<Headers::Date*>(h))->unixTime() );
00136
else {
00137 del=
false;
00138 Content::setHeader(h);
00139 }
00140
00141
if(del)
delete h;
00142 }
00143
00144
00145
bool Message::removeHeader(
const char *type)
00146 {
00147
if(strcasecmp(
"Subject", type)==0)
00148 s_ubject.clear();
00149
else if(strcasecmp(
"Date", type)==0)
00150 d_ate.clear();
00151
else
00152
return Content::removeHeader(type);
00153
00154
return true;
00155 }
00156
00157
00158
00159
00160 }