diff options
Diffstat (limited to 'src/opensearch')
-rw-r--r-- | src/opensearch/opensearchengine.cpp | 314 | ||||
-rw-r--r-- | src/opensearch/opensearchengine.h | 122 | ||||
-rw-r--r-- | src/opensearch/opensearchmanager.cpp | 358 | ||||
-rw-r--r-- | src/opensearch/opensearchmanager.h | 125 | ||||
-rw-r--r-- | src/opensearch/opensearchreader.cpp | 194 | ||||
-rw-r--r-- | src/opensearch/opensearchreader.h | 55 | ||||
-rw-r--r-- | src/opensearch/opensearchwriter.cpp | 130 | ||||
-rw-r--r-- | src/opensearch/opensearchwriter.h | 56 | ||||
-rw-r--r-- | src/opensearch/searchengine.cpp | 157 | ||||
-rw-r--r-- | src/opensearch/searchengine.h | 59 | ||||
-rw-r--r-- | src/opensearch/suggestionparser.cpp | 147 | ||||
-rw-r--r-- | src/opensearch/suggestionparser.h | 118 |
12 files changed, 0 insertions, 1835 deletions
diff --git a/src/opensearch/opensearchengine.cpp b/src/opensearch/opensearchengine.cpp deleted file mode 100644 index 28027828..00000000 --- a/src/opensearch/opensearchengine.cpp +++ /dev/null @@ -1,314 +0,0 @@ -/* ============================================================ -* -* 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-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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" -#include "opensearchengine.moc" - -// Qt Includes -#include <QtCore/QRegExp> -#include <QtCore/QFile> -#include <QtCore/QFileInfo> -#include <QtCore/QDateTime> - -// KDE Includes -#include <KStandardDirs> - - -OpenSearchEngine::OpenSearchEngine(QObject *parent) - : QObject(parent) - , m_parser(0) -{ -} - - -OpenSearchEngine::~OpenSearchEngine() -{ - if (m_parser) - { - delete m_parser; - } -} - - -QString OpenSearchEngine::parseTemplate(const QString &searchTerm, const QString &searchTemplate) -{ - QString language = QLocale().name(); - // Simple conversion to RFC 3066. - language = language.replace(QL1C('_'), QL1C('-')); - QString country = language; - country = (country.remove(0, country.indexOf(QL1C('-')) + 1)).toLower(); - const int firstDashPosition = country.indexOf(QL1C('-')); - if (firstDashPosition >= 0) - country = country.mid(firstDashPosition + 1); - - QString result = searchTemplate; - result.replace(QL1S("{count}"), QL1S("20")); - result.replace(QL1S("{startIndex}"), QL1S("0")); - result.replace(QL1S("{startPage}"), QL1S("0")); - result.replace(QL1S("{language}"), language); - result.replace(QL1S("{country}"), country.toLower()); - 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()) - { - return KUrl(); - } - - KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_searchUrlTemplate).toUtf8()); - - 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()) - { - return KUrl(); - } - - KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_suggestionsUrlTemplate).toUtf8()); - - 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; -} - - -void OpenSearchEngine::setSuggestionParser(SuggestionParser *parser) -{ - m_parser = parser; -} - - -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 - && m_description == other.m_description - && m_imageUrl == other.m_imageUrl - && m_searchUrlTemplate == other.m_searchUrlTemplate - && m_suggestionsUrlTemplate == other.m_suggestionsUrlTemplate - && m_searchParameters == other.m_searchParameters - && m_suggestionsParameters == other.m_suggestionsParameters); -} - - -bool OpenSearchEngine::operator<(const OpenSearchEngine &other) const -{ - return (m_name < other.m_name); -} - - -ResponseList OpenSearchEngine::parseSuggestion(const QString &searchTerm, const QByteArray &resp) -{ - if (!searchTerm.isEmpty() && !resp.isEmpty()) - { - QFile file(suggestionPathFor(searchTerm)); - if (file.open(QIODevice::WriteOnly | QIODevice::Text)) - { - file.write(resp, resp.size()); - file.close(); - } - } - - return parseSuggestion(resp); -} - - -ResponseList OpenSearchEngine::parseSuggestion(const QByteArray &resp) -{ - if (!m_parser) - return ResponseList(); - - if (resp.isEmpty()) - return ResponseList(); - - return m_parser->parse(resp); -} - - -QString OpenSearchEngine::type() -{ - return m_parser->type(); -} - - -QString OpenSearchEngine::suggestionPathFor(const QString &searchTerm) -{ - return KStandardDirs::locateLocal("cache", QL1S("opensearch/") + m_name + QL1S("/") + searchTerm, true); -} - - -bool OpenSearchEngine::hasCachedSuggestionsFor(const QString &searchTerm) -{ - QFileInfo info(suggestionPathFor(searchTerm)); - return info.exists() && info.lastModified().daysTo(QDateTime::currentDateTime()) < 7; -} - - -ResponseList OpenSearchEngine::cachedSuggestionsFor(const QString &searchTerm) -{ - QFile file(suggestionPathFor(searchTerm)); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - return ResponseList(); - - QByteArray resp; - while (!file.atEnd()) - { - resp += file.readLine(); - } - return parseSuggestion(resp); -} diff --git a/src/opensearch/opensearchengine.h b/src/opensearch/opensearchengine.h deleted file mode 100644 index cc826aec..00000000 --- a/src/opensearch/opensearchengine.h +++ /dev/null @@ -1,122 +0,0 @@ -/* ============================================================ -* -* 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) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#ifndef OPENSEARCHENGINE_H -#define OPENSEARCHENGINE_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "suggestionparser.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QtCore/QPair> -#include <QtGui/QImage> - - -class OpenSearchEngine : public QObject -{ - Q_OBJECT - -public: - typedef QPair<QString, QString> Parameter; - - OpenSearchEngine(QObject *parent = 0); - ~OpenSearchEngine(); - - QString name() const; - void setName(const QString &name); - - QString description() const; - void setDescription(const QString &description); - - QString searchUrlTemplate() const; - void setSearchUrlTemplate(const QString &searchUrl); - KUrl searchUrl(const QString &searchTerm) const; - - bool providesSuggestions() const; - - QString suggestionsUrlTemplate() const; - void setSuggestionsUrlTemplate(const QString &suggestionsUrl); - KUrl suggestionsUrl(const QString &searchTerm) const; - - QList<Parameter> searchParameters() const; - void setSearchParameters(const QList<Parameter> &searchParameters); - - QList<Parameter> suggestionsParameters() const; - void setSuggestionsParameters(const QList<Parameter> &suggestionsParameters); - - void setSuggestionParser(SuggestionParser *parser); - - QString imageUrl() const; - void setImageUrl(const QString &url); - - QImage image() const; - void setImage(const QImage &image); - - bool isValid() const; - - bool operator==(const OpenSearchEngine &other) const; - bool operator<(const OpenSearchEngine &other) const; - - ResponseList parseSuggestion(const QString &searchTerm, const QByteArray &response); - - static QString parseTemplate(const QString &searchTerm, const QString &searchTemplate); - - QString type(); - - bool hasCachedSuggestionsFor(const QString &searchTerm); - - ResponseList cachedSuggestionsFor(const QString &searchTerm); - -private: - QString m_name; - QString m_description; - - QString m_imageUrl; - QImage m_image; - - QString m_searchUrlTemplate; - QString m_suggestionsUrlTemplate; - QList<Parameter> m_searchParameters; - QList<Parameter> m_suggestionsParameters; - - SuggestionParser *m_parser; - - QString suggestionPathFor(const QString &searchTerm); - - ResponseList parseSuggestion(const QByteArray &resp); -}; - -#endif // OPENSEARCHENGINE_H diff --git a/src/opensearch/opensearchmanager.cpp b/src/opensearch/opensearchmanager.cpp deleted file mode 100644 index 5fad35ac..00000000 --- a/src/opensearch/opensearchmanager.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2012 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 "opensearchmanager.h" -#include "opensearchmanager.moc" - -// Local Includes -#include "application.h" -#include "opensearchengine.h" -#include "opensearchreader.h" -#include "opensearchwriter.h" - -// KDE Includes -#include <KGlobal> -#include <KStandardDirs> -#include <KUrl> -#include <kio/scheduler.h> -#include <KService> -#include <KDE/KMessageBox> -#include <KUriFilterData> -#include <KConfigGroup> - -// Qt Includes -#include <QFile> -#include <QFileInfo> -#include <QDBusMessage> -#include <QDBusConnection> - - -OpenSearchManager::OpenSearchManager(QObject *parent) - : QObject(parent) - , m_activeEngine(0) - , m_currentJob(0) -{ - m_state = IDLE; - loadEngines(); -} - - -OpenSearchManager::~OpenSearchManager() -{ - qDeleteAll(m_engineCache); - m_engineCache.clear(); - m_engines.clear(); -} - - -void OpenSearchManager::setSearchProvider(const QString &searchProvider) -{ - m_activeEngine = 0; - - if (!m_engineCache.contains(searchProvider)) - { - const QString fileName = KGlobal::dirs()->findResource("data", "rekonq/opensearch/" + trimmedEngineName(searchProvider) + ".xml"); - kDebug() << searchProvider << " trimmed name: " << trimmedEngineName(searchProvider) << " file name path: " << fileName; - if (fileName.isEmpty()) - { - return; - } - QFile file(fileName); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - return; - } - - OpenSearchReader reader; - OpenSearchEngine *engine = reader.read(&file); - - if (engine) - { - m_engineCache.insert(searchProvider, engine); - } - else - { - return; - } - } - - m_activeEngine = m_engineCache.value(searchProvider); -} - - -bool OpenSearchManager::isSuggestionAvailable() -{ - return m_activeEngine != 0; -} - - -void OpenSearchManager::addOpenSearchEngine(const KUrl &url, const QString &title, const QString &shortcut) -{ - m_shortcut = shortcut; - m_title = trimmedEngineName(title); - - if (m_state != IDLE) - { - idleJob(); - } - - m_currentJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - m_jobUrl = url; - m_state = REQ_DESCRIPTION; - connect(m_currentJob, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(dataReceived(KIO::Job*, QByteArray))); - connect(m_currentJob, SIGNAL(result(KJob*)), this, SLOT(jobFinished(KJob*))); -} - - -void OpenSearchManager::requestSuggestion(const QString &searchText) -{ - if (!m_activeEngine) - return; - - if (m_state != IDLE) - { - // NOTE: - // changing OpenSearchManager behavior - // using idleJob here lets opensearchmanager to start another search, while - // if we want in any case lets it finish its previous job we can just return here. - idleJob(); - } - - if (m_activeEngine->hasCachedSuggestionsFor(searchText)) - { - emit suggestionsReceived(searchText, m_activeEngine->cachedSuggestionsFor(searchText)); - } - else - { - KUrl url = m_activeEngine->suggestionsUrl(searchText); - _typedText = searchText; - m_currentJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - m_state = REQ_SUGGESTION; - connect(m_currentJob, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(dataReceived(KIO::Job*, QByteArray))); - connect(m_currentJob, SIGNAL(result(KJob*)), this, SLOT(jobFinished(KJob*))); - } -} - - -void OpenSearchManager::dataReceived(KIO::Job *job, const QByteArray &data) -{ - Q_UNUSED(job); - m_jobData.append(data); -} - - -void OpenSearchManager::jobFinished(KJob *job) -{ - if (!job->error() && m_state == REQ_DESCRIPTION) - { - OpenSearchReader reader; - OpenSearchEngine *engine = reader.read(m_jobData); - if (engine) - { - m_engineCache.insert(m_title, engine); - m_engines.insert(m_jobUrl, m_shortcut); - saveEngines(); - - QString path; - if (engine->providesSuggestions()) - { - // save opensearch description only if it provides suggestions - OpenSearchWriter writer; - path = KGlobal::dirs()->findResource("data", "rekonq/opensearch/"); - QFile file(path + trimmedEngineName(engine->name()) + ".xml"); - writer.write(&file, engine); - - // save desktop file here - QString searchUrl = OpenSearchEngine::parseTemplate("\\{@}", engine->searchUrlTemplate()); - m_currentJob = NULL; - - path = KGlobal::mainComponent().dirs()->saveLocation("services", "searchproviders/"); - KConfig _service(path + m_title + ".desktop", KConfig::SimpleConfig); - KConfigGroup service(&_service, "Desktop Entry"); - service.writeEntry("Type", "Service"); - service.writeEntry("ServiceTypes", "SearchProvider"); - service.writeEntry("Name", m_title); - service.writeEntry("Query", searchUrl); - service.writeEntry("Keys", m_shortcut); - // TODO charset - service.writeEntry("Charset", "" /* provider->charset() */); - // we might be overwriting a hidden entry - service.writeEntry("Hidden", false); - service.sync(); - - // Update filters in running applications... - QDBusMessage msg = QDBusMessage::createSignal("/", "org.kde.KUriFilterPlugin", "configure"); - QDBusConnection::sessionBus().send(msg); - - emit openSearchEngineAdded(engine->name()); - } - } - else - { - kFatal() << "Error while adding new open search engine"; - } - - idleJob(); - return; - } - - // Do NOT parse if job had same errors or the typed string is empty - if (job->error() || _typedText.isEmpty()) - { - emit suggestionsReceived(_typedText, ResponseList()); - m_state = IDLE; - return; // just silently return - } - - if (m_state == REQ_SUGGESTION) - { - ResponseList suggestionsList; - if (isSuggestionAvailable()) - { - suggestionsList = m_activeEngine->parseSuggestion(_typedText, m_jobData); - } - emit suggestionsReceived(_typedText, suggestionsList); - idleJob(); - return; - } -} - - -void OpenSearchManager::loadEngines() -{ - QFile file(KStandardDirs::locate("appdata", "opensearch/db_opensearch.json")); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - return; - } - - QString fileContent = QString::fromUtf8(file.readAll()); - QScriptEngine reader; - if (!reader.canEvaluate(fileContent)) - { - return; - } - - QScriptValue responseParts = reader.evaluate(fileContent); - QVariantList list; - qScriptValueToSequence(responseParts, list); - QStringList l; - Q_FOREACH(const QVariant & e, list) - { - l = e.toStringList(); - m_engines.insert(KUrl(l.first()), l.last()); - } - file.close(); -} - - -void OpenSearchManager::saveEngines() -{ - QFile file(KStandardDirs::locateLocal("appdata", "opensearch/db_opensearch.json")); - if (!file.open(QIODevice::WriteOnly)) - { - return; - } - QTextStream out(&file); - out << "["; - int i = 0; - QList<KUrl> urls = m_engines.keys(); - Q_FOREACH(const KUrl & url, urls) - { - out << "[\"" << url.url() << "\",\"" << m_engines.value(url) << "\"]"; - i++; - if (i != urls.size()) - { - out << ",\n"; - } - } - out << "]\n"; - file.close(); -} - - -void OpenSearchManager::removeDeletedEngines() -{ - KService::Ptr service; - Q_FOREACH(const KUrl & url, m_engines.keys()) - { - service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(m_engines.value(url))); - if (!service) - { - QString path = KStandardDirs::locateLocal("appdata", "opensearch/" + trimmedEngineName(m_engines.value(url)) + ".xml"); - QFile::remove(path + trimmedEngineName(m_engines.value(url)) + ".xml"); - m_engines.remove(url); - } - } - saveEngines(); -} - - -bool OpenSearchManager::engineExists(const KUrl &url) -{ - return m_engines.contains(url); -} - - -QString OpenSearchManager::trimmedEngineName(const QString &engineName) const -{ - QString trimmed; - QString::ConstIterator constIter = engineName.constBegin(); - while (constIter != engineName.constEnd()) - { - if (constIter->isSpace()) - { - trimmed.append('_'); - } - else - { - if (*constIter != '.') - { - trimmed.append(constIter->toLower()); - } - } - constIter++; - } - - return trimmed; -} - - -void OpenSearchManager::idleJob() -{ - if (m_currentJob) - { - disconnect(m_currentJob); - m_currentJob->kill(); - } - - m_jobData.clear(); - m_state = IDLE; -} diff --git a/src/opensearch/opensearchmanager.h b/src/opensearch/opensearchmanager.h deleted file mode 100644 index 3f99a06e..00000000 --- a/src/opensearch/opensearchmanager.h +++ /dev/null @@ -1,125 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2012 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/>. -* -* ============================================================ */ - - -#ifndef OPENSEARCHMANAGER_H -#define OPENSEARCHMANAGER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "suggestionparser.h" - -// KDE Includes -#include <kio/jobclasses.h> - -// Qt Includes -#include <QObject> - -// Forward Declarations -class OpenSearchEngine; - - -/** - * This class acts as a proxy between the SearchBar plugin - * and the individual suggestion engine. - * This class has a map of all available engines, - * and route the suggestion request to the correct engine. - */ -class OpenSearchManager : public QObject -{ - Q_OBJECT - - enum STATE - { - REQ_SUGGESTION, - REQ_DESCRIPTION, - IDLE - }; - -public: - /** - * Constructor - */ - explicit OpenSearchManager(QObject *parent = 0); - - virtual ~OpenSearchManager(); - - void setSearchProvider(const QString &searchProvider); - - /** - * Check whether a search suggestion engine is available for the given search provider - * @param searchProvider the queried search provider - */ - bool isSuggestionAvailable(); - - bool engineExists(const KUrl &url); - -public Q_SLOTS: - /** - * Ask the specific suggestion engine to request for suggestion for the search text - * - * @param searchText the text to be queried to the suggestion service - */ - void requestSuggestion(const QString &searchText); - void addOpenSearchEngine(const KUrl &url, const QString &title, const QString &shortcut); - void removeDeletedEngines(); - -private Q_SLOTS: - void dataReceived(KIO::Job *job, const QByteArray &data); - void jobFinished(KJob *job); - -Q_SIGNALS: - void suggestionsReceived(const QString &text, const ResponseList &suggestion); - void openSearchEngineAdded(const QString &name); - -private: - QString trimmedEngineName(const QString &engineName) const; - void loadEngines(); - void saveEngines(); - void idleJob(); - - // QString substitutueSearchText(const QString &searchText, const QString &requestURL) const; - QByteArray m_jobData; - QMap<QString, OpenSearchEngine*> m_engineCache; - QMap<KUrl, QString> m_engines; - - OpenSearchEngine *m_activeEngine; - STATE m_state; - - KIO::TransferJob *m_currentJob; - KUrl m_jobUrl; - - QString _typedText; - - QString m_shortcut; - QString m_title; -}; - -#endif // OPENSEARCHMANAGER_H diff --git a/src/opensearch/opensearchreader.cpp b/src/opensearch/opensearchreader.cpp deleted file mode 100644 index a4f43b7a..00000000 --- a/src/opensearch/opensearchreader.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* ============================================================ -* -* 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-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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" -#include "suggestionparser.h" - -// KDE Includes -#include <KLocalizedString> - -// Qt Includes -#include <QIODevice> - - -OpenSearchReader::OpenSearchReader() - : QXmlStreamReader() -{ -} - - -OpenSearchEngine *OpenSearchReader::read(const QByteArray &data) -{ - clear(); - addData(data); - - return read(); -} - - -OpenSearchEngine *OpenSearchReader::read(QIODevice *device) -{ - clear(); - - if (!device->isOpen()) - { - device->open(QIODevice::ReadOnly); - } - - setDevice(device); - return read(); -} - - -OpenSearchEngine *OpenSearchReader::read() -{ - OpenSearchEngine *engine = new OpenSearchEngine(); - - while (!isStartElement() && !atEnd()) - { - readNext(); - } - - if (name() != QL1S("OpenSearchDescription") - || namespaceUri() != QL1S("http://a9.com/-/spec/opensearch/1.1/") - ) - { - kDebug() << "The file is not an OpenSearch 1.1 file: " << name(); - raiseError(i18n("The file is not an OpenSearch 1.1 file.")); - return engine; - } - - while (!(isEndElement() && name() == QL1S("OpenSearchDescription")) && !atEnd()) - { - readNext(); - - if (!isStartElement()) - continue; - - // ShortName - if (name() == QL1S("ShortName")) - { - engine->setName(readElementText()); - continue; - } - - // Description - if (name() == QL1S("Description")) - { - engine->setDescription(readElementText()); - continue; - } - - // Url - if (name() == QL1S("Url")) - { - QString type = attributes().value(QL1S("type")).toString(); - QString url = attributes().value(QL1S("template")).toString(); - - if (url.isEmpty()) - continue; - - QList<OpenSearchEngine::Parameter> parameters; - - readNext(); - - while (!(isEndElement() && name() == QL1S("Url"))) - { - if (!isStartElement() - || (name() != QL1S("Param") - && name() != QL1S("Parameter"))) - { - readNext(); - continue; - } - - QString key = attributes().value(QL1S("name")).toString(); - QString value = attributes().value(QL1S("value")).toString(); - - if (!key.isEmpty() && !value.isEmpty()) - { - parameters.append(OpenSearchEngine::Parameter(key, value)); - } - - while (!isEndElement()) - { - readNext(); - } - } - - if (type == QL1S("text/html")) - { - engine->setSearchUrlTemplate(url); - engine->setSearchParameters(parameters); - } - else - { - if (engine->suggestionsUrlTemplate().isEmpty() - && type == QL1S("application/x-suggestions+json")) //note: xml is preferred - { - engine->setSuggestionsUrlTemplate(url); - engine->setSuggestionsParameters(parameters); - engine->setSuggestionParser(new JSONParser()); - } - else if (type == QL1S("application/x-suggestions+xml")) - { - engine->setSuggestionsUrlTemplate(url); - engine->setSuggestionsParameters(parameters); - engine->setSuggestionParser(new XMLParser()); - } - } - - continue; - } - - // Image - if (name() == QL1S("Image")) - { - engine->setImageUrl(readElementText()); - continue; - } - - // Engine check - if (!engine->name().isEmpty() - && !engine->description().isEmpty() - && !engine->suggestionsUrlTemplate().isEmpty() - && !engine->searchUrlTemplate().isEmpty() - && !engine->imageUrl().isEmpty() - ) - { - break; - } - } - - return engine; -} diff --git a/src/opensearch/opensearchreader.h b/src/opensearch/opensearchreader.h deleted file mode 100644 index d1c644ae..00000000 --- a/src/opensearch/opensearchreader.h +++ /dev/null @@ -1,55 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#ifndef OPENSEARCHREADER_H -#define OPENSEARCHREADER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QXmlStreamReader> - -// Forward Declarations -class OpenSearchEngine; - - -class OpenSearchReader : public QXmlStreamReader -{ -public: - OpenSearchReader(); - - OpenSearchEngine *read(const QByteArray &data); - OpenSearchEngine *read(QIODevice *device); - -private: - OpenSearchEngine *read(); -}; - -#endif // OPENSEARCHREADER_H diff --git a/src/opensearch/opensearchwriter.cpp b/src/opensearch/opensearchwriter.cpp deleted file mode 100644 index 0b50ca6a..00000000 --- a/src/opensearch/opensearchwriter.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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 "opensearchwriter.h" - -// Local Includes -#include "opensearchengine.h" - -// Qt Includes -#include <QtCore/QIODevice> - - -OpenSearchWriter::OpenSearchWriter() - : QXmlStreamWriter() -{ - setAutoFormatting(true); -} - - -bool OpenSearchWriter::write(QIODevice *device, OpenSearchEngine *engine) -{ - if (!engine) - return false; - - if (!device->isOpen()) - device->open(QIODevice::WriteOnly); - - setDevice(device); - write(engine); - return true; -} - - -void OpenSearchWriter::write(OpenSearchEngine *engine) -{ - writeStartDocument(); - writeStartElement(QL1S("OpenSearchDescription")); - writeDefaultNamespace(QL1S("http://a9.com/-/spec/opensearch/1.1/")); - - if (!engine->name().isEmpty()) - { - writeTextElement(QL1S("ShortName"), engine->name()); - } - - if (!engine->description().isEmpty()) - { - writeTextElement(QL1S("Description"), engine->description()); - } - - if (!engine->searchUrlTemplate().isEmpty()) - { - writeStartElement(QL1S("Url")); - writeAttribute(QL1S("method"), QL1S("get")); - writeAttribute(QL1S("template"), engine->searchUrlTemplate()); - - if (!engine->searchParameters().empty()) - { - writeNamespace(QL1S("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QL1S("p")); - - QList<OpenSearchEngine::Parameter>::const_iterator end = engine->searchParameters().constEnd(); - QList<OpenSearchEngine::Parameter>::const_iterator i = engine->searchParameters().constBegin(); - for (; i != end; ++i) - { - writeStartElement(QL1S("p:Parameter")); - writeAttribute(QL1S("name"), i->first); - writeAttribute(QL1S("value"), i->second); - writeEndElement(); - } - } - - writeEndElement(); - } - - if (!engine->suggestionsUrlTemplate().isEmpty()) - { - writeStartElement(QL1S("Url")); - writeAttribute(QL1S("method"), QL1S("get")); - writeAttribute(QL1S("type"), engine->type()); - writeAttribute(QL1S("template"), engine->suggestionsUrlTemplate()); - - if (!engine->suggestionsParameters().empty()) - { - writeNamespace(QL1S("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QL1S("p")); - - QList<OpenSearchEngine::Parameter>::const_iterator end = engine->suggestionsParameters().constEnd(); - QList<OpenSearchEngine::Parameter>::const_iterator i = engine->suggestionsParameters().constBegin(); - for (; i != end; ++i) - { - writeStartElement(QL1S("p:Parameter")); - writeAttribute(QL1S("name"), i->first); - writeAttribute(QL1S("value"), i->second); - writeEndElement(); - } - } - - writeEndElement(); - } - - if (!engine->imageUrl().isEmpty()) - writeTextElement(QL1S("Image"), engine->imageUrl()); - - writeEndElement(); - writeEndDocument(); -} diff --git a/src/opensearch/opensearchwriter.h b/src/opensearch/opensearchwriter.h deleted file mode 100644 index 525044b9..00000000 --- a/src/opensearch/opensearchwriter.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#ifndef OPENSEARCHWRITER_H -#define OPENSEARCHWRITER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QtCore/QXmlStreamWriter> - -// Forward Declarations -class QIODevice; -class OpenSearchEngine; - - -class OpenSearchWriter : public QXmlStreamWriter -{ -public: - OpenSearchWriter(); - - bool write(QIODevice *device, OpenSearchEngine *engine); - -private: - void write(OpenSearchEngine *engine); -}; - -#endif - diff --git a/src/opensearch/searchengine.cpp b/src/opensearch/searchengine.cpp deleted file mode 100644 index 2614b603..00000000 --- a/src/opensearch/searchengine.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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/>. -* -* ============================================================ */ - - -//local includes -#include "searchengine.h" -#include "application.h" -#include "iconmanager.h" - -// Auto Includes -#include "rekonq.h" - -//KDE includes -#include <KConfigGroup> -#include <KServiceTypeTrader> - - -struct SearchEnginePrivate -{ - SearchEnginePrivate() : isLoaded(false) {} - bool isLoaded; - QString delimiter; - KService::List favorites; - KService::Ptr defaultEngine; -}; - - -K_GLOBAL_STATIC(SearchEnginePrivate, d) - - -void SearchEngine::reload() -{ - KConfig config("kuriikwsfilterrc"); - KConfigGroup cg = config.group("General"); - - // load delimiter - d->delimiter = cg.readEntry("KeywordDelimiter", ":"); - - // load favorite engines - QStringList favoriteEngines; -#if KDE_IS_VERSION(4,9,0) - favoriteEngines = cg.readEntry("PreferredWebShortcuts", favoriteEngines); -#else - favoriteEngines = cg.readEntry("FavoriteSearchEngines", favoriteEngines); -#endif - - KService::List favorites; - KService::Ptr service; - Q_FOREACH(const QString & engine, favoriteEngines) - { - service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine)); - if (service) - { - QUrl url = service->property("Query").toUrl(); - rApp->iconManager()->downloadIconFromUrl(url); - - favorites << service; - } - } - d->favorites = favorites; - - // load default engine - QString dse; -#if KDE_IS_VERSION(4,9,0) - dse = cg.readEntry("DefaultWebShortcut"); -#else - dse = cg.readEntry("DefaultSearchEngine"); -#endif - d->defaultEngine = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(dse)); - - d->isLoaded = true; -} - - -QString SearchEngine::delimiter() -{ - if (!d->isLoaded) - reload(); - - return d->delimiter; -} - - -KService::List SearchEngine::favorites() -{ - if (!d->isLoaded) - reload(); - - return d->favorites; -} - - -KService::Ptr SearchEngine::defaultEngine() -{ - if (!d->isLoaded) - reload(); - - return d->defaultEngine; -} - - -KService::Ptr SearchEngine::fromString(const QString &text) -{ - KService::List providers = KServiceTypeTrader::self()->query("SearchProvider"); - int i = 0; - bool found = false; - KService::Ptr service; - while (!found && i < providers.size()) - { - QStringList list = providers.at(i)->property("Keys").toStringList(); - Q_FOREACH(const QString & key, list) - { - const QString searchPrefix = key + delimiter(); - if (text.startsWith(searchPrefix)) - { - service = providers.at(i); - found = true; - } - } - i++; - } - - return service; -} - - -QString SearchEngine::buildQuery(KService::Ptr engine, const QString &text) -{ - if (!engine) - return QString(); - QString query = engine->property("Query").toString(); - query = query.replace("\\{@}", KUrl::toPercentEncoding(text)); - return query; -} diff --git a/src/opensearch/searchengine.h b/src/opensearch/searchengine.h deleted file mode 100644 index 21678e9d..00000000 --- a/src/opensearch/searchengine.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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/>. -* -* ============================================================ */ - - -#ifndef SEARCHENGINE_H -#define SEARCHENGINE_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KService> - -//Qt Includes -#include <QString> - - -namespace SearchEngine -{ -void reload(); - -QString delimiter(); - -KService::Ptr defaultEngine(); - -KService::List favorites(); - -KService::Ptr fromString(const QString &text); - -QString buildQuery(KService::Ptr engine, const QString &text); - -QString extractQuery(const QString &text); -} - -#endif diff --git a/src/opensearch/suggestionparser.cpp b/src/opensearch/suggestionparser.cpp deleted file mode 100644 index 3c5350bf..00000000 --- a/src/opensearch/suggestionparser.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* ============================================================ - * - * This file is a part of the rekonq project - * - * Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> - * Copyright (C) 2010-2011 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 "suggestionparser.h" - -// Qt Includes -#include<QByteArray> -#include<QStringList> - - -ResponseList SuggestionParser::parse(const QByteArray &) -{ - return ResponseList(); -} - - -SuggestionParser::~SuggestionParser() -{ -} - - -ResponseList XMLParser::parse(const QByteArray &resp) -{ - ResponseList rlist; - - m_reader.clear(); - m_reader.addData(resp); - - while (!m_reader.atEnd() && !m_reader.hasError()) - { - m_reader.readNext(); - - if (m_reader.isStartDocument()) - continue; - - if (m_reader.isStartElement() && m_reader.name() == QL1S("Item")) - { - QString title; - QString description; - QString url; - QString image; - int image_width = 0; - int image_height = 0; - - m_reader.readNext(); - - while (!(m_reader.isEndElement() && m_reader.name() == QL1S("Item"))) - { - if (m_reader.isStartElement()) - { - - 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("Image")) - { - image = m_reader.attributes().value("source").toString(); - image_width = m_reader.attributes().value("width").toString().toInt(); - image_height = m_reader.attributes().value("height").toString().toInt(); - } - - if (m_reader.name() == QL1S("Description")) - description = m_reader.readElementText(); - } - - m_reader.readNext(); - } - rlist << Response(title, description, url, image, image_width, image_height); - } - } - - return rlist; -} - - -ResponseList JSONParser::parse(const QByteArray &resp) -{ - QString response = QString::fromLocal8Bit(resp); - response = response.trimmed(); - - if (response.isEmpty()) - { - // RESPONSE IS EMPTY - return ResponseList(); - } - - if (!response.startsWith(QL1C('[')) - || !response.endsWith(QL1C(']')) - ) - { - // RESPONSE is NOT well FORMED - return ResponseList(); - } - - // Evaluate the JSON response using QtScript. - if (!m_reader.canEvaluate(response)) - { - // m_reader cannot evaluate the response - return ResponseList(); - } - - QScriptValue responseParts = m_reader.evaluate(response); - - if (!responseParts.property(1).isArray()) - { - // RESPONSE is not an array - return ResponseList(); - } - - ResponseList rlist; - QStringList responsePartsList; - qScriptValueToSequence(responseParts.property(1), responsePartsList); - - Q_FOREACH(const QString & s, responsePartsList) - { - rlist << Response(s); - } - - return rlist; -} diff --git a/src/opensearch/suggestionparser.h b/src/opensearch/suggestionparser.h deleted file mode 100644 index 01ec7c98..00000000 --- a/src/opensearch/suggestionparser.h +++ /dev/null @@ -1,118 +0,0 @@ -/* ============================================================ - * - * This file is a part of the rekonq project - * - * Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> - * Copyright (C) 2010-2011 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/>. - * - * ============================================================ */ - - -#ifndef SUGGESTIONPARSER_H -#define SUGGESTIONPARSER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QtCore/QList> -#include <QtCore/QXmlStreamReader> - -#include <QtScript/QScriptEngine> - - -class Response -{ -public: - QString title; - QString description; - QString url; - QString image; - int image_width; - int image_height; - - Response(const Response &item) : title(item.title), - description(item.description), - url(item.url), - image(item.image), - image_width(item.image_width), - image_height(item.image_height) - - {}; - - explicit Response(const QString &_title = QString(), - const QString &_description = QString(), - const QString &_url = QString(), - const QString &_image = QString(), - const int &_image_width = 0, - const int &_image_height = 0) : title(_title), - description(_description), - url(_url), - image(_image), - image_width(_image_width), - image_height(_image_height) - {}; -}; - - -// ----------------------------------------------------------------- - - -typedef QList <Response> ResponseList; - - -class SuggestionParser -{ -public: - virtual ~SuggestionParser(); - virtual ResponseList parse(const QByteArray &resp); - virtual QString type() = 0; -}; - - -class XMLParser : public SuggestionParser -{ -protected: - QXmlStreamReader m_reader; - -public: - ResponseList parse(const QByteArray &resp); - inline QString type() - { - return QL1S("application/x-suggestions+xml"); - } -}; - - -class JSONParser : public SuggestionParser -{ -private: - QScriptEngine m_reader; - -public: - ResponseList parse(const QByteArray &resp); - inline QString type() - { - return QL1S("application/x-suggestions+json"); - } -}; - -#endif //SUGGESTIONPARSER_H |