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