89 if (!device->isOpen()) {
90 device->open(QIODevice::ReadOnly);
100 m_searchXml = QString::fromLatin1(device()->peek(1024 * 5));
102 if (!m_searchXml.contains(QLatin1String(
"http://a9.com/-/spec/opensearch/1.1/")) &&
103 !m_searchXml.contains(QLatin1String(
"http://www.mozilla.org/2006/browser/search/"))
105 raiseError(QObject::tr(
"The file is not an OpenSearch 1.1 file."));
112 int index = m_searchXml.indexOf(QLatin1String(
"<?xml"));
114 int end = m_searchXml.indexOf(QLatin1String(
"?>"), index);
117 device()->read(end + 2);
121 while (!isStartElement() && !atEnd()) {
129 if (!isStartElement()) {
133 if (name() == QLatin1String(
"ShortName") || name() == QLatin1String(
"os:ShortName")) {
134 engine->setName(readElementText());
136 else if (name() == QLatin1String(
"Description") || name() == QLatin1String(
"os:Description")) {
137 engine->setDescription(readElementText());
139 else if (name() == QLatin1String(
"Url") || name() == QLatin1String(
"os:Url")) {
140 QString type = attributes().value(QLatin1String(
"type")).toString();
141 QString url = attributes().value(QLatin1String(
"template")).toString();
142 QString method = attributes().value(QLatin1String(
"method")).toString();
144 if (type == QLatin1String(
"application/x-suggestions+json") &&
145 !engine->suggestionsUrlTemplate().isEmpty()
150 if ((type.isEmpty() ||
151 type == QLatin1String(
"text/html") ||
152 type == QLatin1String(
"application/xhtml+xml")) &&
153 !engine->searchUrlTemplate().isEmpty()
162 QList<OpenSearchEngine::Parameter> parameters;
166 while (!isEndElement() || (name() != QLatin1String(
"Url") && name() != QLatin1String(
"os:Url"))) {
167 if (!isStartElement() || (name() != QLatin1String(
"Param") && name() != QLatin1String(
"Parameter") &&
168 name() != QLatin1String(
"os:Param") && name() != QLatin1String(
"os:Parameter"))
174 QString key = attributes().value(QLatin1String(
"name")).toString();
175 QString
value = attributes().value(QLatin1String(
"value")).toString();
177 if (!key.isEmpty() && !
value.isEmpty()) {
181 while (!isEndElement()) {
186 if (type == QLatin1String(
"application/x-suggestions+json")) {
187 engine->setSuggestionsUrlTemplate(url);
188 engine->setSuggestionsParameters(parameters);
189 engine->setSuggestionsMethod(method);
191 else if (type.isEmpty() || type == QLatin1String(
"text/html") || type == QLatin1String(
"application/xhtml+xml")) {
192 engine->setSearchUrlTemplate(url);
193 engine->setSearchParameters(parameters);
194 engine->setSearchMethod(method);
198 else if (name() == QLatin1String(
"Image") || name() == QLatin1String(
"os:Image")) {
199 engine->setImageUrl(readElementText());
202 if (!engine->name().isEmpty() &&
203 !engine->description().isEmpty() &&
204 !engine->suggestionsUrlTemplate().isEmpty() &&
205 !engine->searchUrlTemplate().isEmpty() &&
206 !engine->imageUrl().isEmpty()
A class representing a single search engine described in OpenSearch format.
QPair< QString, QString > Parameter
OpenSearchEngine * read(QIODevice *device)
int value(const QColor &c)