Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMimeDatabase Class Reference

The KisMimeDatabase class maps file extensions to mimetypes and vice versa. More...

#include <KisMimeDatabase.h>

Classes

struct  KisMimeType
 

Static Public Member Functions

static QString descriptionForMimeType (const QString &mimeType)
 Find the user-readable description for the given mimetype.
 
static QString iconNameForMimeType (const QString &mimeType)
 The default icon name for the given mimetype.
 
static QString mimeTypeForData (const QByteArray ba)
 
static QString mimeTypeForFile (const QString &file, bool checkExistingFiles=true)
 Find the mimetype for the given filename. The filename must include a suffix.
 
static QString mimeTypeForSuffix (const QString &suffix)
 Find the mimetype for a given extension. The extension may have the form "*.xxx" or "xxx".
 
static QStringList suffixesForMimeType (const QString &mimeType)
 

Static Private Member Functions

static void fillMimeData ()
 

Static Private Attributes

static QList< KisMimeTypes_mimeDatabase
 

Detailed Description

The KisMimeDatabase class maps file extensions to mimetypes and vice versa.

Definition at line 19 of file KisMimeDatabase.h.

Member Function Documentation

◆ descriptionForMimeType()

QString KisMimeDatabase::descriptionForMimeType ( const QString & mimeType)
static

Find the user-readable description for the given mimetype.

Definition at line 99 of file KisMimeDatabase.cpp.

100{
101 fillMimeData();
102
103 Q_FOREACH(const KisMimeDatabase::KisMimeType &m, s_mimeDatabase) {
104 if (m.mimeType == mimeType) {
105 dbgPlugins << "descriptionForMimeType. KisMimeDatabase returned" << m.description << "for" << mimeType;
106 return m.description;
107 }
108 }
109
110 QMimeDatabase db;
111 QMimeType mime = db.mimeTypeForName(mimeType);
112 if (mime.name() != "application/octet-stream") {
113 dbgPlugins << "descriptionForMimeType. QMimeDatabase returned" << mime.comment() << "for" << mimeType;
114 return mime.comment();
115 }
116
117 return mimeType;
118}
static QList< KisMimeType > s_mimeDatabase
static void fillMimeData()
#define dbgPlugins
Definition kis_debug.h:51

References dbgPlugins, KisMimeDatabase::KisMimeType::description, fillMimeData(), KisMimeDatabase::KisMimeType::mimeType, and s_mimeDatabase.

◆ fillMimeData()

void KisMimeDatabase::fillMimeData ( )
staticprivate

Definition at line 160 of file KisMimeDatabase.cpp.

