Skip to content

Commit 0a50ff2

Browse files
committed
added QMimeDatabase uasge for QT5
1 parent 0651880 commit 0a50ff2

File tree

1 file changed

+62
-37
lines changed

1 file changed

+62
-37
lines changed

src/webdriver/extension_qt/q_content_type_resolver.cc

Lines changed: 62 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77

88
#include <QtNetwork/QNetworkReply>
99

10+
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
11+
#include <QtCore/QMimeDatabase>
12+
#include <QtCore/QMimeType>
13+
#endif
14+
1015
namespace webdriver {
1116

1217
QContentTypeResolver::QContentTypeResolver(QNetworkAccessManager *pmanager)
@@ -15,51 +20,71 @@ QContentTypeResolver::QContentTypeResolver(QNetworkAccessManager *pmanager)
1520
QContentTypeResolver::~QContentTypeResolver() {}
1621

1722
Error* QContentTypeResolver::resolveContentType(const std::string& url, std::string& mimetype) {
18-
QEventLoop loop;
19-
QObject::connect(manager_, SIGNAL(finished(QNetworkReply*)),
20-
&loop,SLOT(quit()));
21-
22-
Error *error = NULL;
23-
QNetworkRequest request;
24-
request.setUrl(QUrl(QString::fromStdString(url)));
25-
QNetworkReply *reply = manager_->head(request);
26-
if (NULL == reply) {
27-
error = new Error(kBadRequest);
28-
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : invalid Request ");
29-
return error;
30-
}
23+
QUrl contentUrl(QString::fromStdString(url));
24+
QString scheme = contentUrl.scheme();
25+
QString qmimetype;
26+
Error* error = NULL;
3127

32-
if(reply->isRunning()) {
33-
loop.exec();
34-
}
28+
if ( (0 == scheme.compare("http", Qt::CaseInsensitive)) ||
29+
(0 == scheme.compare("https", Qt::CaseInsensitive)) ) {
3530

36-
QNetworkReply::NetworkError err = reply->error();
37-
if (err) {
38-
error = new Error(kBadRequest);
39-
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : NetworkError : " + QString::number(err).toStdString());
40-
return error;
41-
}
31+
QEventLoop loop;
32+
QObject::connect(manager_, SIGNAL(finished(QNetworkReply*)),
33+
&loop,SLOT(quit()));
4234

43-
QVariant contentMimeType = reply->header(QNetworkRequest::ContentTypeHeader);
44-
if (!contentMimeType.isValid()) {
45-
error = new Error(kBadRequest);
46-
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : ContentMimeType invalid ");
47-
return error;
48-
}
35+
QNetworkRequest request;
36+
request.setUrl(contentUrl);
4937

50-
QString qmimetype = contentMimeType.toString();
51-
int index = qmimetype.indexOf(";");
52-
if (index != -1) {
53-
qmimetype.remove(index, qmimetype.length()-index);
54-
}
38+
QNetworkReply *reply = manager_->head(request);
39+
if (NULL == reply) {
40+
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : invalid Request ");
41+
return new Error(kBadRequest);
42+
}
43+
44+
if(reply->isRunning()) {
45+
loop.exec();
46+
}
47+
48+
QNetworkReply::NetworkError err = reply->error();
49+
if (err) {
50+
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : NetworkError : " + QString::number(err).toStdString());
51+
return new Error(kBadRequest);
52+
}
53+
54+
QVariant contentMimeType = reply->header(QNetworkRequest::ContentTypeHeader);
55+
if (!contentMimeType.isValid()) {
56+
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : ContentMimeType invalid ");
57+
return new Error(kBadRequest);
58+
}
59+
60+
qmimetype = contentMimeType.toString();
61+
int index = qmimetype.indexOf(";");
62+
if (index != -1) {
63+
qmimetype.remove(index, qmimetype.length()-index);
64+
}
65+
66+
if (qmimetype.isEmpty()) {
67+
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : ContentMimeType is empty ");
68+
return new Error(kBadRequest);
69+
}
70+
} else {
71+
// non http schemes
72+
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
73+
QMimeDatabase mimeDatabase;
74+
QMimeType mimeType;
75+
mimeType = mimeDatabase.mimeTypeForUrl(contentUrl);
76+
77+
qmimetype = mimeType.name();
78+
#else
79+
// TODO: implement for qt4
80+
#endif
5581

56-
if (qmimetype.isEmpty()) {
57-
error = new Error(kBadRequest);
58-
GlobalLogger::Log(kWarningLogLevel, "QContentTypeResolver::resolveContentType() : ContentMimeType is empty ");
59-
return error;
6082
}
6183

6284
mimetype = qmimetype.toStdString();
85+
86+
GlobalLogger::Log(kInfoLogLevel, "QContentTypeResolver::resolveContentType() : content type: " + mimetype);
87+
6388
return error;
6489
}
6590

0 commit comments

Comments
 (0)