$END_LICENSE */
#include "jsfunctions.h"
-#include "networkaccess.h"
-#include <QDesktopServices>
#include "constants.h"
+#include "http.h"
-namespace The {
-NetworkAccess* http();
-}
+#include <QJSValueIterator>
-JsFunctions* JsFunctions::instance() {
+JsFunctions *JsFunctions::instance() {
static JsFunctions *i = new JsFunctions(QLatin1String(Constants::WEBSITE) + "-ws/functions.js");
return i;
}
-JsFunctions::JsFunctions(const QString &url, QObject *parent) : QObject(parent), url(url), engine(0) {
+JsFunctions::JsFunctions(const QString &url, QObject *parent)
+ : QObject(parent), url(url), engine(nullptr) {
QFile file(jsPath());
if (file.exists()) {
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
else
qWarning() << "Cannot open" << file.errorString() << file.fileName();
QFileInfo info(file);
- bool stale = info.size() == 0 || info.lastModified().toTime_t() < QDateTime::currentDateTime().toTime_t() - 1800;
+ bool stale = info.size() == 0 || info.lastModified().toTime_t() <
+ QDateTime::currentDateTime().toTime_t() - 1800;
if (stale) loadJs();
} else {
QFile resFile(QLatin1String(":/") + jsFilename());
if (js.isEmpty()) return;
// qDebug() << "Parsing" << js;
if (engine) delete engine;
- engine = new QScriptEngine(this);
+ engine = new QJSEngine(this);
engine->evaluate(js);
emit ready();
}
return QFileInfo(url).fileName();
}
+QString JsFunctions::jsDir() {
+ return QStandardPaths::writableLocation(QStandardPaths::DataLocation);
+}
+
QString JsFunctions::jsPath() {
- return QString(
- #if QT_VERSION >= 0x050000
- QStandardPaths::writableLocation(QStandardPaths::DataLocation)
- #else
- QDesktopServices::storageLocation(QDesktopServices::DataLocation)
- #endif
- + "/" + jsFilename());
+ return jsDir() + QLatin1String("/") + jsFilename();
}
void JsFunctions::loadJs() {
QUrl url(this->url);
- url.addQueryItem("v", Constants::VERSION);
- NetworkReply* reply = The::http()->get(url);
+ QUrlQuery q;
+ q.addQueryItem("v", Constants::VERSION);
+ url.setQuery(q);
+ QObject *reply = Http::instance().get(url);
connect(reply, SIGNAL(data(QByteArray)), SLOT(gotJs(QByteArray)));
- connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(errorJs(QNetworkReply*)));
+ connect(reply, SIGNAL(error(QString)), SLOT(errorJs(QString)));
}
void JsFunctions::gotJs(const QByteArray &bytes) {
qWarning() << "Got empty js";
return;
}
+ QDir().mkpath(jsDir());
QFile file(jsPath());
if (!file.open(QIODevice::WriteOnly)) {
qWarning() << "Cannot write" << file.errorString() << file.fileName();
parseJs(QString::fromUtf8(bytes));
}
-void JsFunctions::errorJs(QNetworkReply *reply) {
- qWarning() << "Cannot get" << jsFilename() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()
- << reply->url().toString() << reply->errorString();
+void JsFunctions::errorJs(const QString &message) {
+ qWarning() << message;
}
-QScriptValue JsFunctions::evaluate(const QString &js) {
+QJSValue JsFunctions::evaluate(const QString &js) {
if (!engine) return QString();
- QScriptValue value = engine->evaluate(js);
- if (value.isUndefined())
- qWarning() << "Undefined result for" << js;
- if (value.isError())
- qWarning() << "Error in" << js << value.toString();
+ QJSValue value = engine->evaluate(js);
+ if (value.isUndefined()) qWarning() << "Undefined result for" << js;
+ if (value.isError()) qWarning() << "Error in" << js << value.toString();
return value;
}
QStringList JsFunctions::stringArray(const QString &js) {
QStringList items;
- QScriptValue array = evaluate(js);
+ QJSValue array = evaluate(js);
if (!array.isArray()) return items;
- QScriptValueIterator it(array);
+ QJSValueIterator it(array);
while (it.hasNext()) {
it.next();
- QScriptValue value = it.value();
+ QJSValue value = it.value();
if (!value.isString()) continue;
items << value.toString();
}
return string("signatureFunctionNameRE()");
}
+QStringList JsFunctions::signatureFunctionNameREs() {
+ return stringArray("signatureFunctionNameREs()");
+}
+
QStringList JsFunctions::apiKeys() {
return stringArray("apiKeys()");
}