00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
#ifndef __KMIME_CONTENT_H__
00017
#define __KMIME_CONTENT_H__
00018
00019
00020
#if 0
00021
class KMime::Headers::Base;
00022
class KMime::Headers::Generic;
00023
class KMime::Headers::ContentType;
00024
class KMime::Headers::CTEncoding;
00025
class KMime::Headers::CDisposition;
00026
class KMime::Headers::List;
00027
#endif
00028
00029
#include "kmime_util.h"
00030
#include "kmime_headers.h"
00031
00032
#include <qtextstream.h>
00033
00034
namespace KMime {
00035
00036
00042 class Base {
00043
00044
public:
00045
00046
00047
enum articleType { ATmimeContent,
00048 ATremote,
00049 ATlocal };
00050
00051 };
00052
00053
00059 class Content :
public Base {
00060
00061
public:
00062
typedef QPtrList<KMime::Content> List;
00063
00064
Content();
00065
Content(
const QCString &h,
const QCString &b);
00066
virtual ~
Content();
00067
00068
00069
virtual articleType type() {
return ATmimeContent; }
00070
00071
00072
bool hasContent() {
return ( !h_ead.isEmpty() && (!b_ody.isEmpty() || (c_ontents && !c_ontents->isEmpty())) ); }
00073
void setContent(
QStrList *l);
00074
void setContent(
const QCString &s);
00075
virtual void parse();
00076
virtual void assemble();
00077
virtual void clear();
00078
00079
00080
QCString head() {
return h_ead; }
00081
00082
Headers::Generic* getNextHeader(
QCString &head);
00083
virtual Headers::Base* getHeaderByType(
const char *type);
00084
virtual void setHeader(
Headers::Base *h);
00085
virtual bool removeHeader(
const char *type);
00086
bool hasHeader(
const char *type) {
return (getHeaderByType(type)!=0); }
00087
Headers::ContentType* contentType(
bool create=
true) {
Headers::ContentType *p=0;
return getHeaderInstance(p, create); }
00088
Headers::CTEncoding* contentTransferEncoding(
bool create=
true) {
Headers::CTEncoding *p=0;
return getHeaderInstance(p, create); }
00089
Headers::CDisposition* contentDisposition(
bool create=
true) {
Headers::CDisposition *p=0;
return getHeaderInstance(p, create); }
00090
Headers::CDescription* contentDescription(
bool create=
true) {
Headers::CDescription *p=0;
return getHeaderInstance(p, create); }
00091
00092
00093
int size();
00094
int storageSize();
00095
int lineCount();
00096
QCString body() {
return b_ody; }
00097
void setBody(
const QCString & str ) { b_ody = str; }
00098
QCString encodedContent(
bool useCrLf=
false);
00099
QByteArray decodedContent();
00100
void decodedText(
QString &s,
bool trimText=
false,
00101
bool removeTrainingNewlines=
false);
00102
void decodedText(
QStringList &s,
bool trimText=
false,
00103
bool removeTrainingNewlines=
false);
00104
void fromUnicodeString(
const QString &s);
00105
00106
Content* textContent();
00107
void attachments(
List *dst,
bool incAlternatives=
false);
00108
void addContent(
Content *c,
bool prepend=
false);
00109
void removeContent(
Content *c,
bool del=
false);
00110
void changeEncoding(Headers::contentEncoding e);
00111
00112
00113
00114
00115
void toStream(
QTextStream &ts,
bool scrambleFromLines=
false);
00116
00117
00118
00119
QCString defaultCharset() {
return QCString(d_efaultCS); }
00120
void setDefaultCharset(
const QCString &cs);
00121
00122
00123
00124
bool forceDefaultCS() {
return f_orceDefaultCS; }
00125
00126
00127
00128
00129
virtual void setForceDefaultCS(
bool b);
00130
00131
00132
protected:
00133
QCString rawHeader(
const char *name);
00134
bool decodeText();
00135
template <
class T> T* getHeaderInstance(T *ptr,
bool create);
00136
00137
QCString h_ead,
00138 b_ody;
00139
List *c_ontents;
00140
Headers::Base::List *h_eaders;
00141
const char *d_efaultCS;
00142
bool f_orceDefaultCS;
00143
00144 };
00145
00146
00147
00148
00149
template <
class T> T* Content::getHeaderInstance(T *ptr,
bool create)
00150 {
00151 T dummy;
00152
00153 ptr=static_cast <T*> (getHeaderByType(dummy.type()));
00154
if(!ptr && create) {
00155 ptr=
new T(
this);
00156
if(!(h_eaders)) {
00157 h_eaders=
new Headers::Base::List();
00158 h_eaders->setAutoDelete(
true);
00159 }
00160 h_eaders->append(ptr);
00161 }
00162
00163
return ptr;
00164 }
00165
00166
00167
00168 }
00169
00170
#endif // __KMIME_CONTENT_H__