161{
162 // This should come from the import/export plugins, but the json files aren't translated,
163 // which is bad for the description field
164 if (s_mimeDatabase.isEmpty()) {
165
166 KisMimeType mimeType;
167
168 mimeType.mimeType = "image/x-gimp-brush";
169 mimeType.description = i18nc("description of a file type", "Gimp Brush");
170 mimeType.suffixes = QStringList() << "gbr" << "vbr";
171 s_mimeDatabase << mimeType;
172
173 mimeType.mimeType = "image/x-gimp-brush-animated";
174 mimeType.description = i18nc("description of a file type", "Gimp Image Hose Brush");
175 mimeType.suffixes = QStringList() << "gih";
176 s_mimeDatabase << mimeType;
177
178 mimeType.mimeType = "image/x-adobe-brushlibrary";
179 mimeType.description = i18nc("description of a file type", "Adobe Brush Library");
180 mimeType.suffixes = QStringList() << "abr";
181 s_mimeDatabase << mimeType;
182
183 mimeType.mimeType = "application/x-krita-paintoppreset";
184 mimeType.description = i18nc("description of a file type", "Krita Brush Preset");
185 mimeType.suffixes = QStringList() << "kpp";
186 s_mimeDatabase << mimeType;
187
188 mimeType.mimeType = "application/x-mypaint-brush";
189 mimeType.description = i18nc("description of a file type", "MyPaint Brush");
190 mimeType.suffixes = QStringList() << "myb";
191 s_mimeDatabase << mimeType;
192
193 mimeType.mimeType = "application/x-krita-assistant";
194 mimeType.description = i18nc("description of a file type", "Krita Assistant");
195 mimeType.suffixes = QStringList() << "paintingassistant";
196 s_mimeDatabase << mimeType;
197
198 mimeType.mimeType = "image/x-r32";
199 mimeType.description = i18nc("description of a file type", "R32 Heightmap");
200 mimeType.suffixes = QStringList() << "r32";
201 s_mimeDatabase << mimeType;
202
203 mimeType.mimeType = "image/x-r16";
204 mimeType.description = i18nc("description of a file type", "R16 Heightmap");
205 mimeType.suffixes = QStringList() << "r16";
206 s_mimeDatabase << mimeType;
207
208 mimeType.mimeType = "image/x-r8";
209 mimeType.description = i18nc("description of a file type", "R8 Heightmap");
210 mimeType.suffixes = QStringList() << "r8";
211 s_mimeDatabase << mimeType;
212
213 mimeType.mimeType = "application/x-spriter";
214 mimeType.description = i18nc("description of a file type", "Spriter SCML");
215 mimeType.suffixes = QStringList() << "scml";
216 s_mimeDatabase << mimeType;
217
218 mimeType.mimeType = "image/x-svm";
219 mimeType.description = i18nc("description of a file type", "Starview Metafile");
220 mimeType.suffixes = QStringList() << "svm";
221 s_mimeDatabase << mimeType;
222
223 mimeType.mimeType = "image/openraster";
224 mimeType.description = i18nc("description of a file type", "OpenRaster Image");
225 mimeType.suffixes = QStringList() << "ora";
226 s_mimeDatabase << mimeType;
227
228 mimeType.mimeType = "application/x-photoshop-style-library";
229 mimeType.description = i18nc("description of a file type", "Photoshop Layer Style Library");
230 mimeType.suffixes = QStringList() << "asl";
231 s_mimeDatabase << mimeType;
232
233 mimeType.mimeType = "application/x-gimp-color-palette";
234 mimeType.description = i18nc("description of a file type", "Color Palette");
235 mimeType.suffixes = QStringList() << "gpl" << "pal" << "act" << "aco" << "colors" << "xml" << "sbz" << "acb" << "ase" << "css";
236 s_mimeDatabase << mimeType;
237
238 mimeType.mimeType = "application/x-krita-palette";
239 mimeType.description = i18nc("description of a file type", "Krita Color Palette");
240 mimeType.suffixes = QStringList() << "kpl";
241 s_mimeDatabase << mimeType;
242
243 mimeType.mimeType = "application/x-opencolorio-configuration";
244 mimeType.description = i18nc("description of a file type", "OpenColorIO Configuration");
245 mimeType.suffixes = QStringList() << "ocio";
246 s_mimeDatabase << mimeType;
247
248 mimeType.mimeType = "application/x-gimp-gradient";
249 mimeType.description = i18nc("description of a file type", "GIMP Gradients");
250 mimeType.suffixes = QStringList() << "ggr";
251 s_mimeDatabase << mimeType;
252
253 mimeType.mimeType = "image/x-gimp-pat";
254 mimeType.description = i18nc("description of a file type", "GIMP Patterns");
255 mimeType.suffixes = QStringList() << "pat";
256 s_mimeDatabase << mimeType;
257
258 mimeType.mimeType = "application/x-krita-bundle";
259 mimeType.description = i18nc("description of a file type", "Krita Resource Bundle");
260 mimeType.suffixes = QStringList() << "bundle";
261 s_mimeDatabase << mimeType;
262
263 mimeType.mimeType = "application/x-krita-workspace";
264 mimeType.description = i18nc("description of a file type", "Krita Workspace");
265 mimeType.suffixes = QStringList() << "kws";
266 s_mimeDatabase << mimeType;
267
268 mimeType.mimeType = "application/x-krita-windowlayout";
269 mimeType.description = i18nc("description of a file type", "Krita Window Layout");
270 mimeType.suffixes = QStringList() << "kwl";
271 s_mimeDatabase << mimeType;
272
273 mimeType.mimeType = "application/x-krita-session";
274 mimeType.description = i18nc("description of a file type", "Krita Session");
275 mimeType.suffixes = QStringList() << "ksn";
276 s_mimeDatabase << mimeType;
277
278 mimeType.mimeType = "application/x-krita-taskset";
279 mimeType.description = i18nc("description of a file type", "Krita Taskset");
280 mimeType.suffixes = QStringList() << "kts";
281 s_mimeDatabase << mimeType;
282
283 mimeType.mimeType = "application/x-krita-reference-images";
284 mimeType.description = i18nc("description of a file type", "Krita Reference Image Collection");
285 mimeType.suffixes = QStringList() << "krf";
286 s_mimeDatabase << mimeType;
287
288 mimeType.mimeType = "application/x-krita-gamutmasks";
289 mimeType.description = i18nc("description of a file type", "Krita Gamut Mask");
290 mimeType.suffixes = QStringList() << "kgm";
291 s_mimeDatabase << mimeType;
292
293 mimeType.mimeType = "application/x-krita-shortcuts";
294 mimeType.description = i18nc("description of a file type", "Krita Shortcut Scheme");
295 mimeType.suffixes = QStringList() << "shortcuts";
296 s_mimeDatabase << mimeType;
297
298 mimeType.mimeType = "image/x-krita-raw";
299 mimeType.description = i18nc("description of a file type", "Camera Raw Files");
300 mimeType.suffixes = QStringList() << "bay" << "bmq" << "cr2" << "crw" << "cs1" << "dc2" << "dcr" << "dng" << "erf" << "fff" << "k25" << "kdc" << "mdc" << "mos" << "mrw" << "nef" << "orf" << "pef" << "pxn" << "raf" << "raw" << "rdc" << "sr2" << "srf" << "x3f" << "arw" << "3fr" << "cine" << "ia" << "kc2" << "mef" << "nrw" << "qtk" << "rw2" << "sti" << "rwl" << "srw";
301 s_mimeDatabase << mimeType;
302
303 mimeType.mimeType = "application/x-extension-exr";
304 mimeType.description = i18nc("description of a file type", "OpenEXR (Extended)");
305 mimeType.suffixes = QStringList() << "exr";
306 s_mimeDatabase << mimeType;
307
308 mimeType.mimeType = "image/x-psb";
309 mimeType.description = i18nc("description of a file type", "Photoshop Image (Large)");
310 mimeType.suffixes = QStringList() << "psb";
311 s_mimeDatabase << mimeType;
312
313 mimeType.mimeType = "image/heic";
314 mimeType.description = i18nc("description of a file type", "HEIC/HEIF Image");
315 mimeType.suffixes = QStringList() << "heic" << "heif";
316 s_mimeDatabase << mimeType;
317
318 mimeType.mimeType = "image/avif";
319 mimeType.description = i18nc("description of a file type", "AVIF Image");
320 mimeType.suffixes = QStringList() << "avif";
321 s_mimeDatabase << mimeType;
322
323// mimeType.mimeType = "image/jp2";
324// mimeType.description = i18nc("description of a file type", "JP2 Image");
325// mimeType.suffixes = QStringList() << "jp2" << "j2k";
326// s_mimeDatabase << mimeType;
327
328 mimeType.mimeType = "application/x-krita-seexpr-script";
329 mimeType.description = i18nc("description of a file type", "SeExpr script package");
330 mimeType.suffixes = QStringList() << "kse";
331 s_mimeDatabase << mimeType;
332
333 mimeType.mimeType = "application/x-krita-archive";
334 mimeType.description = i18nc("description of a file type", "Krita Archival Image Format");
335 mimeType.suffixes = QStringList() << "krz";
336 s_mimeDatabase << mimeType;
337
338 mimeType.mimeType = "image/apng";
339 mimeType.description = i18nc("description of a file type", "Animated PNG Image");
340 mimeType.suffixes = QStringList() << "apng";
341 s_mimeDatabase << mimeType;
342
343 mimeType.mimeType = "image/jxl";
344 mimeType.description = i18nc("description of a file type", "JPEG-XL Image");
345 mimeType.suffixes = QStringList() << "jxl";
346 s_mimeDatabase << mimeType;
347
348 mimeType.mimeType = "text/csv";
349 mimeType.description = i18nc("description of a file type", "CSV Document");
350 mimeType.suffixes = QStringList() << "csv";
351 s_mimeDatabase << mimeType;
352
353 mimeType.mimeType = "image/vnd.radiance";
354 mimeType.description = i18nc("description of a file type", "Radiance RGBE Image");
355 mimeType.suffixes = QStringList() << "hdr";
356 s_mimeDatabase << mimeType;
357
358 dbgPlugins << "Filled mime database with" << s_mimeDatabase.count() << "special mimetypes";
359 }
360}
QList< QString > QStringList

