From 72af78494652e97cf2caaf05a4ac1613359400f6 Mon Sep 17 00:00:00 2001 From: megabigbug Date: Mon, 4 Oct 2010 08:32:21 +0200 Subject: add an xml parser to the opensearch engine. --- src/opensearch/suggestionparser.cpp | 132 ++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 src/opensearch/suggestionparser.cpp (limited to 'src/opensearch/suggestionparser.cpp') diff --git a/src/opensearch/suggestionparser.cpp b/src/opensearch/suggestionparser.cpp new file mode 100644 index 00000000..56cd2c8e --- /dev/null +++ b/src/opensearch/suggestionparser.cpp @@ -0,0 +1,132 @@ +/* ============================================================ + * + * This file is a part of the rekonq project + * + * Copyright (C) 2010 by Lionel Chauvin + * Copyright (C) 2010 by Andrea Diamantini + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * ============================================================ */ + +#define QL1C(x) QLatin1Char(x) +#define QL1S(x) QLatin1String(x) + +// Self Includes +#include "suggestionparser.h" + +// Local Includes +#include +// Qt Includes +#include +#include + +ResponseList SuggestionParser::parse(const QByteArray &resp) +{ + return ResponseList(); +} + + +SuggestionParser::~SuggestionParser() +{ +} + + +ResponseList XMLParser::parse(const QByteArray &resp) +{ + ResponseList rlist; + + m_reader.clear(); + m_reader.addData(resp); + + while (!m_reader.isStartElement() && !m_reader.atEnd()) + { + m_reader.readNext(); + } + + while (!(m_reader.isEndElement() && m_reader.name() == QL1S("SearchSuggestion")) && !m_reader.atEnd()) + { + m_reader.readNext(); + + if (!m_reader.isStartElement()) + continue; + + if (m_reader.name() == QL1S("Item")) + { + QString title; + QString url; + QString description; + + while (!m_reader.isEndElement() && !m_reader.atEnd()) + { + m_reader.readNext(); + + if (m_reader.name() == QL1S("Text")) title = m_reader.readElementText(); + if (m_reader.name() == QL1S("Url")) url = m_reader.readElementText(); + if (m_reader.name() == QL1S("Description")) description = m_reader.readElementText(); + } + + rlist << Response(url, title, description); + } + } + + return rlist; +} + + +ResponseList JSONParser::parse(const QByteArray &resp) +{ + QString response = QString::fromLocal8Bit(resp); + response = response.trimmed(); + + if (response.isEmpty()) + { + return ResponseList(); + } + + if (!response.startsWith(QL1C('[')) + || !response.endsWith(QL1C(']')) + ) + { + return ResponseList(); + } + + // Evaluate the JSON response using QtScript. + if (!m_reader.canEvaluate(response)) + { + return ResponseList(); + } + + QScriptValue responseParts = m_reader.evaluate(response); + + if (!responseParts.property(1).isArray()) + { + return ResponseList(); + } + + ResponseList rlist; + QStringList responsePartsList; + qScriptValueToSequence(responseParts.property(1), responsePartsList); + + foreach(QString s, responsePartsList) + { + rlist << Response(QString(), s, QString()); + } + + return rlist; +} \ No newline at end of file -- cgit v1.2.1