diff options
author | David Faure <faure@kde.org> | 2012-01-27 21:42:10 +0100 |
---|---|---|
committer | Wolf-Michael Bolle <wolf-michael.bolle@nokia.com> | 2012-01-30 12:55:22 +0100 |
commit | be42fc1a1855a752c1a7d5bb4dd2fa4a7045abcd (patch) | |
tree | 6c2901f8ab3fbfae09d9c21acfd26a39376ee827 | |
parent | 7100319c7f1a4907aba486c2c5d7d37183a3a9cf (diff) |
Merge findByFile and findByFileName into mimeTypeForFile(flags).
These are API changes suggested by Lars.
Implement MatchContent.
Change-Id: I2baca9c99777573f6a5ac5dbf9221df6b37b01c9
Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Reviewed-by: Wolf-Michael Bolle <wolf-michael.bolle@nokia.com>
-rw-r--r-- | examples/mimetypefinder/main.cpp | 9 | ||||
-rw-r--r-- | examples/mimetypeviewer/mimetypeviewer.cpp | 2 | ||||
-rw-r--r-- | src/imports/mimetypes/plugins.qmltypes | 4 | ||||
-rw-r--r-- | src/imports/mimetypes/qdeclarativemimedatabase.cpp | 14 | ||||
-rw-r--r-- | src/imports/mimetypes/qdeclarativemimedatabase_p.h | 4 | ||||
-rw-r--r-- | src/mimetypes/qmimedatabase.cpp | 140 | ||||
-rw-r--r-- | src/mimetypes/qmimedatabase.h | 15 | ||||
-rw-r--r-- | src/mimetypes/qmimedatabase_p.h | 4 | ||||
-rw-r--r-- | tests/auto/qdeclarativemimedatabase/tst_qdeclarativemimedatabase.qml | 12 | ||||
-rw-r--r-- | tests/auto/qmimedatabase/tst_qmimedatabase.cpp | 63 | ||||
-rw-r--r-- | tests/auto/qmimedatabase/tst_qmimedatabase.h | 8 |
11 files changed, 143 insertions, 132 deletions
diff --git a/examples/mimetypefinder/main.cpp b/examples/mimetypefinder/main.cpp index 8da085a..ae1e9ee 100644 --- a/examples/mimetypefinder/main.cpp +++ b/examples/mimetypefinder/main.cpp @@ -28,14 +28,11 @@ int main(int argc, char *argv[]) //mime = QMimeType::findByContent(data, &accuracy); mime = db.findByData(data); } else if (option == QLatin1String("-c")) { - QFile file(fileName); - if (file.open(QIODevice::ReadOnly)) { - mime = db.findByData(file.read(32000)); - } + mime = db.mimeTypeForFile(fileName, QMimeDatabase::MatchContent); } else if (option == QLatin1String("-f")) { - mime = db.findByFileName(fileName); + mime = db.mimeTypeForFile(fileName, QMimeDatabase::MatchExtension); } else { - mime = db.findByFile(fileName); + mime = db.mimeTypeForFile(fileName); } if ( mime.isValid() /*&& !mime.isDefault()*/ ) { printf("%s\n", mime.name().toLatin1().constData()); diff --git a/examples/mimetypeviewer/mimetypeviewer.cpp b/examples/mimetypeviewer/mimetypeviewer.cpp index bce2f9c..10341e5 100644 --- a/examples/mimetypeviewer/mimetypeviewer.cpp +++ b/examples/mimetypeviewer/mimetypeviewer.cpp @@ -27,7 +27,7 @@ void MimeTypeViewer::onOpenFileButtonClicked() return; ui->fileLineEdit->setText(file); - QMimeType mimeType = dataBase->findByFile(QFileInfo(file)); + QMimeType mimeType = dataBase->mimeTypeForFile(QFileInfo(file)); if (mimeType.isValid()) setMimeType(mimeType); } diff --git a/src/imports/mimetypes/plugins.qmltypes b/src/imports/mimetypes/plugins.qmltypes index 3a2f099..ab6c8d1 100644 --- a/src/imports/mimetypes/plugins.qmltypes +++ b/src/imports/mimetypes/plugins.qmltypes @@ -15,12 +15,12 @@ Module { Parameter { name: "nameOrAlias"; type: "string" } } Method { - name: "findByFileName" + name: "mimeTypeForFileName" type: "QDeclarativeMimeType*" Parameter { name: "fileName"; type: "string" } } Method { - name: "findByFile" + name: "mimeTypeForFile" type: "QDeclarativeMimeType*" Parameter { name: "fileName"; type: "string" } } diff --git a/src/imports/mimetypes/qdeclarativemimedatabase.cpp b/src/imports/mimetypes/qdeclarativemimedatabase.cpp index 8edd0cb..18bdf48 100644 --- a/src/imports/mimetypes/qdeclarativemimedatabase.cpp +++ b/src/imports/mimetypes/qdeclarativemimedatabase.cpp @@ -266,7 +266,7 @@ QDeclarativeMimeType *QDeclarativeMimeDatabase::mimeTypeForName ( // ------------------------------------------------------------------------------------------------ /*! - \qmlmethod MimeType MimeDatabase::findByFileName(string fileName) + \qmlmethod MimeType MimeDatabase::mimeTypeForFileName(string fileName) \brief Returns a MIME type for the file \a fileName. A valid MIME type is always returned. If the file name doesn't match any @@ -274,14 +274,14 @@ QDeclarativeMimeType *QDeclarativeMimeDatabase::mimeTypeForName ( is returned. This function does not try to open the file. To also use the content - when determining the MIME type, use findByFile(). + when determining the MIME type, use mimeTypeForFile(). */ -QDeclarativeMimeType *QDeclarativeMimeDatabase::findByFileName ( +QDeclarativeMimeType *QDeclarativeMimeDatabase::mimeTypeForFileName ( const QString &fileName ) { return new QDeclarativeMimeType ( - m_MimeDatabase.findByFileName(fileName), + m_MimeDatabase.mimeTypeForFile(fileName, QMimeDatabase::MatchExtension), this // <- The new object will be released later // when this registry is released. ); @@ -290,7 +290,7 @@ QDeclarativeMimeType *QDeclarativeMimeDatabase::findByFileName ( // ------------------------------------------------------------------------------------------------ /*! - \qmlmethod MimeType MimeDatabase::findByFile(string fileName) + \qmlmethod MimeType MimeDatabase::mimeTypeForFile(string fileName) \brief Returns a MIME type for \a fileName. This method looks at both the file name and the file contents, @@ -304,12 +304,12 @@ QDeclarativeMimeType *QDeclarativeMimeDatabase::findByFileName ( The \a fileName can also include an absolute or relative path. */ -QDeclarativeMimeType *QDeclarativeMimeDatabase::findByFile ( +QDeclarativeMimeType *QDeclarativeMimeDatabase::mimeTypeForFile( const QString &fileName ) { return new QDeclarativeMimeType ( - m_MimeDatabase.findByFile(fileName), + m_MimeDatabase.mimeTypeForFile(fileName), this // <- The new object will be released later // when this registry is released. ); diff --git a/src/imports/mimetypes/qdeclarativemimedatabase_p.h b/src/imports/mimetypes/qdeclarativemimedatabase_p.h index 861ae95..533e3de 100644 --- a/src/imports/mimetypes/qdeclarativemimedatabase_p.h +++ b/src/imports/mimetypes/qdeclarativemimedatabase_p.h @@ -81,11 +81,11 @@ public: const QString &nameOrAlias ); - Q_INVOKABLE QDeclarativeMimeType *findByFileName ( + Q_INVOKABLE QDeclarativeMimeType *mimeTypeForFileName ( const QString &fileName ); - Q_INVOKABLE QDeclarativeMimeType *findByFile ( + Q_INVOKABLE QDeclarativeMimeType *mimeTypeForFile ( const QString &fileName ); diff --git a/src/mimetypes/qmimedatabase.cpp b/src/mimetypes/qmimedatabase.cpp index 9a91591..1469b96 100644 --- a/src/mimetypes/qmimedatabase.cpp +++ b/src/mimetypes/qmimedatabase.cpp @@ -107,7 +107,7 @@ QMimeType QMimeDatabasePrivate::mimeTypeForName(const QString &nameOrAlias) return provider()->mimeTypeForName(provider()->resolveAlias(nameOrAlias)); } -QStringList QMimeDatabasePrivate::findByFileName(const QString &fileName, QString *foundSuffix) +QStringList QMimeDatabasePrivate::mimeTypeForFileName(const QString &fileName, QString *foundSuffix) { if (fileName.endsWith(QLatin1Char('/'))) return QStringList() << QLatin1String("inode/directory"); @@ -162,7 +162,7 @@ QMimeType QMimeDatabasePrivate::findByData(const QByteArray &data, int *accuracy // ------------------------------------------------------------------------------------------------ -QMimeType QMimeDatabasePrivate::findByFileNameAndData(const QString &fileName, QIODevice *device, int *accuracyPtr) +QMimeType QMimeDatabasePrivate::mimeTypeForNameAndData(const QString &fileName, QIODevice *device, int *accuracyPtr) { // First, glob patterns are evaluated. If there is a match with max weight, // this one is selected and we are done. Otherwise, the file contents are @@ -172,7 +172,7 @@ QMimeType QMimeDatabasePrivate::findByFileNameAndData(const QString &fileName, Q *accuracyPtr = 0; // Pass 1) Try to match on the file name - QStringList candidatesByName = findByFileName(fileName); + QStringList candidatesByName = mimeTypeForFileName(fileName); if (candidatesByName.count() == 1) { *accuracyPtr = 100; const QMimeType mime = mimeTypeForName(candidatesByName.at(0)); @@ -350,24 +350,34 @@ QMimeType QMimeDatabase::mimeTypeForName(const QString& nameOrAlias) const // ------------------------------------------------------------------------------------------------ /*! - \fn QMimeType QMimeDatabase::findByFile(const QFileInfo &fileInfo) const; \brief Returns a MIME type for \a fileInfo. - This method looks at both the file name and the file contents, - if necessary. The file extension has priority over the contents, + A valid MIME type is always returned. + + The default matching algorithm looks at both the file name and the file + contents, if necessary. The file extension has priority over the contents, but the contents will be used if the file extension is unknown, or matches multiple MIME types. + If \a fileInfo is a unix symbolic link, the file that it refers to + will be used instead. + If the file doesn't match any known pattern or data, the default MIME type + (application/octet-stream) is returned. - A valid MIME type is always returned. If the file doesn't match any - known extension or data, the default MIME type (application/octet-stream) + When \a flags is set to MatchExtension, only the file name is used, not + the file contents. The file doesn't even have to exist. If the file name + doesn't match any known pattern, the default MIME type (application/octet-stream) is returned. + If multiple MIME types match this file, the first one (alphabetically) is returned. - If \a fileInfo is a unix symbolic link, the file that it refers to - will be used instead. + When \a flags is set to MatchContent, and the file is readable, only the + file contents are used to determine the MIME type. This is equivalent to + calling mimeTypeForData with a QFile as input device. + + In all cases, the \a fileName can also include an absolute or relative path. \sa isDefault */ -QMimeType QMimeDatabase::findByFile(const QFileInfo &fileInfo) const +QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchFlags flags) const { DBG() << "fileInfo" << fileInfo.absoluteFilePath(); @@ -395,64 +405,46 @@ QMimeType QMimeDatabase::findByFile(const QFileInfo &fileInfo) const #endif int priority = 0; - return d->findByFileNameAndData(fileInfo.absoluteFilePath(), &file, &priority); -} - -// ------------------------------------------------------------------------------------------------ - -/*! - \fn QMimeType QMimeDatabase::findByFile(const QString &fileName) const; - \brief Returns a MIME type for \a fileName. - - This method looks at both the file name and the file contents, - if necessary. The file extension has priority over the contents, - but the contents will be used if the file extension is unknown, or - matches multiple MIME types. - - A valid MIME type is always returned. If the file doesn't match any - known pattern or data, the default MIME type (application/octet-stream) - is returned. - - The \a fileName can also include an absolute or relative path. -*/ -QMimeType QMimeDatabase::findByFile(const QString &fileName) const -{ - // Implemented as a wrapper around findByFile(QFileInfo), so no mutex. - QFileInfo fileInfo(fileName); - return findByFile(fileInfo); + if (flags == MatchDefault) { + return d->mimeTypeForNameAndData(fileInfo.absoluteFilePath(), &file, &priority); + } else if (flags == MatchExtension) { + locker.unlock(); + return mimeTypeForFile(fileInfo.absoluteFilePath(), flags); + } else { // MatchContent + if (file.open(QIODevice::ReadOnly)) { + locker.unlock(); + return findByData(&file); + } else + return d->mimeTypeForName(d->defaultMimeType()); + } } // ------------------------------------------------------------------------------------------------ /*! - \fn QMimeType QMimeDatabase::findByFileName(const QString &fileName) const; - \brief Returns a MIME type for the file name \a fileName. + \brief Returns a MIME type for the file named \a fileName. - A valid MIME type is always returned. If the file name doesn't match any - known pattern, the default MIME type (application/octet-stream) - is returned. - If multiple MIME types match this file, the first one (alphabetically) is returned. - - This function does not try to open the file. To also use the content - when determining the MIME type, use findByFile() or - findByFileNameAndData() instead. - - \sa findMimeTypesByFileName + \overload */ -QMimeType QMimeDatabase::findByFileName(const QString &fileName) const +QMimeType QMimeDatabase::mimeTypeForFile(const QString &fileName, MatchFlags flags) const { - QMutexLocker locker(&d->mutex); - - QStringList matches = d->findByFileName(fileName); - const int matchCount = matches.count(); - if (matchCount == 0) - return d->mimeTypeForName(d->defaultMimeType()); - else if (matchCount == 1) - return d->mimeTypeForName(matches.first()); - else { - // We have to pick one. - matches.sort(); // Make it deterministic - return d->mimeTypeForName(matches.first()); + if (flags == MatchExtension) { + QMutexLocker locker(&d->mutex); + QStringList matches = d->mimeTypeForFileName(fileName); + const int matchCount = matches.count(); + if (matchCount == 0) + return d->mimeTypeForName(d->defaultMimeType()); + else if (matchCount == 1) + return d->mimeTypeForName(matches.first()); + else { + // We have to pick one. + matches.sort(); // Make it deterministic + return d->mimeTypeForName(matches.first()); + } + } else { + // Implemented as a wrapper around mimeTypeForFile(QFileInfo), so no mutex. + QFileInfo fileInfo(fileName); + return mimeTypeForFile(fileInfo); } } @@ -467,15 +459,15 @@ QMimeType QMimeDatabase::findByFileName(const QString &fileName) const This function does not try to open the file. To also use the content when determining the MIME type, use findByFile() or - findByFileNameAndData() instead. + mimeTypeForNameAndData() instead. - \sa findByFileName + \sa mimeTypeForFile */ QList<QMimeType> QMimeDatabase::findMimeTypesByFileName(const QString &fileName) const { QMutexLocker locker(&d->mutex); - QStringList matches = d->findByFileName(fileName); + QStringList matches = d->mimeTypeForFileName(fileName); QList<QMimeType> mimes; matches.sort(); // Make it deterministic foreach (const QString& mime, matches) { @@ -495,7 +487,7 @@ QString QMimeDatabase::suffixForFileName(const QString &fileName) const { QMutexLocker locker(&d->mutex); QString foundSuffix; - d->findByFileName(fileName, &foundSuffix); + d->mimeTypeForFileName(fileName, &foundSuffix); return foundSuffix; } @@ -544,7 +536,7 @@ QMimeType QMimeDatabase::findByData(QIODevice* device) const /*! Returns a MIME type for \a url. - If the url is a local file, this calls findByFile. + If the url is a local file, this calls mimeTypeForFile. Otherwise the matching is done based on the name only (except over schemes where filenames don't mean much, like HTTP) @@ -556,18 +548,18 @@ QMimeType QMimeDatabase::findByUrl(const QUrl &url) const { #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) if (url.isLocalFile()) - return findByFile(url.toLocalFile()); + return mimeTypeForFile(url.toLocalFile()); #else QString localFile(url.toLocalFile()); if (!localFile.isEmpty()) - return findByFile(localFile); + return mimeTypeForFile(localFile); #endif const QString scheme = url.scheme(); if (scheme.startsWith(QLatin1String("http"))) return mimeTypeForName(d->defaultMimeType()); - return findByFileName(url.path()); + return mimeTypeForFile(url.path()); } // ------------------------------------------------------------------------------------------------ @@ -588,12 +580,12 @@ QMimeType QMimeDatabase::findByUrl(const QUrl &url) const but the contents will be used if the file extension is unknown, or matches multiple MIME types. */ -QMimeType QMimeDatabase::findByFileNameAndData(const QString &fileName, QIODevice *device) const +QMimeType QMimeDatabase::mimeTypeForNameAndData(const QString &fileName, QIODevice *device) const { DBG() << "fileName" << fileName; int accuracy = 0; - return d->findByFileNameAndData(fileName, device, &accuracy); + return d->mimeTypeForNameAndData(fileName, device, &accuracy); } // ------------------------------------------------------------------------------------------------ @@ -614,13 +606,13 @@ QMimeType QMimeDatabase::findByFileNameAndData(const QString &fileName, QIODevic but the contents will be used if the file extension is unknown, or matches multiple MIME types. */ -QMimeType QMimeDatabase::findByFileNameAndData(const QString &fileName, const QByteArray &data) const +QMimeType QMimeDatabase::mimeTypeForNameAndData(const QString &fileName, const QByteArray &data) const { DBG() << "fileName" << fileName; QBuffer buffer(const_cast<QByteArray *>(&data)); int accuracy = 0; - return d->findByFileNameAndData(fileName, &buffer, &accuracy); + return d->mimeTypeForNameAndData(fileName, &buffer, &accuracy); } // ------------------------------------------------------------------------------------------------ @@ -630,7 +622,7 @@ QMimeType QMimeDatabase::findByFileNameAndData(const QString &fileName, const QB This can be useful for showing all MIME types to the user, for instance in a MIME type editor. Do not use unless really necessary in other cases - though, prefer using the findBy* methods for performance reasons. + though, prefer using the mimeTypeFor* methods for performance reasons. */ QList<QMimeType> QMimeDatabase::allMimeTypes() const { diff --git a/src/mimetypes/qmimedatabase.h b/src/mimetypes/qmimedatabase.h index ad1aefc..47c59eb 100644 --- a/src/mimetypes/qmimedatabase.h +++ b/src/mimetypes/qmimedatabase.h @@ -47,17 +47,22 @@ public: QMimeType mimeTypeForName(const QString &nameOrAlias) const; - QMimeType findByFileName(const QString &fileName) const; + enum MatchFlags { + MatchDefault = 0x0, + MatchExtension = 0x1, + MatchContent = 0x2 + }; + + QMimeType mimeTypeForFile(const QString &fileName, MatchFlags flags = MatchDefault) const; + QMimeType mimeTypeForFile(const QFileInfo &fileInfo, MatchFlags flags = MatchDefault) const; QList<QMimeType> findMimeTypesByFileName(const QString &fileName) const; QMimeType findByData(const QByteArray &data) const; QMimeType findByData(QIODevice *device) const; - QMimeType findByFile(const QString &fileName) const; - QMimeType findByFile(const QFileInfo &fileInfo) const; QMimeType findByUrl(const QUrl &url) const; - QMimeType findByFileNameAndData(const QString &fileName, QIODevice *device) const; - QMimeType findByFileNameAndData(const QString &fileName, const QByteArray &data) const; + QMimeType mimeTypeForNameAndData(const QString &fileName, QIODevice *device) const; + QMimeType mimeTypeForNameAndData(const QString &fileName, const QByteArray &data) const; QString suffixForFileName(const QString &fileName) const; diff --git a/src/mimetypes/qmimedatabase_p.h b/src/mimetypes/qmimedatabase_p.h index f418c35..106ad7a 100644 --- a/src/mimetypes/qmimedatabase_p.h +++ b/src/mimetypes/qmimedatabase_p.h @@ -59,9 +59,9 @@ struct QMimeDatabasePrivate QMimeType mimeTypeForName(const QString &nameOrAlias); - QMimeType findByFileNameAndData(const QString &fileName, QIODevice *device, int *priorityPtr); + QMimeType mimeTypeForNameAndData(const QString &fileName, QIODevice *device, int *priorityPtr); QMimeType findByData(const QByteArray &data, int *priorityPtr); - QStringList findByFileName(const QString &fileName, QString *foundSuffix = 0); + QStringList mimeTypeForFileName(const QString &fileName, QString *foundSuffix = 0); mutable QMimeProviderBase *m_provider; const QString m_defaultMimeType; diff --git a/tests/auto/qdeclarativemimedatabase/tst_qdeclarativemimedatabase.qml b/tests/auto/qdeclarativemimedatabase/tst_qdeclarativemimedatabase.qml index 89b2edb..da3627e 100644 --- a/tests/auto/qdeclarativemimedatabase/tst_qdeclarativemimedatabase.qml +++ b/tests/auto/qdeclarativemimedatabase/tst_qdeclarativemimedatabase.qml @@ -140,14 +140,14 @@ TestCase { return false; } - function test_findByFileName() { + function test_mimeTypeForFileName() { var ok = 0 for (var listIx = 0; listIx < list().length; ++listIx) { //print(listValue(listIx).filePath) - var resultMimeTypeName = database.findByFileName(listValue(listIx).filePath).name - //print("findByFileName(" + listValue(listIx).filePath + ") returned", resultMimeTypeName) + var resultMimeTypeName = database.mimeTypeForFileName(listValue(listIx).filePath).name + //print("mimeTypeForFileName(" + listValue(listIx).filePath + ") returned", resultMimeTypeName) // Results are ambiguous when multiple MIME types have the same glob // -> accept the current result if the found MIME type actually @@ -183,14 +183,14 @@ TestCase { compare(ok, list().length) } - function test_findByFile() { + function test_mimeTypeForFile() { var ok = 0 for (var listIx = 0; listIx < list().length; ++listIx) { //print(listValue(listIx).filePath) - var resultMimeTypeName = database.findByFile(listValue(listIx).filePath).name - //print("findByFile(" + listValue(listIx).filePath + ") returned", resultMimeTypeName) + var resultMimeTypeName = database.mimeTypeForFile(listValue(listIx).filePath).name + //print("mimeTypeForFile(" + listValue(listIx).filePath + ") returned", resultMimeTypeName) // Expected to fail if (listValue(listIx).xFail.length >= 3 && listValue(listIx).xFail[2] == "x") { diff --git a/tests/auto/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/qmimedatabase/tst_qmimedatabase.cpp index 8c8dc89..653c99c 100644 --- a/tests/auto/qmimedatabase/tst_qmimedatabase.cpp +++ b/tests/auto/qmimedatabase/tst_qmimedatabase.cpp @@ -149,13 +149,13 @@ void tst_qmimedatabase::test_mimeTypeForName() else { const QString executableType = QString::fromLatin1("application/x-executable"); //QTest::newRow("executable") << exePath << executableType; - QCOMPARE(db.findByFile(exePath).name(), executableType); + QCOMPARE(db.mimeTypeForFile(exePath).name(), executableType); } #endif } -void tst_qmimedatabase::test_findByFileName_data() +void tst_qmimedatabase::test_mimeTypeForFileName_data() { QTest::addColumn<QString>("fileName"); QTest::addColumn<QString>("expectedMimeType"); @@ -190,12 +190,12 @@ void tst_qmimedatabase::test_findByFileName_data() QTest::newRow("doesn't exist but has known extension") << "IDontExist.txt" << "text/plain"; } -void tst_qmimedatabase::test_findByFileName() +void tst_qmimedatabase::test_mimeTypeForFileName() { QFETCH(QString, fileName); QFETCH(QString, expectedMimeType); QMimeDatabase db; - QMimeType mime = db.findByFileName(fileName); + QMimeType mime = db.mimeTypeForFile(fileName, QMimeDatabase::MatchExtension); QVERIFY(mime.isValid()); QCOMPARE(mime.name(), expectedMimeType); @@ -320,12 +320,12 @@ void tst_qmimedatabase::test_aliases() void tst_qmimedatabase::test_icons() { QMimeDatabase db; - QMimeType directory = db.findByFileName(QString::fromLatin1("/")); + QMimeType directory = db.mimeTypeForFile(QString::fromLatin1("/")); QCOMPARE(directory.name(), QString::fromLatin1("inode/directory")); QCOMPARE(directory.iconName(), QString::fromLatin1("inode-directory")); QCOMPARE(directory.genericIconName(), QString::fromLatin1("inode-x-generic")); - QMimeType pub = db.findByFileName(QString::fromLatin1("foo.epub")); + QMimeType pub = db.mimeTypeForFile(QString::fromLatin1("foo.epub"), QMimeDatabase::MatchExtension); QCOMPARE(pub.name(), QString::fromLatin1("application/epub+zip")); QCOMPARE(pub.iconName(), QString::fromLatin1("application-epub+zip")); QCOMPARE(pub.genericIconName(), QString::fromLatin1("x-office-document")); @@ -345,13 +345,13 @@ void tst_qmimedatabase::test_findByFileWithContent() QString tempFileName = tempFile.fileName(); tempFile.write("%PDF-"); tempFile.close(); - mime = db.findByFile(tempFileName); + mime = db.mimeTypeForFile(tempFileName); QCOMPARE(mime.name(), QString::fromLatin1("application/pdf")); QFile file(tempFileName); mime = db.findByData(&file); // QIODevice ctor QCOMPARE(mime.name(), QString::fromLatin1("application/pdf")); // by name only, we cannot find the mimetype - mime = db.findByFileName(tempFileName); + mime = db.mimeTypeForFile(tempFileName, QMimeDatabase::MatchExtension); QVERIFY(mime.isValid()); QVERIFY(mime.isDefault()); @@ -362,10 +362,10 @@ void tst_qmimedatabase::test_findByFileWithContent() txtTempFile.write("%PDF-"); QString txtTempFileName = txtTempFile.fileName(); txtTempFile.close(); - mime = db.findByFile(txtTempFileName); + mime = db.mimeTypeForFile(txtTempFileName); QCOMPARE(mime.name(), QString::fromLatin1("text/plain")); // fast mode finds the same - mime = db.findByFileName(txtTempFileName); + mime = db.mimeTypeForFile(txtTempFileName, QMimeDatabase::MatchExtension); QCOMPARE(mime.name(), QString::fromLatin1("text/plain")); } @@ -377,12 +377,12 @@ void tst_qmimedatabase::test_findByFileWithContent() txtTempFile.write("<smil"); QString txtTempFileName = txtTempFile.fileName(); txtTempFile.close(); - mime = db.findByFile(txtTempFileName); + mime = db.mimeTypeForFile(txtTempFileName); QCOMPARE(mime.name(), QString::fromLatin1("text/plain")); } // Test what happens with an incorrect path - mime = db.findByFile(QString::fromLatin1("file:///etc/passwd" /* incorrect code, use a path instead */)); + mime = db.mimeTypeForFile(QString::fromLatin1("file:///etc/passwd" /* incorrect code, use a path instead */)); QVERIFY(mime.isDefault()); // findByData when the device cannot be opened (e.g. a directory) @@ -421,7 +421,7 @@ void tst_qmimedatabase::test_findByContent() QCOMPARE(db.findByData(&buffer).name(), expectedMimeTypeName); } -void tst_qmimedatabase::test_findByFileNameAndContent_data() +void tst_qmimedatabase::test_mimeTypeForFileAndContent_data() { QTest::addColumn<QString>("name"); QTest::addColumn<QByteArray>("data"); @@ -440,14 +440,14 @@ void tst_qmimedatabase::test_findByFileNameAndContent_data() QTest::newRow("text.xls, found by extension, user is in control") << QString::fromLatin1("text.xls") << oleData << "application/vnd.ms-excel"; } -void tst_qmimedatabase::test_findByFileNameAndContent() +void tst_qmimedatabase::test_mimeTypeForFileAndContent() { QFETCH(QString, name); QFETCH(QByteArray, data); QFETCH(QString, expectedMimeTypeName); QMimeDatabase db; - QCOMPARE(db.findByFileNameAndData(name, data).name(), expectedMimeTypeName); + QCOMPARE(db.mimeTypeForNameAndData(name, data).name(), expectedMimeTypeName); } void tst_qmimedatabase::test_allMimeTypes() @@ -588,7 +588,7 @@ void tst_qmimedatabase::findByFileName() //qDebug() << Q_FUNC_INFO << filePath; - const QMimeType resultMimeType(database.findByFileName(filePath)); + const QMimeType resultMimeType(database.mimeTypeForFile(filePath, QMimeDatabase::MatchExtension)); if (resultMimeType.isValid()) { //qDebug() << Q_FUNC_INFO << "MIME type" << resultMimeType.name() << "has generic icon name" << resultMimeType.genericIconName() << "and icon name" << resultMimeType.iconName(); @@ -606,7 +606,7 @@ void tst_qmimedatabase::findByFileName() #endif } const QString resultMimeTypeName = resultMimeType.name(); - //qDebug() << Q_FUNC_INFO << "findByFileName() returned" << resultMimeTypeName; + //qDebug() << Q_FUNC_INFO << "mimeTypeForFile() returned" << resultMimeTypeName; const bool failed = resultMimeTypeName != mimeTypeName; const bool shouldFail = (xFail.length() >= 1 && xFail.at(0) == QLatin1Char('x')); @@ -630,6 +630,10 @@ void tst_qmimedatabase::findByFileName() } else { QCOMPARE(resultMimeTypeName, mimeTypeName); } + + // Test QFileInfo overload + const QMimeType mimeForFileInfo = database.mimeTypeForFile(QFileInfo(filePath), QMimeDatabase::MatchExtension); + QCOMPARE(mimeForFileInfo.name(), resultMimeTypeName); } void tst_qmimedatabase::findByData_data() @@ -655,6 +659,10 @@ void tst_qmimedatabase::findByData() } else { QCOMPARE(resultMimeTypeName, mimeTypeName); } + + QFileInfo info(filePath); + QString mimeForInfo = database.mimeTypeForFile(info, QMimeDatabase::MatchContent).name(); + QCOMPARE(mimeForInfo, resultMimeTypeName); } void tst_qmimedatabase::findByFile_data() @@ -669,7 +677,7 @@ void tst_qmimedatabase::findByFile() QFETCH(QString, xFail); QMimeDatabase database; - const QString resultMimeTypeName = database.findByFile(QFileInfo(filePath)).name(); + const QString resultMimeTypeName = database.mimeTypeForFile(filePath).name(); //qDebug() << Q_FUNC_INFO << filePath << "->" << resultMimeTypeName; if (xFail.length() >= 3 && xFail.at(2) == QLatin1Char('x')) { // Expected to fail @@ -677,6 +685,10 @@ void tst_qmimedatabase::findByFile() } else { QCOMPARE(resultMimeTypeName, mimeTypeName); } + + // Test QFileInfo overload + const QMimeType mimeForFileInfo = database.mimeTypeForFile(QFileInfo(filePath)); + QCOMPARE(mimeForFileInfo.name(), resultMimeTypeName); } @@ -761,14 +773,16 @@ void tst_qmimedatabase::installNewGlobalMimeType() QVERIFY(QFile::copy(srcFile, destFile)); waitAndRunUpdateMimeDatabase(mimeDir); - QCOMPARE(db.findByFileName(QLatin1String("foo.ymu")).name(), QString::fromLatin1("text/x-suse-ymu")); + QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(), + QString::fromLatin1("text/x-suse-ymu")); QVERIFY(db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); checkHasMimeType("text/x-suse-ymp"); // Now test removing it again QFile::remove(destFile); waitAndRunUpdateMimeDatabase(mimeDir); - QCOMPARE(db.findByFileName(QLatin1String("foo.ymu")).name(), QString::fromLatin1("application/octet-stream")); + QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(), + QString::fromLatin1("application/octet-stream")); QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); } @@ -789,19 +803,22 @@ void tst_qmimedatabase::installNewLocalMimeType() QVERIFY(QFile::copy(srcFile, destFile)); runUpdateMimeDatabase(mimeDir); - QCOMPARE(db.findByFileName(QLatin1String("foo.ymu")).name(), QString::fromLatin1("text/x-suse-ymu")); + QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(), + QString::fromLatin1("text/x-suse-ymu")); QVERIFY(db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); checkHasMimeType("text/x-suse-ymp"); // Now test removing it again (note, this leaves a mostly-empty mime.cache file) QFile::remove(destFile); waitAndRunUpdateMimeDatabase(mimeDir); - QCOMPARE(db.findByFileName(QLatin1String("foo.ymu")).name(), QString::fromLatin1("application/octet-stream")); + QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(), + QString::fromLatin1("application/octet-stream")); QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); // And now the user goes wild and uses rm -rf QFile::remove(mimeDir + QString::fromLatin1("/mime.cache")); - QCOMPARE(db.findByFileName(QLatin1String("foo.ymu")).name(), QString::fromLatin1("application/octet-stream")); + QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(), + QString::fromLatin1("application/octet-stream")); QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); } diff --git a/tests/auto/qmimedatabase/tst_qmimedatabase.h b/tests/auto/qmimedatabase/tst_qmimedatabase.h index 74b9fa2..3ffeb6a 100644 --- a/tests/auto/qmimedatabase/tst_qmimedatabase.h +++ b/tests/auto/qmimedatabase/tst_qmimedatabase.h @@ -22,8 +22,8 @@ private slots: void cleanupTestCase(); void test_mimeTypeForName(); - void test_findByFileName_data(); - void test_findByFileName(); + void test_mimeTypeForFileName_data(); + void test_mimeTypeForFileName(); void test_findMultipleByName_data(); void test_findMultipleByName(); void test_inheritance(); @@ -33,8 +33,8 @@ private slots: void test_findByUrl(); void test_findByContent_data(); void test_findByContent(); - void test_findByFileNameAndContent_data(); - void test_findByFileNameAndContent(); + void test_mimeTypeForFileAndContent_data(); + void test_mimeTypeForFileAndContent(); void test_allMimeTypes(); void test_inheritsPerformance(); void test_suffixes_data(); |