References dbgPlugins, KisMimeDatabase::KisMimeType::description, KisMimeDatabase::KisMimeType::mimeType, s_mimeDatabase, and KisMimeDatabase::KisMimeType::suffixes.

◆ iconNameForMimeType()

QString KisMimeDatabase::iconNameForMimeType ( const QString & mimeType)
static

The default icon name for the given mimetype.

Definition at line 152 of file KisMimeDatabase.cpp.

153{
154 QMimeDatabase db;
155 QMimeType mime = db.mimeTypeForName(mimeType);
156 dbgPlugins << "iconNameForMimeType" << mime.iconName();
157 return mime.iconName();
158}

References dbgPlugins.

◆ mimeTypeForData()

QString KisMimeDatabase::mimeTypeForData ( const QByteArray ba)
static

Find the mimetype through analyzing the contents. This does not work for Krita's extended mimetypes.

Definition at line 91 of file KisMimeDatabase.cpp.

92{
93 QMimeDatabase db;
94 QMimeType mtp = db.mimeTypeForData(ba);
95 dbgPlugins << "mimeTypeForData(). QMimeDatabase returned" << mtp.name();
96 return mtp.name();
97}

References dbgPlugins.

◆ mimeTypeForFile()

QString KisMimeDatabase::mimeTypeForFile ( const QString & file,
bool checkExistingFiles = true )
static

