diff options
author | David Faure <faure@kde.org> | 2011-12-12 19:19:07 +0100 |
---|---|---|
committer | David Faure <faure@kde.org> | 2011-12-12 19:51:12 +0100 |
commit | 04ed07012fbc6b9893a0bd8426adf94a582f741f (patch) | |
tree | 464040bb3476e367fc87d086a3c6bc1d1cab610a | |
parent | d9704be38cd9445b8cd1022d19ab109f6cbbeb7a (diff) |
Add missing method findByData(QIODevice *)
-rw-r--r-- | src/mimetypes/qmimedatabase.cpp | 23 | ||||
-rw-r--r-- | src/mimetypes/qmimedatabase.h | 3 | ||||
-rw-r--r-- | tests/auto/qmimedatabase/tst_qmimedatabase.cpp | 3 |
3 files changed, 28 insertions, 1 deletions
diff --git a/src/mimetypes/qmimedatabase.cpp b/src/mimetypes/qmimedatabase.cpp index 7925807..2d2ddcc 100644 --- a/src/mimetypes/qmimedatabase.cpp +++ b/src/mimetypes/qmimedatabase.cpp @@ -489,6 +489,29 @@ QMimeType QMimeDatabase::findByData(const QByteArray &data) const // ------------------------------------------------------------------------------------------------ /*! + Returns a MIME type for the data in \a device. + + A valid MIME type is always returned. If \a data doesn't match any + known MIME type data, the default MIME type (application/octet-stream) + is returned. +*/ +QMimeType QMimeDatabase::findByData(QIODevice* device) const +{ + QMutexLocker locker(&d->mutex); + + int accuracy = 0; + if (device->isOpen() || device->open(QIODevice::ReadOnly)) { + // Read 16K in one go (QIODEVICE_BUFFERSIZE in qiodevice_p.h). + // This is much faster than seeking back and forth into QIODevice. + const QByteArray data = device->read(16384); + return d->findByData(data, &accuracy); + } + return mimeTypeForName(d->defaultMimeType()); +} + +// ------------------------------------------------------------------------------------------------ + +/*! Returns a MIME type for \a url. If the url is a local file, this calls findByFile. diff --git a/src/mimetypes/qmimedatabase.h b/src/mimetypes/qmimedatabase.h index 9c0465a..f8e1cd8 100644 --- a/src/mimetypes/qmimedatabase.h +++ b/src/mimetypes/qmimedatabase.h @@ -47,6 +47,7 @@ public: QMimeType mimeTypeForName(const QString &nameOrAlias) const; QMimeType findByName(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; @@ -71,5 +72,5 @@ private: }; QT_END_NAMESPACE - + #endif // QMIMEDATABASE_H_INCLUDED diff --git a/tests/auto/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/qmimedatabase/tst_qmimedatabase.cpp index 1ef2e54..9c24f27 100644 --- a/tests/auto/qmimedatabase/tst_qmimedatabase.cpp +++ b/tests/auto/qmimedatabase/tst_qmimedatabase.cpp @@ -229,6 +229,9 @@ void tst_qmimedatabase::test_findByFileWithContent() tempFile.close(); mime = db.findByFile(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.findByName(tempFileName); QVERIFY(mime.isValid()); |