diff options
Diffstat (limited to 'src/search/opensearchreader.cpp')
-rw-r--r-- | src/search/opensearchreader.cpp | 135 |
1 files changed, 88 insertions, 47 deletions
diff --git a/src/search/opensearchreader.cpp b/src/search/opensearchreader.cpp index 0aa0f91f..5b7ece2c 100644 --- a/src/search/opensearchreader.cpp +++ b/src/search/opensearchreader.cpp @@ -1,48 +1,63 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * Copyright 2009 Fredy Yanardi <fyanardi@gmail.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) any later version. - * - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> +* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> +* 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/>. +* +* ============================================================ */ + + +// Self Includes #include "opensearchreader.h" +// Local Includes #include "opensearchengine.h" +// Qt Includes #include <QtCore/QIODevice> + OpenSearchReader::OpenSearchReader() : QXmlStreamReader() { } + OpenSearchEngine *OpenSearchReader::read(const QByteArray &data) { clear(); - addData(data); return read(); } + OpenSearchEngine *OpenSearchReader::read(QIODevice *device) { clear(); - if (!device->isOpen()) { + if (!device->isOpen()) + { device->open(QIODevice::ReadOnly); } @@ -50,6 +65,7 @@ OpenSearchEngine *OpenSearchReader::read(QIODevice *device) return read(); } + OpenSearchEngine *OpenSearchReader::read() { OpenSearchEngine *engine = new OpenSearchEngine(); @@ -58,28 +74,40 @@ OpenSearchEngine *OpenSearchReader::read() readNext(); } - if (name() != QLatin1String("OpenSearchDescription") - || namespaceUri() != QLatin1String("http://a9.com/-/spec/opensearch/1.1/")) { + if ( name() != QL1S("OpenSearchDescription") + || namespaceUri() != QL1S("http://a9.com/-/spec/opensearch/1.1/") + ) + { raiseError(QObject::tr("The file is not an OpenSearch 1.1 file.")); return engine; } - while (!(isEndElement() && name() == QLatin1String("OpenSearchDescription")) && !atEnd()) { + while (!(isEndElement() && name() == QL1S("OpenSearchDescription")) && !atEnd()) + { readNext(); - if (!isStartElement()) { + if (!isStartElement()) continue; - } - if (name() == QLatin1String("ShortName")) { + // ShortName + if (name() == QL1S("ShortName")) + { engine->setName(readElementText()); + continue; } - else if (name() == QLatin1String("Description")) { + + // Description + if (name() == QL1S("Description")) + { engine->setDescription(readElementText()); + continue; } - else if (name() == QLatin1String("Url")) { - QString type = attributes().value(QLatin1String("type")).toString(); - QString url = attributes().value(QLatin1String("template")).toString(); + + // Url + if (name() == QL1S("Url")) + { + QString type = attributes().value(QL1S("type")).toString(); + QString url = attributes().value(QL1S("template")).toString(); if (url.isEmpty()) continue; @@ -88,46 +116,59 @@ OpenSearchEngine *OpenSearchReader::read() readNext(); - while (!(isEndElement() && name() == QLatin1String("Url"))) { - if (!isStartElement() || (name() != QLatin1String("Param") && name() != QLatin1String("Parameter"))) { + while (!(isEndElement() && name() == QL1S("Url"))) + { + if (!isStartElement() || (name() != QL1S("Param") && name() != QL1S("Parameter"))) { readNext(); continue; } - QString key = attributes().value(QLatin1String("name")).toString(); - QString value = attributes().value(QLatin1String("value")).toString(); + QString key = attributes().value(QL1S("name")).toString(); + QString value = attributes().value(QL1S("value")).toString(); - if (!key.isEmpty() && !value.isEmpty()) { + if (!key.isEmpty() && !value.isEmpty()) + { parameters.append(OpenSearchEngine::Parameter(key, value)); } - while (!isEndElement()) { + while (!isEndElement()) + { readNext(); } } - if (type == QLatin1String("application/x-suggestions+json")) { + if (type == QL1S("application/x-suggestions+json")) + { engine->setSuggestionsUrlTemplate(url); engine->setSuggestionsParameters(parameters); } - else { + else + { engine->setSearchUrlTemplate(url); engine->setSearchParameters(parameters); } + + continue; } - else if (name() == QLatin1String("Image")) { + + // Image + if (name() == QL1S("Image")) + { engine->setImageUrl(readElementText()); + continue; } - if (!engine->name().isEmpty() - && !engine->description().isEmpty() - && !engine->suggestionsUrlTemplate().isEmpty() - && !engine->searchUrlTemplate().isEmpty() - && !engine->imageUrl().isEmpty()) { + // Engine check + if ( !engine->name().isEmpty() + && !engine->description().isEmpty() + && !engine->suggestionsUrlTemplate().isEmpty() + && !engine->searchUrlTemplate().isEmpty() + && !engine->imageUrl().isEmpty() + ) + { break; } } return engine; } - |