Find the mimetype for the given filename. The filename must include a suffix.

Definition at line 22 of file KisMimeDatabase.cpp.

23{
25
26 QFileInfo fi(file);
27 QString suffix = fi.suffix().toLower();
28
29#ifdef Q_OS_ANDROID
30 // HACK: on Android we can save as .kra with no extension or as something like:
31 // "untitled.kra (1)", (1) being added by the SAF because we can't overwrite the duplicate.
32 // So, we need to be able to remove that number and get extension. If there is no extension,
33 // perhaps try "kra"
34 suffix = sanitizeSuffix(suffix);
35 if (suffix.isEmpty())
36 suffix = "kra";
37#endif
38
39 Q_FOREACH(const KisMimeDatabase::KisMimeType &mimeType, s_mimeDatabase) {
40 if (mimeType.suffixes.contains(suffix)) {
41 dbgPlugins << "mimeTypeForFile(). KisMimeDatabase returned" << mimeType.mimeType << "for" << file;
42 return mimeType.mimeType;
43 }
44 }
45
46 QMimeDatabase db;
47 QMimeType mime;
48 if (checkExistingFiles && fi.size() > 0) {
49 mime = db.mimeTypeForFile(file, QMimeDatabase::MatchContent);
50 if (mime.name() != "application/octet-stream" && mime.name() != "application/zip") {
51 dbgPlugins << "mimeTypeForFile(). QMimeDatabase returned" << mime.name() << "for" << file;
52 return mime.name();
53 }
54 }
55
56#ifdef Q_OS_ANDROID
57 QString basename = fi.baseName();
58 // HACK: because we use sanitized suffix
59 mime = db.mimeTypeForFile(basename + "." + suffix);
60#else
61 mime = db.mimeTypeForFile(file);
62#endif
63 if (mime.name() != "application/octet-stream") {
64 dbgPlugins << "mimeTypeForFile(). QMimeDatabase returned" << mime.name() << "for" << file;
65 return mime.name();
66 }
67 return "";
68}

