Changeset View
Changeset View
Standalone View
Standalone View
messagecore/src/attachment/attachmentpart.cpp
Show All 40 Lines | 38 | { | |||
---|---|---|---|---|---|
41 | content->contentTransferEncoding()->setEncoding(encoding); | 41 | content->contentTransferEncoding()->setEncoding(encoding); | ||
42 | 42 | | |||
43 | const int size = content->size(); | 43 | const int size = content->size(); | ||
44 | delete content; | 44 | delete content; | ||
45 | 45 | | |||
46 | return size; | 46 | return size; | ||
47 | } | 47 | } | ||
48 | 48 | | |||
49 | static KMime::Headers::contentEncoding bestEncodingForTypeAndData(const QByteArray &mimeType, | ||||
50 | const QByteArray &data) | ||||
51 | { | ||||
52 | // Choose the best encoding for text/* and message/* attachments, but | ||||
53 | // always use base64 for anything else to prevent CRLF/LF conversions | ||||
54 | // etc. from corrupting the binary data | ||||
55 | if (mimeType.isEmpty() || mimeType.startsWith("text/") || mimeType.startsWith("message/")) { | ||||
56 | auto possibleEncodings = KMime::encodingsForData(data); | ||||
57 | possibleEncodings.removeAll(KMime::Headers::CE8Bit); | ||||
58 | if (!possibleEncodings.isEmpty()) { | ||||
59 | return possibleEncodings.first(); | ||||
60 | } else { | ||||
61 | return KMime::Headers::CEquPr; // TODO: maybe some other default? | ||||
62 | } | ||||
63 | } else { | ||||
64 | return KMime::Headers::CEbase64; | ||||
65 | } | ||||
66 | } | ||||
67 | | ||||
49 | class Q_DECL_HIDDEN MessageCore::AttachmentPart::Private | 68 | class Q_DECL_HIDDEN MessageCore::AttachmentPart::Private | ||
50 | { | 69 | { | ||
51 | public: | 70 | public: | ||
52 | Private() | 71 | Private() | ||
53 | : mEncoding(KMime::Headers::CE7Bit), | 72 | : mEncoding(KMime::Headers::CE7Bit), | ||
54 | mSize(-1), | 73 | mSize(-1), | ||
55 | mIsInline(false), | 74 | mIsInline(false), | ||
56 | mAutoEncoding(true), | 75 | mAutoEncoding(true), | ||
▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Line(s) | 148 | { | |||
130 | return d->mAutoEncoding; | 149 | return d->mAutoEncoding; | ||
131 | } | 150 | } | ||
132 | 151 | | |||
133 | void AttachmentPart::setAutoEncoding(bool enabled) | 152 | void AttachmentPart::setAutoEncoding(bool enabled) | ||
134 | { | 153 | { | ||
135 | d->mAutoEncoding = enabled; | 154 | d->mAutoEncoding = enabled; | ||
136 | 155 | | |||
137 | if (enabled) { | 156 | if (enabled) { | ||
138 | d->mEncoding = KMime::encodingsForData(d->mData).at(0); | 157 | d->mEncoding = bestEncodingForTypeAndData(d->mMimeType, d->mData); | ||
139 | } | 158 | } | ||
140 | 159 | | |||
141 | d->mSize = sizeWithEncoding(d->mData, d->mEncoding); | 160 | d->mSize = sizeWithEncoding(d->mData, d->mEncoding); | ||
142 | } | 161 | } | ||
143 | 162 | | |||
144 | KMime::Headers::contentEncoding AttachmentPart::encoding() const | 163 | KMime::Headers::contentEncoding AttachmentPart::encoding() const | ||
145 | { | 164 | { | ||
146 | return d->mEncoding; | 165 | return d->mEncoding; | ||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Line(s) | 226 | { | |||
208 | return d->mData; | 227 | return d->mData; | ||
209 | } | 228 | } | ||
210 | 229 | | |||
211 | void AttachmentPart::setData(const QByteArray &data) | 230 | void AttachmentPart::setData(const QByteArray &data) | ||
212 | { | 231 | { | ||
213 | d->mData = data; | 232 | d->mData = data; | ||
214 | 233 | | |||
215 | if (d->mAutoEncoding) { | 234 | if (d->mAutoEncoding) { | ||
216 | auto possibleEncodings = KMime::encodingsForData(data); | 235 | d->mEncoding = bestEncodingForTypeAndData(d->mMimeType, d->mData); | ||
217 | possibleEncodings.removeAll(KMime::Headers::CE8Bit); | | |||
218 | d->mEncoding = possibleEncodings.first(); | | |||
219 | } | 236 | } | ||
220 | 237 | | |||
221 | d->mSize = sizeWithEncoding(d->mData, d->mEncoding); | 238 | d->mSize = sizeWithEncoding(d->mData, d->mEncoding); | ||
222 | } | 239 | } | ||
223 | 240 | | |||
224 | qint64 AttachmentPart::size() const | 241 | qint64 AttachmentPart::size() const | ||
225 | { | 242 | { | ||
226 | return d->mSize; | 243 | return d->mSize; | ||
Show All 16 Lines |