libkmime
kmime_message.cpp00001
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 TQCString 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 TQCString 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=cc(false))!=0 )
00067 newHead+=h->as7BitString()+"\n";
00068
00069
00070 if( (h=replyTo(false))!=0 )
00071 newHead+=h->as7BitString()+"\n";
00072
00073
00074 h=date();
00075 newHead+=h->as7BitString()+"\n";
00076
00077
00078 if( (h=references(false))!=0 )
00079 newHead+=h->as7BitString()+"\n";
00080
00081
00082 if( (h=organization(false))!=0 )
00083 newHead+=h->as7BitString()+"\n";
00084
00085
00086 if( (h=userAgent(false))!=0 )
00087 newHead+=h->as7BitString()+"\n";
00088
00089
00090 newHead+="MIME-Version: 1.0\n";
00091
00092
00093 newHead+=contentType()->as7BitString()+"\n";
00094
00095
00096 newHead+=contentTransferEncoding()->as7BitString()+"\n";
00097
00098
00099 int pos=h_ead.find("\nX-");
00100 if(pos>-1)
00101 newHead+=h_ead.mid(pos+1, h_ead.length()-pos-1);
00102 else if(h_eaders && !h_eaders->isEmpty()) {
00103 for(h=h_eaders->first(); h; h=h_eaders->next()) {
00104 if( h->isXHeader() && (strncasecmp(h->type(), "X-KNode", 7)!=0) )
00105 newHead+=h->as7BitString()+"\n";
00106 }
00107 }
00108
00109 h_ead=newHead;
00110 }
00111
00112
00113 void Message::clear()
00114 {
00115 s_ubject.clear();
00116 d_ate.clear();
00117 f_lags.clear();
00118 Content::clear();
00119 }
00120
00121
00122 Headers::Base* Message::getHeaderByType(const char *type)
00123 {
00124 if(strcasecmp("Subject", type)==0) {
00125 if(s_ubject.isEmpty()) return 0;
00126 else return &s_ubject;
00127 }
00128 else if(strcasecmp("Date", type)==0){
00129 if(d_ate.isEmpty()) return 0;
00130 else return &d_ate;
00131 }
00132 else
00133 return Content::getHeaderByType(type);
00134 }
00135
00136
00137 void Message::setHeader(Headers::Base *h)
00138 {
00139 bool del=true;
00140 if(h->is("Subject"))
00141 s_ubject.fromUnicodeString(h->asUnicodeString(), h->rfc2047Charset());
00142 else if(h->is("Date"))
00143 d_ate.setUnixTime( (static_cast<Headers::Date*>(h))->unixTime() );
00144 else {
00145 del=false;
00146 Content::setHeader(h);
00147 }
00148
00149 if(del) delete h;
00150 }
00151
00152
00153 bool Message::removeHeader(const char *type)
00154 {
00155 if(strcasecmp("Subject", type)==0)
00156 s_ubject.clear();
00157 else if(strcasecmp("Date", type)==0)
00158 d_ate.clear();
00159 else
00160 return Content::removeHeader(type);
00161
00162 return true;
00163 }
00164
00165
00166
00167
00168 }
|