7#include "job/singlepartjob.h"
9#include "contentjobbase_p.h"
10#include "part/globalpart.h"
12#include "messagecomposer_debug.h"
13#include <KLocalizedString>
15#include <KMime/Content>
16#include <KMime/Headers>
20class MessageComposer::SinglepartJobPrivate :
public ContentJobBasePrivate
23 SinglepartJobPrivate(SinglepartJob *qq)
24 : ContentJobBasePrivate(qq)
31 bool dataEncoded =
false;
32 KMime::Headers::ContentDescription *contentDescription =
nullptr;
33 KMime::Headers::ContentDisposition *contentDisposition =
nullptr;
34 KMime::Headers::ContentID *contentID =
nullptr;
35 KMime::Headers::ContentTransferEncoding *contentTransferEncoding =
nullptr;
36 KMime::Headers::ContentType *contentType =
nullptr;
38 Q_DECLARE_PUBLIC(SinglepartJob)
41bool SinglepartJobPrivate::chooseCTE()
45 auto allowed = KMime::encodingsForData(data);
46 allowed.removeAll(KMime::Headers::CE8Bit);
53 if ((willBeSigned && cf.hasTrailingWhitespace())
54 || cf.hasLeadingFrom()) {
55 ret.removeAll(DwMime::kCte8bit);
56 ret.removeAll(DwMime::kCte7bit);
60 if (contentTransferEncoding) {
62 if (!allowed.contains(contentTransferEncoding->encoding())) {
63 q->setError(JobBase::BugError);
65 i18n(
"%1 Content-Transfer-Encoding cannot correctly encode this message.", KMime::nameForEncoding(contentTransferEncoding->encoding())));
71 Q_ASSERT(!allowed.isEmpty());
72 contentTransferEncoding =
new KMime::Headers::ContentTransferEncoding;
73 contentTransferEncoding->setEncoding(allowed.first());
75 qCDebug(MESSAGECOMPOSER_LOG) <<
"Settled on encoding" << KMime::nameForEncoding(contentTransferEncoding->encoding());
79SinglepartJob::SinglepartJob(QObject *parent)
84SinglepartJob::~SinglepartJob() =
default;
88 Q_D(
const SinglepartJob);
92void SinglepartJob::setData(
const QByteArray &data)
101 d->dataEncoded = encoded;
107 if (!d->contentDescription) {
110 return d->contentDescription;
116 if (!d->contentDisposition) {
119 return d->contentDisposition;
122KMime::Headers::ContentID *SinglepartJob::contentID()
126 d->contentID =
new KMime::Headers::ContentID;
131KMime::Headers::ContentTransferEncoding *SinglepartJob::contentTransferEncoding()
134 if (!d->contentTransferEncoding) {
135 d->contentTransferEncoding =
new KMime::Headers::ContentTransferEncoding;
137 return d->contentTransferEncoding;
140KMime::Headers::ContentType *SinglepartJob::contentType()
143 if (!d->contentType) {
144 d->contentType =
new KMime::Headers::ContentType;
146 return d->contentType;
149void SinglepartJob::process()
152 Q_ASSERT(d->resultContent ==
nullptr);
153 d->resultContent =
new KMime::Content;
155 if (!d->chooseCTE()) {
162 if (d->contentDescription) {
163 d->resultContent->setHeader(d->contentDescription);
165 if (d->contentDisposition) {
166 d->resultContent->setHeader(d->contentDisposition);
169 d->resultContent->setHeader(d->contentID);
171 Q_ASSERT(d->contentTransferEncoding);
173 d->resultContent->setHeader(d->contentTransferEncoding);
175 if (d->contentType) {
176 d->resultContent->setHeader(d->contentType);
180 if (d->dataEncoded) {
181 d->resultContent->setEncodedBody(d->data);
183 d->resultContent->setBody(d->data);
189#include "moc_singlepartjob.cpp"
The ContentJobBase class.
KMime::Headers::ContentDescription * contentDescription()
created on first call. delete them if you don't use the content
void setDataIsEncoded(bool encoded)
Indicated the data set with setData() is already encoded with the selected content transfer encoding.
QString i18n(const char *text, const TYPE &arg...)
Simple interface that both EncryptJob and SignEncryptJob implement so the composer can extract some e...