summaryrefslogtreecommitdiff
path: root/src/opensearch/suggestionparser.cpp
diff options
context:
space:
mode:
authormegabigbug <megabigbug@yahoo.fr>2010-10-04 08:32:21 +0200
committerAndrea Diamantini <adjam7@gmail.com>2010-10-30 11:38:06 +0200
commit72af78494652e97cf2caaf05a4ac1613359400f6 (patch)
treea3968f159fd075a10c20ad2165ecef66b14b9eef /src/opensearch/suggestionparser.cpp
parentAdded CtestConfig.cmake (diff)
downloadrekonq-72af78494652e97cf2caaf05a4ac1613359400f6.tar.xz
add an xml parser to the opensearch engine.
Diffstat (limited to 'src/opensearch/suggestionparser.cpp')
-rw-r--r--src/opensearch/suggestionparser.cpp132
1 files changed, 132 insertions, 0 deletions
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 <megabigbug@yahoo.fr>
+ * Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
+ *
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ * ============================================================ */
+
+#define QL1C(x) QLatin1Char(x)
+#define QL1S(x) QLatin1String(x)
+
+// Self Includes
+#include "suggestionparser.h"
+
+// Local Includes
+#include<KDebug>
+// Qt Includes
+#include<QByteArray>
+#include<QStringList>
+
+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