diff --git a/src/Evaluate.cpp b/src/Evaluate.cpp index bad59db..44d8100 100644 --- a/src/Evaluate.cpp +++ b/src/Evaluate.cpp @@ -1,85 +1,14 @@ #include "Evaluate.h" #include "WebPage.h" #include "WebPageManager.h" +#include "JsonSerializer.h" #include Evaluate::Evaluate(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) { - m_buffer = ""; } void Evaluate::start() { QVariant result = page()->currentFrame()->evaluateJavaScript(arguments()[0]); - addVariant(result); - emitFinished(true, m_buffer); -} - -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 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("}"); + JsonSerializer serializer; + emitFinished(true, serializer.serialize(result)); } diff --git a/src/Evaluate.h b/src/Evaluate.h index e83c3bd..5b6896b 100644 --- a/src/Evaluate.h +++ b/src/Evaluate.h @@ -8,13 +8,5 @@ class Evaluate : public SocketCommand { public: Evaluate(WebPageManager *, QStringList &arguments, QObject *parent = 0); virtual void start(); - - private: - void addVariant(QVariant &object); - void addString(QString &string); - void addArray(QVariantList &list); - void addMap(QVariantMap &map); - - QString m_buffer; }; diff --git a/src/JsonSerializer.cpp b/src/JsonSerializer.cpp new file mode 100644 index 0000000..936a09d --- /dev/null +++ b/src/JsonSerializer.cpp @@ -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 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("}"); +} + diff --git a/src/JsonSerializer.h b/src/JsonSerializer.h new file mode 100644 index 0000000..529c120 --- /dev/null +++ b/src/JsonSerializer.h @@ -0,0 +1,19 @@ +#include +#include + +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; +}; + diff --git a/src/webkit_server.pro b/src/webkit_server.pro index 748ba0c..8a9df49 100644 --- a/src/webkit_server.pro +++ b/src/webkit_server.pro @@ -55,6 +55,7 @@ HEADERS = \ TimeoutCommand.h \ SetUrlBlacklist.h \ NoOpReply.h \ + JsonSerializer.h SOURCES = \ EnableLogging.cpp \ @@ -111,6 +112,7 @@ SOURCES = \ TimeoutCommand.cpp \ SetUrlBlacklist.cpp \ NoOpReply.cpp \ + JsonSerializer.cpp RESOURCES = webkit_server.qrc QT += network webkit