diff options
Diffstat (limited to 'src/libs/utils/mimetypes')
-rw-r--r-- | src/libs/utils/mimetypes/mimeprovider.cpp | 45 |
1 files changed, 19 insertions, 26 deletions
diff --git a/src/libs/utils/mimetypes/mimeprovider.cpp b/src/libs/utils/mimetypes/mimeprovider.cpp index d444aa899c..53fa0502e5 100644 --- a/src/libs/utils/mimetypes/mimeprovider.cpp +++ b/src/libs/utils/mimetypes/mimeprovider.cpp @@ -784,32 +784,25 @@ void MimeXMLProvider::ensureLoaded() { if (!m_loaded /*|| shouldCheck()*/) { m_loaded = true; -// bool fdoXmlFound = false; - QStringList allFiles; - -// const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"), QStandardPaths::LocateDirectory); -// //qDebug() << "packageDirs=" << packageDirs; -// for (const QString &packageDir : packageDirs) { -// QDir dir(packageDir); -// const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot); -// //qDebug() << static_cast<const void *>(this) << packageDir << files; -// if (!fdoXmlFound) -// fdoXmlFound = files.contains(QLatin1String("freedesktop.org.xml")); -// QStringList::const_iterator endIt(files.constEnd()); -// for (QStringList::const_iterator it(files.constBegin()); it != endIt; ++it) { -// allFiles.append(packageDir + QLatin1Char('/') + *it); -// } -// } - -// if (!fdoXmlFound) { -// // We could instead install the file as part of installing Qt? -#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)) - const char freedesktopOrgXml[] = ":/qt-project.org/qmime/packages/freedesktop.org.xml"; -#else - const char freedesktopOrgXml[] = ":/qt-project.org/qmime/freedesktop.org.xml"; -#endif - allFiles.prepend(QLatin1String(freedesktopOrgXml)); -// } + QStringList allFiles = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, + QStringLiteral("mime/packages/freedesktop.org.xml"), + QStandardPaths::LocateFile); + + if (allFiles.isEmpty()) { + // System freedesktop.org.xml file not found, try to use the one in QtCore. + // This is private API and has changed in the past: + // - Qt 5.11 added "package" subdir in 7a5644d6481a3c1a7416772998ca4e60c977bfbd + // - Qt 5.13 added an option to not bundle it at all + const QString fdoXml5_11 = QStringLiteral(":/qt-project.org/qmime/packages/freedesktop.org.xml"); + const QString fdoXmlPre5_11 = QStringLiteral(":/qt-project.org/qmime/freedesktop.org.xml"); + if (QFile::exists(fdoXml5_11)) + allFiles << fdoXml5_11; + else if (QFile::exists(fdoXmlPre5_11)) + allFiles << fdoXmlPre5_11; + else + qFatal("Utils::MimeXMLProvider: could not find the system freedesktop.org.xml file " + "and QtCore does not have an accessible copy."); + } m_nameMimeTypeMap.clear(); m_aliases.clear(); |