KMIME Library
kmime_newsarticle.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "kmime_newsarticle.h"
00025 #include "kmime_message_p.h"
00026 #include "kmime_util_p.h"
00027
00028 using namespace KMime;
00029
00030 namespace KMime {
00031
00032 class NewsArticlePrivate : public MessagePrivate
00033 {
00034 public:
00035 NewsArticlePrivate( NewsArticle *q ) : MessagePrivate( q )
00036 {
00037 lines.setParent( q );
00038 }
00039
00040 KMime::Headers::Lines lines;
00041
00042 Q_DECLARE_PUBLIC(NewsArticle)
00043 };
00044
00045 NewsArticle::NewsArticle() : Message( new NewsArticlePrivate( this ) ) {}
00046
00047 NewsArticle::~NewsArticle() {}
00048
00049 void NewsArticle::parse()
00050 {
00051 Q_D(NewsArticle);
00052 Message::parse();
00053
00054 QByteArray raw;
00055
00056 if ( !( raw = rawHeader( d->lines.type() ) ).isEmpty() )
00057 d->lines.from7BitString( raw );
00058 }
00059
00060 QByteArray NewsArticle::assembleHeaders()
00061 {
00062 Q_D(NewsArticle);
00063 Headers::Base *h;
00064 QByteArray newHead;
00065
00066
00067 if ( ( h = control( false ) ) != 0 && !h->isEmpty() ) {
00068 newHead += h->as7BitString() + '\n';
00069 KMime::removeHeader( d->head, h->type() );
00070 }
00071
00072
00073 if ( ( h = supersedes( false ) ) != 0 && !h->isEmpty() ) {
00074 newHead += h->as7BitString() + '\n';
00075 KMime::removeHeader( d->head, h->type() );
00076 }
00077
00078
00079 if ( ( h = newsgroups( false ) ) != 0 && !h->isEmpty() ) {
00080 newHead += h->as7BitString() + '\n';
00081 KMime::removeHeader( d->head, h->type() );
00082 }
00083
00084
00085 if ( ( h = followUpTo( false ) ) != 0 && !h->isEmpty() ) {
00086 newHead+=h->as7BitString() + '\n';
00087 KMime::removeHeader( d->head, h->type() );
00088 }
00089
00090
00091 if ( ( h = mailCopiesTo( false ) ) != 0 && !h->isEmpty() ) {
00092 newHead += h->as7BitString() + '\n';
00093 KMime::removeHeader( d->head, h->type() );
00094 }
00095
00096
00097 h = lines();
00098 newHead += h->as7BitString() + '\n';
00099 KMime::removeHeader( d->head, h->type() );
00100
00101 newHead += Message::assembleHeaders();
00102 return newHead;
00103 }
00104
00105 void NewsArticle::clear()
00106 {
00107 Q_D(NewsArticle);
00108 d->lines.clear();
00109 Message::clear();
00110 }
00111
00112 Headers::Base * NewsArticle::getHeaderByType( const char *type )
00113 {
00114 return headerByType( type );
00115 }
00116
00117 Headers::Base * NewsArticle::headerByType( const char *type )
00118 {
00119 Q_D(NewsArticle);
00120 if ( strcasecmp( "Lines", type ) == 0 ) {
00121 if ( d->lines.isEmpty() ) {
00122 return 0;
00123 } else {
00124 return &d->lines;
00125 }
00126 } else {
00127 return Message::headerByType( type );
00128 }
00129 }
00130
00131 void NewsArticle::setHeader( Headers::Base *h )
00132 {
00133 Q_D(NewsArticle);
00134 bool del = true;
00135 if ( h->is( "Lines" ) ) {
00136 d->lines.setNumberOfLines( (static_cast<Headers::Lines*>(h))->numberOfLines() );
00137 } else {
00138 del = false;
00139 Message::setHeader( h );
00140 }
00141
00142 if ( del ) delete h;
00143 }
00144
00145 bool NewsArticle::removeHeader( const char *type )
00146 {
00147 Q_D(NewsArticle);
00148 if ( strcasecmp( "Lines", type ) == 0 ) {
00149 d->lines.clear();
00150 } else {
00151 return Message::removeHeader( type );
00152 }
00153
00154 return true;
00155 }
00156
00157 Headers::Lines* NewsArticle::lines(bool create)
00158 {
00159 Q_D(NewsArticle);
00160 if ( !create && d->lines.isEmpty() )
00161 return 0;
00162 return &d->lines;
00163 }
00164
00165
00166 #define kmime_mk_header_accessor( header, method ) \
00167 Headers::header* NewsArticle::method( bool create ) { \
00168 Headers::header *p = 0; \
00169 return headerInstance( p, create ); \
00170 }
00171
00172 kmime_mk_header_accessor( Control, control )
00173 kmime_mk_header_accessor( Supersedes, supersedes )
00174 kmime_mk_header_accessor( MailCopiesTo, mailCopiesTo )
00175 kmime_mk_header_accessor( Newsgroups, newsgroups )
00176 kmime_mk_header_accessor( FollowUpTo, followUpTo )
00177
00178 #undef kmime_mk_header_accessor
00179
00180
00181 }