Add QMimeType::aliases().
Requested by Allan Sandfeld Jensen for QWebkit, which needs to register upfront all the mimetypes that a given plugin can handle. Change-Id: I64b8d39c7988adfc7db4ed8bfdc73acd16e999da Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
11afecbaa7
commit
8a83c1bb55
@ -494,6 +494,29 @@ QString QMimeBinaryProvider::resolveAlias(const QString &name)
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList QMimeBinaryProvider::listAliases(const QString &name)
|
||||||
|
{
|
||||||
|
checkCache();
|
||||||
|
QStringList result;
|
||||||
|
const QByteArray input = name.toLatin1();
|
||||||
|
foreach (CacheFile *cacheFile, m_cacheFiles) {
|
||||||
|
const int aliasListOffset = cacheFile->getUint32(PosAliasListOffset);
|
||||||
|
const int numEntries = cacheFile->getUint32(aliasListOffset);
|
||||||
|
for (int pos = 0; pos < numEntries; ++pos) {
|
||||||
|
const int off = aliasListOffset + 4 + 8 * pos;
|
||||||
|
const int mimeOffset = cacheFile->getUint32(off + 4);
|
||||||
|
const char *mimeType = cacheFile->getCharStar(mimeOffset);
|
||||||
|
|
||||||
|
if (input == mimeType) {
|
||||||
|
const int aliasOffset = cacheFile->getUint32(off);
|
||||||
|
const char *alias = cacheFile->getCharStar(aliasOffset);
|
||||||
|
result.append(QString::fromLatin1(alias));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void QMimeBinaryProvider::loadMimeTypeList()
|
void QMimeBinaryProvider::loadMimeTypeList()
|
||||||
{
|
{
|
||||||
if (!m_mimetypeListLoaded) {
|
if (!m_mimetypeListLoaded) {
|
||||||
@ -815,6 +838,13 @@ void QMimeXMLProvider::addParent(const QString &child, const QString &parent)
|
|||||||
m_parents[child].append(parent);
|
m_parents[child].append(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList QMimeXMLProvider::listAliases(const QString &name)
|
||||||
|
{
|
||||||
|
ensureLoaded();
|
||||||
|
// Iterate through the whole hash. This method is rarely used.
|
||||||
|
return m_aliases.keys(name);
|
||||||
|
}
|
||||||
|
|
||||||
QString QMimeXMLProvider::resolveAlias(const QString &name)
|
QString QMimeXMLProvider::resolveAlias(const QString &name)
|
||||||
{
|
{
|
||||||
ensureLoaded();
|
ensureLoaded();
|
||||||
|
@ -61,6 +61,7 @@ public:
|
|||||||
virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix) = 0;
|
virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix) = 0;
|
||||||
virtual QStringList parents(const QString &mime) = 0;
|
virtual QStringList parents(const QString &mime) = 0;
|
||||||
virtual QString resolveAlias(const QString &name) = 0;
|
virtual QString resolveAlias(const QString &name) = 0;
|
||||||
|
virtual QStringList listAliases(const QString &name) = 0;
|
||||||
virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) = 0;
|
virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) = 0;
|
||||||
virtual QList<QMimeType> allMimeTypes() = 0;
|
virtual QList<QMimeType> allMimeTypes() = 0;
|
||||||
virtual void loadMimeTypePrivate(QMimeTypePrivate &) {}
|
virtual void loadMimeTypePrivate(QMimeTypePrivate &) {}
|
||||||
@ -87,6 +88,7 @@ public:
|
|||||||
virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix);
|
virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix);
|
||||||
virtual QStringList parents(const QString &mime);
|
virtual QStringList parents(const QString &mime);
|
||||||
virtual QString resolveAlias(const QString &name);
|
virtual QString resolveAlias(const QString &name);
|
||||||
|
virtual QStringList listAliases(const QString &name);
|
||||||
virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr);
|
virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr);
|
||||||
virtual QList<QMimeType> allMimeTypes();
|
virtual QList<QMimeType> allMimeTypes();
|
||||||
virtual void loadMimeTypePrivate(QMimeTypePrivate &);
|
virtual void loadMimeTypePrivate(QMimeTypePrivate &);
|
||||||
@ -128,6 +130,7 @@ public:
|
|||||||
virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix);
|
virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix);
|
||||||
virtual QStringList parents(const QString &mime);
|
virtual QStringList parents(const QString &mime);
|
||||||
virtual QString resolveAlias(const QString &name);
|
virtual QString resolveAlias(const QString &name);
|
||||||
|
virtual QStringList listAliases(const QString &name);
|
||||||
virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr);
|
virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr);
|
||||||
virtual QList<QMimeType> allMimeTypes();
|
virtual QList<QMimeType> allMimeTypes();
|
||||||
|
|
||||||
|
@ -349,6 +349,22 @@ QStringList QMimeType::allAncestors() const
|
|||||||
return allParents;
|
return allParents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the list of aliases of this mimetype.
|
||||||
|
|
||||||
|
For instance, for text/csv, the returned list would be:
|
||||||
|
text/x-csv, text/x-comma-separated-values.
|
||||||
|
|
||||||
|
Note that all QMimeType instances refer to proper mimetypes,
|
||||||
|
never to aliases directly.
|
||||||
|
|
||||||
|
The order of the aliases in the list is undefined.
|
||||||
|
*/
|
||||||
|
QStringList QMimeType::aliases() const
|
||||||
|
{
|
||||||
|
return QMimeDatabasePrivate::instance()->provider()->listAliases(d->name);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the known suffixes for the MIME type.
|
Returns the known suffixes for the MIME type.
|
||||||
No leading dot is included, so for instance this would return "jpg", "jpeg" for image/jpeg.
|
No leading dot is included, so for instance this would return "jpg", "jpeg" for image/jpeg.
|
||||||
|
@ -90,6 +90,7 @@ public:
|
|||||||
QStringList globPatterns() const;
|
QStringList globPatterns() const;
|
||||||
QStringList parentMimeTypes() const;
|
QStringList parentMimeTypes() const;
|
||||||
QStringList allAncestors() const;
|
QStringList allAncestors() const;
|
||||||
|
QStringList aliases() const;
|
||||||
QStringList suffixes() const;
|
QStringList suffixes() const;
|
||||||
QString preferredSuffix() const;
|
QString preferredSuffix() const;
|
||||||
|
|
||||||
|
@ -355,6 +355,31 @@ void tst_QMimeDatabase::aliases()
|
|||||||
QVERIFY(!mustWriteMimeType);
|
QVERIFY(!mustWriteMimeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QMimeDatabase::listAliases_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QString>("inputMime");
|
||||||
|
QTest::addColumn<QString>("expectedAliases");
|
||||||
|
|
||||||
|
QTest::newRow("csv") << "text/csv" << "text/x-csv,text/x-comma-separated-values";
|
||||||
|
QTest::newRow("xml") << "application/xml" << "text/xml";
|
||||||
|
QTest::newRow("xml2") << "text/xml" /* gets resolved to application/xml */ << "text/xml";
|
||||||
|
QTest::newRow("no_mime") << "message/news" << "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QMimeDatabase::listAliases()
|
||||||
|
{
|
||||||
|
QFETCH(QString, inputMime);
|
||||||
|
QFETCH(QString, expectedAliases);
|
||||||
|
QMimeDatabase db;
|
||||||
|
QStringList expectedAliasesList = expectedAliases.split(',', QString::SkipEmptyParts);
|
||||||
|
expectedAliasesList.sort();
|
||||||
|
QMimeType mime = db.mimeTypeForName(inputMime);
|
||||||
|
QVERIFY(mime.isValid());
|
||||||
|
QStringList aliasList = mime.aliases();
|
||||||
|
aliasList.sort();
|
||||||
|
QCOMPARE(aliasList, expectedAliasesList);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QMimeDatabase::icons()
|
void tst_QMimeDatabase::icons()
|
||||||
{
|
{
|
||||||
QMimeDatabase db;
|
QMimeDatabase db;
|
||||||
|
@ -62,6 +62,8 @@ private slots:
|
|||||||
void mimeTypesForFileName();
|
void mimeTypesForFileName();
|
||||||
void inheritance();
|
void inheritance();
|
||||||
void aliases();
|
void aliases();
|
||||||
|
void listAliases_data();
|
||||||
|
void listAliases();
|
||||||
void icons();
|
void icons();
|
||||||
void mimeTypeForFileWithContent();
|
void mimeTypeForFileWithContent();
|
||||||
void mimeTypeForUrl();
|
void mimeTypeForUrl();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user