7 #include "job/protectedheadersjob.h"
9 #include "contentjobbase_p.h"
10 #include "job/singlepartjob.h"
12 #include <KMime/Content>
13 #include <KMime/KMimeMessage>
17 class MessageComposer::ProtectedHeadersJobPrivate :
public ContentJobBasePrivate
21 : ContentJobBasePrivate(qq)
28 bool obvoscate =
false;
33 ProtectedHeadersJob::ProtectedHeadersJob(
QObject *parent)
38 ProtectedHeadersJob::~ProtectedHeadersJob() =
default;
50 void ProtectedHeadersJob::setSkeletonMessage(
KMime::Message *skeletonMessage)
54 d->skeletonMessage = skeletonMessage;
57 void ProtectedHeadersJob::setObvoscate(
bool obvoscate)
61 d->obvoscate = obvoscate;
64 void ProtectedHeadersJob::doStart()
67 Q_ASSERT(d->resultContent ==
nullptr);
68 Q_ASSERT(d->skeletonMessage);
71 if (d->obvoscate && subject) {
74 auto ct = cjob->contentType();
76 ct->setCharset(subject->rfc2047Charset());
77 ct->setParameter(QStringLiteral(
"protected-headers"), QStringLiteral(
"v1"));
78 cjob->contentDisposition()->setDisposition(KMime::Headers::contentDisposition::CDinline);
79 cjob->setData(subject->type() +
QByteArray(
": ") + subject->asUnicodeString().toUtf8());
83 const QByteArray boundary = KMime::multiPartBoundary();
84 mixedPart->contentType()->setMimeType(
"multipart/mixed");
85 mixedPart->contentType(
false)->setBoundary(boundary);
86 mixedPart->addContent(cjob->content());
90 if (!d->content || !d->content->hasContent()) {
91 Q_ASSERT(d->subjobContents.size() == 1);
92 d->content = d->subjobContents.constFirst();
95 mixedPart->addContent(d->content);
96 d->content = mixedPart;
101 ContentJobBase::doStart();
104 void ProtectedHeadersJob::process()
110 if (!d->content || !d->content->hasContent()) {
111 Q_ASSERT(d->subjobContents.size() == 1);
112 d->content = d->subjobContents.constFirst();
116 const auto headers = d->skeletonMessage->headers();
117 for (
const auto &header : headers) {
119 if (headerType.startsWith(
"X-KMail-")) {
122 if (headerType ==
"Bcc") {
125 if (headerType.startsWith(
"Content-")) {
133 if (header->as7BitString().length() > 70) {
136 auto copyHeader = KMime::Headers::createHeader(headerType);
140 copyHeader->from7BitString(header->as7BitString(
false));
141 d->content->appendHeader(copyHeader);
144 if (d->obvoscate && subject) {
146 subject->from7BitString(
"...");
149 contentType->
setParameter(QStringLiteral(
"protected-headers"), QStringLiteral(
"v1"));
151 d->resultContent = d->content;