References dbgPlugins, fillMimeData(), KisMimeDatabase::KisMimeType::mimeType, s_mimeDatabase, and KisMimeDatabase::KisMimeType::suffixes.

◆ mimeTypeForSuffix()

QString KisMimeDatabase::mimeTypeForSuffix ( const QString & suffix)
static

Find the mimetype for a given extension. The extension may have the form "*.xxx" or "xxx".

Definition at line 70 of file KisMimeDatabase.cpp.

71{
73 QMimeDatabase db;
74
75 QString s = suffix.toLower();
76
77 Q_FOREACH(const KisMimeDatabase::KisMimeType &mimeType, s_mimeDatabase) {
78 if (mimeType.suffixes.contains(s)) {
79 dbgPlugins << "mimeTypeForSuffix(). KisMimeDatabase returned" << mimeType.mimeType << "for" << s;
80 return mimeType.mimeType;
81 }
82 }
83
84
85 // make the file look like a file so Qt would recognize it
86 s = "file." + s;
87
88 return mimeTypeForFile(s);
89}
static QString mimeTypeForFile(const QString &file, bool checkExistingFiles=true)
Find the mimetype for the given filename. The filename must include a suffix.

References dbgPlugins, fillMimeData(), KisMimeDatabase::KisMimeType::mimeType, mimeTypeForFile(), s_mimeDatabase, and KisMimeDatabase::KisMimeType::suffixes.

◆ suffixesForMimeType()

QStringList KisMimeDatabase::suffixesForMimeType ( const QString & mimeType)
static

Find the list of possible extensions for the given mimetype. The preferred suffix is the first one.

Definition at line 120 of file KisMimeDatabase.cpp.

121{
122 fillMimeData();
123 Q_FOREACH(const KisMimeDatabase::KisMimeType &m, s_mimeDatabase) {
124 if (m.mimeType == mimeType) {
125 dbgPlugins << "suffixesForMimeType. KisMimeDatabase returned" << m.suffixes;
126 return m.suffixes;
127 }
128 }
129
130 QMimeDatabase db;
131 QMimeType mime = db.mimeTypeForName(mimeType);
132 if (mime.name() != "application/octet-stream" && !mime.suffixes().isEmpty()) {
133 QString preferredSuffix = mime.preferredSuffix();
134 if (mimeType == "image/x-tga") {
135 preferredSuffix = "tga";
136 }
137 if (mimeType == "image/jpeg") {
138 preferredSuffix = "jpg";
139 }
140 QStringList suffixes = mime.suffixes();
141 if (preferredSuffix != suffixes.first()) {
142 suffixes.removeAll(preferredSuffix);
143 suffixes.prepend(preferredSuffix);
144
145 }
146 dbgPlugins << "suffixesForMimeType. QMimeDatabase returned" << suffixes;
147 return suffixes;
148 }
149 return QStringList();
150}

References dbgPlugins, fillMimeData(), KisMimeDatabase::KisMimeType::mimeType, s_mimeDatabase, and KisMimeDatabase::KisMimeType::suffixes.

Member Data Documentation

◆ s_mimeDatabase

QList< KisMimeDatabase::KisMimeType > KisMimeDatabase::s_mimeDatabase
staticprivate

Definition at line 46 of file KisMimeDatabase.h.


The documentation for this class was generated from the following files: