diff options
Diffstat (limited to 'src/search/opensearchengine.cpp')
-rw-r--r-- | src/search/opensearchengine.cpp | 133 |
1 files changed, 89 insertions, 44 deletions
diff --git a/src/search/opensearchengine.cpp b/src/search/opensearchengine.cpp index a7bcf11e..ab12d2ad 100644 --- a/src/search/opensearchengine.cpp +++ b/src/search/opensearchengine.cpp @@ -1,182 +1,219 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * Copyright 2009 Christian Franke <cfchris6@ts2server.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 Christian Franke <cfchris6@ts2server.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 "opensearchengine.h" +// Qt Includes #include <QtCore/QRegExp> #include <QtCore/QStringList> #include <QtScript/QScriptEngine> #include <QtScript/QScriptValue> + OpenSearchEngine::OpenSearchEngine(QObject *) : m_scriptEngine(0) { } + OpenSearchEngine::~OpenSearchEngine() { - if (m_scriptEngine) { + if (m_scriptEngine) + { delete m_scriptEngine; } } + QString OpenSearchEngine::parseTemplate(const QString &searchTerm, const QString &searchTemplate) { QString result = searchTemplate; - result.replace(QLatin1String("{count}"), QLatin1String("20")); - result.replace(QLatin1String("{startIndex}"), QLatin1String("0")); - result.replace(QLatin1String("{startPage}"), QLatin1String("0")); + result.replace(QL1S("{count}"), QL1S("20")); + result.replace(QL1S("{startIndex}"), QL1S("0")); + result.replace(QL1S("{startPage}"), QL1S("0")); // TODO - get setting from KDE - result.replace(QLatin1String("{language}"), QLatin1String("en-US")); - result.replace(QLatin1String("{inputEncoding}"), QLatin1String("UTF-8")); - result.replace(QLatin1String("{outputEncoding}"), QLatin1String("UTF-8")); - result.replace(QLatin1String("{searchTerms}"), searchTerm); + result.replace(QL1S("{language}"), QL1S("en-US")); + result.replace(QL1S("{inputEncoding}"), QL1S("UTF-8")); + result.replace(QL1S("{outputEncoding}"), QL1S("UTF-8")); + result.replace(QL1S("{searchTerms}"), searchTerm); return result; } + QString OpenSearchEngine::name() const { return m_name; } + void OpenSearchEngine::setName(const QString &name) { m_name = name; } + QString OpenSearchEngine::description() const { return m_description; } + void OpenSearchEngine::setDescription(const QString &description) { m_description = description; } + QString OpenSearchEngine::searchUrlTemplate() const { return m_searchUrlTemplate; } + void OpenSearchEngine::setSearchUrlTemplate(const QString &searchUrlTemplate) { m_searchUrlTemplate = searchUrlTemplate; } + KUrl OpenSearchEngine::searchUrl(const QString &searchTerm) const { - if (m_searchUrlTemplate.isEmpty()) { + if (m_searchUrlTemplate.isEmpty()) + { return KUrl(); } KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_searchUrlTemplate).toUtf8()); - QList<Parameter>::const_iterator end = m_searchParameters.constEnd(); - QList<Parameter>::const_iterator i = m_searchParameters.constBegin(); - for (; i != end; ++i) { + QList<Parameter>::const_iterator i; + for ( i = m_searchParameters.constBegin(); i != m_searchParameters.constEnd(); ++i) + { retVal.addQueryItem(i->first, parseTemplate(searchTerm, i->second)); } return retVal; } + bool OpenSearchEngine::providesSuggestions() const { return !m_suggestionsUrlTemplate.isEmpty(); } + QString OpenSearchEngine::suggestionsUrlTemplate() const { return m_suggestionsUrlTemplate; } + void OpenSearchEngine::setSuggestionsUrlTemplate(const QString &suggestionsUrlTemplate) { m_suggestionsUrlTemplate = suggestionsUrlTemplate; } + KUrl OpenSearchEngine::suggestionsUrl(const QString &searchTerm) const { - if (m_suggestionsUrlTemplate.isEmpty()) { + if (m_suggestionsUrlTemplate.isEmpty()) + { return KUrl(); } KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_suggestionsUrlTemplate).toUtf8()); - QList<Parameter>::const_iterator end = m_suggestionsParameters.constEnd(); - QList<Parameter>::const_iterator i = m_suggestionsParameters.constBegin(); - for (; i != end; ++i) { + QList<Parameter>::const_iterator i; + for( i = m_suggestionsParameters.constBegin(); i != m_suggestionsParameters.constEnd(); ++i) + { retVal.addQueryItem(i->first, parseTemplate(searchTerm, i->second)); } - return retVal; } + QList<OpenSearchEngine::Parameter> OpenSearchEngine::searchParameters() const { return m_searchParameters; } + void OpenSearchEngine::setSearchParameters(const QList<Parameter> &searchParameters) { m_searchParameters = searchParameters; } + QList<OpenSearchEngine::Parameter> OpenSearchEngine::suggestionsParameters() const { return m_suggestionsParameters; } + void OpenSearchEngine::setSuggestionsParameters(const QList<Parameter> &suggestionsParameters) { m_suggestionsParameters = suggestionsParameters; } + QString OpenSearchEngine::imageUrl() const { return m_imageUrl; } + void OpenSearchEngine::setImageUrl(const QString &imageUrl) { m_imageUrl = imageUrl; } + QImage OpenSearchEngine::image() const { return m_image; } + void OpenSearchEngine::setImage(const QImage &image) { m_image = image; } + bool OpenSearchEngine::isValid() const { return (!m_name.isEmpty() && !m_searchUrlTemplate.isEmpty()); } + bool OpenSearchEngine::operator==(const OpenSearchEngine &other) const { return (m_name == other.m_name @@ -188,36 +225,45 @@ bool OpenSearchEngine::operator==(const OpenSearchEngine &other) const && m_suggestionsParameters == other.m_suggestionsParameters); } + bool OpenSearchEngine::operator<(const OpenSearchEngine &other) const { return (m_name < other.m_name); } + QStringList OpenSearchEngine::parseSuggestion(const QByteArray &resp) { QString response(resp); response = response.trimmed(); - if (response.isEmpty()) { + if (response.isEmpty()) + { return QStringList(); } - if (!response.startsWith(QLatin1Char('[')) || !response.endsWith(QLatin1Char(']'))) { + if ( !response.startsWith(QL1C('[')) + || !response.endsWith(QL1C(']')) + ) + { return QStringList(); } - if (!m_scriptEngine) { + if (!m_scriptEngine) + { m_scriptEngine = new QScriptEngine(); } // Evaluate the JSON response using QtScript. - if (!m_scriptEngine->canEvaluate(response)) { + if (!m_scriptEngine->canEvaluate(response)) + { return QStringList(); } QScriptValue responseParts = m_scriptEngine->evaluate(response); - if (!responseParts.property(1).isArray()) { + if (!responseParts.property(1).isArray()) + { return QStringList(); } @@ -226,4 +272,3 @@ QStringList OpenSearchEngine::parseSuggestion(const QByteArray &resp) return suggestionsList; } - |