• Skip to content
  • Skip to link menu
KDE 4.3 API Reference
  • KDE API Reference
  • KDE-PIM Libraries
  • Sitemap
  • Contact Us
 

KMIME Library

kmime_newsarticle.cpp

00001 /*
00002     kmime_newsarticle.cpp
00003 
00004     KMime, the KDE internet mail/usenet news message library.
00005     Copyright (c) 2001 the KMime authors.
00006     See file AUTHORS for details
00007 
00008     This library is free software; you can redistribute it and/or
00009     modify it under the terms of the GNU Library General Public
00010     License as published by the Free Software Foundation; either
00011     version 2 of the License, or (at your option) any later version.
00012 
00013     This library is distributed in the hope that it will be useful,
00014     but WITHOUT ANY WARRANTY; without even the implied warranty of
00015     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016     Library General Public License for more details.
00017 
00018     You should have received a copy of the GNU Library General Public License
00019     along with this library; see the file COPYING.LIB.  If not, write to
00020     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00021     Boston, MA 02110-1301, USA.
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   //Control
00067   if ( ( h = control( false ) ) != 0 && !h->isEmpty() ) {
00068     newHead += h->as7BitString() + '\n';
00069     KMime::removeHeader( d->head, h->type() );
00070   }
00071 
00072   //Supersedes
00073   if ( ( h = supersedes( false ) ) != 0 && !h->isEmpty() ) {
00074     newHead += h->as7BitString() + '\n';
00075     KMime::removeHeader( d->head, h->type() );
00076   }
00077 
00078   //Newsgroups
00079   if ( ( h = newsgroups( false ) ) != 0 && !h->isEmpty() ) {
00080     newHead += h->as7BitString() + '\n';
00081     KMime::removeHeader( d->head, h->type() );
00082   }
00083 
00084   //Followup-To
00085   if ( ( h = followUpTo( false ) ) != 0 && !h->isEmpty() ) {
00086     newHead+=h->as7BitString() + '\n';
00087     KMime::removeHeader( d->head, h->type() );
00088   }
00089 
00090   //Mail-Copies-To
00091   if ( ( h = mailCopiesTo( false ) ) != 0 && !h->isEmpty() ) {
00092     newHead += h->as7BitString() + '\n';
00093     KMime::removeHeader( d->head, h->type() );
00094   }
00095 
00096   //Lines
00097   h = lines(); // "Lines" is mandatory
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 // @cond PRIVATE
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 // @endcond
00180 
00181 } // namespace KMime

KMIME Library

Skip menu "KMIME Library"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

KDE-PIM Libraries

Skip menu "KDE-PIM Libraries"
  • akonadi
  • kabc
  • kblog
  • kcal
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  • kldap
  • kmime
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.6.1
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal