From f442c2f605b1bcc53e8afa1b3b0662187cee7aba Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Sun, 17 Mar 2013 11:58:14 +0100 Subject: [PATCH] Add a convenience function to do the parsing, handling XML and JSON cases --- src/libdanbooru/utils.cpp | 66 +++++++++++++++++++++++++++++++++++++++ src/libdanbooru/utils.h | 9 ++++++ 2 files changed, 75 insertions(+) diff --git a/src/libdanbooru/utils.cpp b/src/libdanbooru/utils.cpp index ebbc99e..992882f 100644 --- a/src/libdanbooru/utils.cpp +++ b/src/libdanbooru/utils.cpp @@ -21,6 +21,9 @@ */ #include "utils.h" +#include +#include +#include namespace Danbooru { @@ -101,5 +104,68 @@ namespace Danbooru { return danbooruUrl; } + QList< QVariant > parseDanbooruResult(QByteArray data, QString elementName, + bool* result) + { + + QXmlStreamReader reader; + reader.addData(data); + + QList postData; + + while(!reader.atEnd() && !reader.hasError()) { + + QXmlStreamReader::TokenType token = reader.readNext(); + + if (token == QXmlStreamReader::StartDocument) { + continue; + } + + if(token == QXmlStreamReader::StartElement && + reader.name() == elementName) { + + QVariantMap values; + + QXmlStreamAttributes attributes = reader.attributes(); + +// qDebug() << attributes; + + Q_FOREACH(const QXmlStreamAttribute& attribute, attributes) { + values.insert(attribute.name().toString(), + attribute.value().toString()); + } + + if (values.isEmpty()) { + *result = false; + return QList(); + } + + QVariant converted = QVariant(values); + + postData.append(converted); + } + } + *result = true; + return postData; + } + + QList< QVariant > parseDanbooruResult(QByteArray data, bool* result) + { + QJson::Parser parser; + + bool ok; + + QVariant postData = parser.parse(data, &ok); + + if (!ok) { + *result = ok; + return QList(); + } + + *result = true; + + return postData.toList(); + } + } // namespace Danbooru diff --git a/src/libdanbooru/utils.h b/src/libdanbooru/utils.h index 185e984..52a02e9 100644 --- a/src/libdanbooru/utils.h +++ b/src/libdanbooru/utils.h @@ -23,8 +23,12 @@ #ifndef UTILS_H #define UTILS_H +// Qt + #include +// KDE + #include /** @@ -100,5 +104,10 @@ namespace Danbooru { const QString& password); + QList parseDanbooruResult(QByteArray data, QString xlmElement, + bool* result); + QList parseDanbooruResult(QByteArray data, bool* result); + + } #endif // UTILS_H