Extract JSON serializer
This commit is contained in:
parent
11c596f7a0
commit
c0e896b064
|
@ -1,85 +1,14 @@
|
||||||
#include "Evaluate.h"
|
#include "Evaluate.h"
|
||||||
#include "WebPage.h"
|
#include "WebPage.h"
|
||||||
#include "WebPageManager.h"
|
#include "WebPageManager.h"
|
||||||
|
#include "JsonSerializer.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
Evaluate::Evaluate(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) {
|
Evaluate::Evaluate(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) {
|
||||||
m_buffer = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Evaluate::start() {
|
void Evaluate::start() {
|
||||||
QVariant result = page()->currentFrame()->evaluateJavaScript(arguments()[0]);
|
QVariant result = page()->currentFrame()->evaluateJavaScript(arguments()[0]);
|
||||||
addVariant(result);
|
JsonSerializer serializer;
|
||||||
emitFinished(true, m_buffer);
|
emitFinished(true, serializer.serialize(result));
|
||||||
}
|
|
||||||
|
|
||||||
void Evaluate::addVariant(QVariant &object) {
|
|
||||||
if (object.isValid()) {
|
|
||||||
switch(object.type()) {
|
|
||||||
case QMetaType::QString:
|
|
||||||
{
|
|
||||||
QString string = object.toString();
|
|
||||||
addString(string);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case QMetaType::QVariantList:
|
|
||||||
{
|
|
||||||
QVariantList list = object.toList();
|
|
||||||
addArray(list);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case QMetaType::Double:
|
|
||||||
m_buffer.append(object.toString());
|
|
||||||
break;
|
|
||||||
case QMetaType::QVariantMap:
|
|
||||||
{
|
|
||||||
QVariantMap map = object.toMap();
|
|
||||||
addMap(map);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case QMetaType::Bool:
|
|
||||||
{
|
|
||||||
m_buffer.append(object.toString());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
m_buffer.append("null");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
m_buffer.append("null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Evaluate::addString(QString &string) {
|
|
||||||
QString escapedString(string);
|
|
||||||
escapedString.replace("\"", "\\\"");
|
|
||||||
m_buffer.append("\"");
|
|
||||||
m_buffer.append(escapedString);
|
|
||||||
m_buffer.append("\"");
|
|
||||||
}
|
|
||||||
|
|
||||||
void Evaluate::addArray(QVariantList &list) {
|
|
||||||
m_buffer.append("[");
|
|
||||||
for (int i = 0; i < list.length(); i++) {
|
|
||||||
if (i > 0)
|
|
||||||
m_buffer.append(",");
|
|
||||||
addVariant(list[i]);
|
|
||||||
}
|
|
||||||
m_buffer.append("]");
|
|
||||||
}
|
|
||||||
|
|
||||||
void Evaluate::addMap(QVariantMap &map) {
|
|
||||||
m_buffer.append("{");
|
|
||||||
QMapIterator<QString, QVariant> iterator(map);
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
iterator.next();
|
|
||||||
QString key = iterator.key();
|
|
||||||
QVariant value = iterator.value();
|
|
||||||
addString(key);
|
|
||||||
m_buffer.append(":");
|
|
||||||
addVariant(value);
|
|
||||||
if (iterator.hasNext())
|
|
||||||
m_buffer.append(",");
|
|
||||||
}
|
|
||||||
m_buffer.append("}");
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,13 +8,5 @@ class Evaluate : public SocketCommand {
|
||||||
public:
|
public:
|
||||||
Evaluate(WebPageManager *, QStringList &arguments, QObject *parent = 0);
|
Evaluate(WebPageManager *, QStringList &arguments, QObject *parent = 0);
|
||||||
virtual void start();
|
virtual void start();
|
||||||
|
|
||||||
private:
|
|
||||||
void addVariant(QVariant &object);
|
|
||||||
void addString(QString &string);
|
|
||||||
void addArray(QVariantList &list);
|
|
||||||
void addMap(QVariantMap &map);
|
|
||||||
|
|
||||||
QString m_buffer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
#include "JsonSerializer.h"
|
||||||
|
|
||||||
|
JsonSerializer::JsonSerializer(QObject *parent) : QObject(parent) {
|
||||||
|
}
|
||||||
|
|
||||||
|
QString JsonSerializer::serialize(QVariant &object) {
|
||||||
|
addVariant(object);
|
||||||
|
return m_buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JsonSerializer::addVariant(QVariant &object) {
|
||||||
|
if (object.isValid()) {
|
||||||
|
switch(object.type()) {
|
||||||
|
case QMetaType::QString:
|
||||||
|
{
|
||||||
|
QString string = object.toString();
|
||||||
|
addString(string);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case QMetaType::QVariantList:
|
||||||
|
{
|
||||||
|
QVariantList list = object.toList();
|
||||||
|
addArray(list);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case QMetaType::Double:
|
||||||
|
m_buffer.append(object.toString());
|
||||||
|
break;
|
||||||
|
case QMetaType::QVariantMap:
|
||||||
|
{
|
||||||
|
QVariantMap map = object.toMap();
|
||||||
|
addMap(map);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case QMetaType::Bool:
|
||||||
|
{
|
||||||
|
m_buffer.append(object.toString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
m_buffer.append("null");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
m_buffer.append("null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JsonSerializer::addString(QString &string) {
|
||||||
|
QString escapedString(string);
|
||||||
|
escapedString.replace("\"", "\\\"");
|
||||||
|
m_buffer.append("\"");
|
||||||
|
m_buffer.append(escapedString);
|
||||||
|
m_buffer.append("\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
void JsonSerializer::addArray(QVariantList &list) {
|
||||||
|
m_buffer.append("[");
|
||||||
|
for (int i = 0; i < list.length(); i++) {
|
||||||
|
if (i > 0)
|
||||||
|
m_buffer.append(",");
|
||||||
|
addVariant(list[i]);
|
||||||
|
}
|
||||||
|
m_buffer.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
|
void JsonSerializer::addMap(QVariantMap &map) {
|
||||||
|
m_buffer.append("{");
|
||||||
|
QMapIterator<QString, QVariant> iterator(map);
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
iterator.next();
|
||||||
|
QString key = iterator.key();
|
||||||
|
QVariant value = iterator.value();
|
||||||
|
addString(key);
|
||||||
|
m_buffer.append(":");
|
||||||
|
addVariant(value);
|
||||||
|
if (iterator.hasNext())
|
||||||
|
m_buffer.append(",");
|
||||||
|
}
|
||||||
|
m_buffer.append("}");
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include <QObject>
|
||||||
|
#include <QVariantList>
|
||||||
|
|
||||||
|
class JsonSerializer : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
JsonSerializer(QObject *parent = 0);
|
||||||
|
QString serialize(QVariant &object);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void addVariant(QVariant &object);
|
||||||
|
void addString(QString &string);
|
||||||
|
void addArray(QVariantList &list);
|
||||||
|
void addMap(QVariantMap &map);
|
||||||
|
|
||||||
|
QString m_buffer;
|
||||||
|
};
|
||||||
|
|
|
@ -55,6 +55,7 @@ HEADERS = \
|
||||||
TimeoutCommand.h \
|
TimeoutCommand.h \
|
||||||
SetUrlBlacklist.h \
|
SetUrlBlacklist.h \
|
||||||
NoOpReply.h \
|
NoOpReply.h \
|
||||||
|
JsonSerializer.h
|
||||||
|
|
||||||
SOURCES = \
|
SOURCES = \
|
||||||
EnableLogging.cpp \
|
EnableLogging.cpp \
|
||||||
|
@ -111,6 +112,7 @@ SOURCES = \
|
||||||
TimeoutCommand.cpp \
|
TimeoutCommand.cpp \
|
||||||
SetUrlBlacklist.cpp \
|
SetUrlBlacklist.cpp \
|
||||||
NoOpReply.cpp \
|
NoOpReply.cpp \
|
||||||
|
JsonSerializer.cpp
|
||||||
|
|
||||||
RESOURCES = webkit_server.qrc
|
RESOURCES = webkit_server.qrc
|
||||||
QT += network webkit
|
QT += network webkit
|
||||||
|
|
Loading…
Reference in New Issue