MCPcopy Create free account
hub / github.com/KDE/okular / compressionTypeFor

Function compressionTypeFor

part/part.cpp:195–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

193}
194
195static KCompressionDevice::CompressionType compressionTypeFor(const QString &mime_to_check)
196{
197 // The compressedMimeMap is here in case you have a very old shared mime database
198 // that doesn't have inheritance info for things like gzeps, etc
199 // Otherwise the "is()" calls below are just good enough
200 static QHash<QString, KCompressionDevice::CompressionType> compressedMimeMap;
201 static bool supportBzip = false;
202 static bool supportXz = false;
203 static bool supportZstd = false;
204
205 const QString app_gzip(QStringLiteral("application/x-gzip"));
206 const QString app_bzip(QStringLiteral("application/x-bzip"));
207 const QString app_xz(QStringLiteral("application/x-xz"));
208 const QString app_zstd(QStringLiteral("application/zstd"));
209 if (compressedMimeMap.isEmpty()) {
210 std::unique_ptr<KFilterBase> f;
211 compressedMimeMap[QStringLiteral("image/x-gzeps")] = KCompressionDevice::GZip;
212 // check we can read bzip2-compressed files
213 f.reset(KCompressionDevice::filterForCompressionType(KCompressionDevice::BZip2));
214 if (f.get()) {
215 supportBzip = true;
216 compressedMimeMap[QStringLiteral("application/x-bzpdf")] = KCompressionDevice::BZip2;
217 compressedMimeMap[QStringLiteral("application/x-bzpostscript")] = KCompressionDevice::BZip2;
218 compressedMimeMap[QStringLiteral("application/x-bzdvi")] = KCompressionDevice::BZip2;
219 compressedMimeMap[QStringLiteral("image/x-bzeps")] = KCompressionDevice::BZip2;
220 }
221 // check if we can read XZ-compressed files
222 f.reset(KCompressionDevice::filterForCompressionType(KCompressionDevice::Xz));
223 if (f.get()) {
224 supportXz = true;
225 }
226 // check if we can read zstd-compressed files
227 f.reset(KCompressionDevice::filterForCompressionType(KCompressionDevice::Zstd));
228 if (f.get()) {
229 supportZstd = true;
230 }
231 }
232 QHash<QString, KCompressionDevice::CompressionType>::const_iterator it = compressedMimeMap.constFind(mime_to_check);
233 if (it != compressedMimeMap.constEnd()) {
234 return it.value();
235 }
236
237 QMimeDatabase db;
238 QMimeType mime = db.mimeTypeForName(mime_to_check);
239 if (mime.isValid()) {
240 if (mime.inherits(app_gzip)) {
241 return KCompressionDevice::GZip;
242 } else if (supportBzip && mime.inherits(app_bzip)) {
243 return KCompressionDevice::BZip2;
244 } else if (supportXz && mime.inherits(app_xz)) {
245 return KCompressionDevice::Xz;
246 } else if (supportZstd && mime.inherits(app_zstd)) {
247 return KCompressionDevice::Zstd;
248 }
249 }
250
251 return KCompressionDevice::None;
252}

Callers 1

doOpenFileMethod · 0.85

Calls 5

isEmptyMethod · 0.80
resetMethod · 0.45
getMethod · 0.45
valueMethod · 0.45
isValidMethod · 0.45

Tested by

no test coverage detected