summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Faure <faure@kde.org>2011-12-12 19:19:07 +0100
committerDavid Faure <faure@kde.org>2011-12-12 19:51:12 +0100
commit04ed07012fbc6b9893a0bd8426adf94a582f741f (patch)
tree464040bb3476e367fc87d086a3c6bc1d1cab610a
parentd9704be38cd9445b8cd1022d19ab109f6cbbeb7a (diff)
Add missing method findByData(QIODevice *)
-rw-r--r--src/mimetypes/qmimedatabase.cpp23
-rw-r--r--src/mimetypes/qmimedatabase.h3
-rw-r--r--tests/auto/qmimedatabase/tst_qmimedatabase.cpp3
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());