adapt opensearch reader and writer for xml suggestions
[rekonq:nikhilms-mainline.git] / src / opensearch / suggestionparser.cpp
1 /* ============================================================
2  * 
3  * This file is a part of the rekonq project
4  *
5  * Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr>
6  * Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
7  *
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License as
11  * published by the Free Software Foundation; either version 2 of
12  * the License or (at your option) version 3 or any later version
13  * accepted by the membership of KDE e.V. (or its successor approved
14  * by the membership of KDE e.V.), which shall act as a proxy
15  * defined in Section 14 of version 3 of the license.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
24  *
25  * ============================================================ */
26
27 #define QL1C(x) QLatin1Char(x)
28 #define QL1S(x) QLatin1String(x)
29
30 // Self Includes
31 #include "suggestionparser.h"
32
33 // Local Includes
34 #include<KDebug>
35 // Qt Includes
36 #include<QByteArray>
37 #include<QStringList>
38
39 ResponseList SuggestionParser::parse(const QByteArray &)
40 {
41     return ResponseList();    
42 }
43
44
45 SuggestionParser::~SuggestionParser()
46 {
47 }
48
49
50 ResponseList XMLParser::parse(const QByteArray &resp)
51 {
52     ResponseList rlist;
53     
54     m_reader.clear();
55     m_reader.addData(resp);
56
57     while (!m_reader.atEnd() && !m_reader.hasError())
58     {
59         m_reader.readNext();
60
61         if (m_reader.isStartDocument()) continue;
62
63         if (m_reader.isStartElement() && m_reader.name() == QL1S("Item"))
64         {
65             QString title;
66             QString description;
67             QString url;
68             QString image;
69             int image_width=0;
70             int image_height=0;
71
72             m_reader.readNext();
73
74             while(!(m_reader.isEndElement() && m_reader.name() == "Item"))
75             {
76                 if(m_reader.isStartElement())
77                 {
78                     if (m_reader.name() == QL1S("Text")) title = m_reader.readElementText();
79                     if (m_reader.name() == QL1S("Url")) url = m_reader.readElementText();
80                     if (m_reader.name() == QL1S("Image"))
81                     {
82                         image = m_reader.attributes().value("source").toString();
83                         image_width = m_reader.attributes().value("width").toString().toInt();
84                         image_height = m_reader.attributes().value("height").toString().toInt();
85                     }
86                     if (m_reader.name() == QL1S("Description")) description = m_reader.readElementText();
87                 }
88
89                 m_reader.readNext();
90             }
91             rlist << Response(title, description, url, image, image_width, image_height);
92         }
93
94         m_reader.readNext();
95     }
96     
97     return rlist;
98 }
99
100
101 ResponseList JSONParser::parse(const QByteArray &resp)
102 {
103     QString response = QString::fromLocal8Bit(resp);
104     response = response.trimmed();
105     
106     if (response.isEmpty()) 
107     {
108         return ResponseList();
109     }
110     
111     if (!response.startsWith(QL1C('[')) 
112         || !response.endsWith(QL1C(']'))
113     ) 
114     {
115         return ResponseList();
116     }
117
118     // Evaluate the JSON response using QtScript.
119     if (!m_reader.canEvaluate(response)) 
120     {
121         return ResponseList();
122     }
123
124     QScriptValue responseParts = m_reader.evaluate(response);
125
126     if (!responseParts.property(1).isArray()) 
127     {
128         return ResponseList();
129     }
130
131     ResponseList rlist;
132     QStringList responsePartsList;
133     qScriptValueToSequence(responseParts.property(1), responsePartsList);
134
135     foreach(QString s, responsePartsList)
136     {
137         rlist << Response(s);
138     }
139  
140     return rlist;
141 }