diff options
Diffstat (limited to 'src/search')
-rw-r--r-- | src/search/opensearchengine.cpp | 133 | ||||
-rw-r--r-- | src/search/opensearchengine.h | 59 | ||||
-rw-r--r-- | src/search/opensearchmanager.cpp | 154 | ||||
-rw-r--r-- | src/search/opensearchmanager.h | 68 | ||||
-rw-r--r-- | src/search/opensearchreader.cpp | 135 | ||||
-rw-r--r-- | src/search/opensearchreader.h | 52 | ||||
-rw-r--r-- | src/search/opensearchwriter.cpp | 122 | ||||
-rw-r--r-- | src/search/opensearchwriter.h | 53 |
8 files changed, 496 insertions, 280 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; } - diff --git a/src/search/opensearchengine.h b/src/search/opensearchengine.h index c981f443..f2329624 100644 --- a/src/search/opensearchengine.h +++ b/src/search/opensearchengine.h @@ -1,35 +1,52 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * Copyright 2009 Christian Franke <cfchris6@ts2server.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) 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/>. +* +* ============================================================ */ + #ifndef OPENSEARCHENGINE_H #define OPENSEARCHENGINE_H -#include <QtCore/QPair> -#include <QtGui/QImage> +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes #include <KUrl> +// Qt Includes +#include <QtCore/QPair> +#include <QtGui/QImage> + +// Forward Declarations class QNetworkAccessManager; class QNetworkReply; class QScriptEngine; + class OpenSearchEngine { public: diff --git a/src/search/opensearchmanager.cpp b/src/search/opensearchmanager.cpp index 6e37db77..463c0a11 100644 --- a/src/search/opensearchmanager.cpp +++ b/src/search/opensearchmanager.cpp @@ -1,35 +1,50 @@ -/* This file is part of the KDE project - * Copyright (C) 2009 Fredy Yanardi <fyanardi@gmail.com> - * - * This library 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 library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. 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 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 "opensearchmanager.h" +#include "opensearchmanager.moc" -#include <QtCore/QFile> +// Local Includes +#include "opensearchengine.h" +#include "opensearchreader.h" +#include "opensearchwriter.h" +// KDE Includes #include <KDebug> #include <KGlobal> #include <KStandardDirs> #include <KUrl> #include <kio/scheduler.h> -#include "opensearchengine.h" -#include "opensearchreader.h" -#include "opensearchwriter.h" +// Qt Includes +#include <QtCore/QFile> + OpenSearchManager::OpenSearchManager(QObject *parent) : QObject(parent) @@ -38,34 +53,44 @@ OpenSearchManager::OpenSearchManager(QObject *parent) m_state = IDLE; } -OpenSearchManager::~OpenSearchManager() { + +OpenSearchManager::~OpenSearchManager() +{ qDeleteAll(m_enginesMap.values()); m_enginesMap.clear(); } + void OpenSearchManager::setSearchProvider(const QString &searchProvider) { m_activeEngine = 0; - if (!m_enginesMap.contains(searchProvider)) { - const QString fileName = KGlobal::dirs()->findResource("data", "konqueror/opensearch/" + searchProvider + ".xml"); - if (fileName.isEmpty()) { + if (!m_enginesMap.contains(searchProvider)) + { + const QString fileName = KGlobal::dirs()->findResource("data", "rekonq/opensearch/" + searchProvider + ".xml"); + kDebug() << searchProvider << " file name path: " << fileName; + if (fileName.isEmpty()) + { + kDebug() << "OpenSearch file name empty"; return; } QFile file(fileName); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - kWarning(1202) << "Cannot open opensearch description file: " + fileName; + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + kDebug() << "Cannot open opensearch description file: " + fileName; return; } OpenSearchReader reader; OpenSearchEngine *engine = reader.read(&file); - if (engine) { + if (engine) + { m_enginesMap.insert(searchProvider, engine); } - else { + else + { return; } } @@ -73,72 +98,81 @@ void OpenSearchManager::setSearchProvider(const QString &searchProvider) m_activeEngine = m_enginesMap.value(searchProvider); } + bool OpenSearchManager::isSuggestionAvailable() { return m_activeEngine != 0; } + void OpenSearchManager::addOpenSearchEngine(const KUrl &url, const QString &title) { Q_UNUSED(title); m_jobData.clear(); - if (m_state != IDLE) { + if (m_state != IDLE) + { // TODO: cancel job } m_state = REQ_DESCRIPTION; KIO::TransferJob *job = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), - this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); - connect(job, SIGNAL(result(KJob *)), SLOT(jobFinished(KJob *))); + connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); + connect(job, SIGNAL(result(KJob *)), this, SLOT(jobFinished(KJob *))); } + void OpenSearchManager::requestSuggestion(const QString &searchText) { - if (!m_activeEngine) { + if (!m_activeEngine) return; - } - if (m_state != IDLE) { + if (m_state != IDLE) + { // TODO: cancel job } m_state = REQ_SUGGESTION; KUrl url = m_activeEngine->suggestionsUrl(searchText); - kDebug(1202) << "Requesting for suggestions: " << url.url(); + kDebug() << "Requesting for suggestions: " << url.url(); m_jobData.clear(); + KIO::TransferJob *job = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), - this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); - connect(job, SIGNAL(result(KJob *)), SLOT(jobFinished(KJob *))); + connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); + connect(job, 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()) { + if (job->error()) return; // just silently return - } - if (m_state == REQ_SUGGESTION) { + if (m_state == REQ_SUGGESTION) + { const QStringList suggestionsList = m_activeEngine->parseSuggestion(m_jobData); - kDebug(1202) << "Received suggestion from " << m_activeEngine->name() << ": " << suggestionsList; + kDebug() << "Received suggestion from " << m_activeEngine->name() << ": " << suggestionsList; emit suggestionReceived(suggestionsList); + return; } - else if (m_state == REQ_DESCRIPTION) { + + if (m_state == REQ_DESCRIPTION) + { OpenSearchReader reader; OpenSearchEngine *engine = reader.read(m_jobData); - if (engine) { + if (engine) + { m_enginesMap.insert(engine->name(), engine); - QString path = KGlobal::dirs()->findResource("data", "konqueror/opensearch/"); + QString path = KGlobal::dirs()->findResource("data", "rekonq/opensearch/"); QString fileName = trimmedEngineName(engine->name()); QFile file(path + fileName + ".xml"); OpenSearchWriter writer; @@ -147,29 +181,33 @@ void OpenSearchManager::jobFinished(KJob *job) QString searchUrl = OpenSearchEngine::parseTemplate("\\{@}", engine->searchUrlTemplate()); emit openSearchEngineAdded(engine->name(), searchUrl, fileName); } - else { + else + { kFatal() << "Error while adding new open search engine"; } } } + QString OpenSearchManager::trimmedEngineName(const QString &engineName) const { QString trimmed; QString::ConstIterator constIter = engineName.constBegin(); - while (constIter != engineName.constEnd()) { - if (constIter->isSpace()) { + while (constIter != engineName.constEnd()) + { + if (constIter->isSpace()) + { trimmed.append('-'); } - else if (*constIter != '.') { - trimmed.append(constIter->toLower()); + else + { + if (*constIter != '.') + { + trimmed.append(constIter->toLower()); + } } constIter++; } return trimmed; } - -#include "opensearchmanager.moc" - - diff --git a/src/search/opensearchmanager.h b/src/search/opensearchmanager.h index 59e7e6b2..8a45b83c 100644 --- a/src/search/opensearchmanager.h +++ b/src/search/opensearchmanager.h @@ -1,45 +1,66 @@ -/* This file is part of the KDE project - * Copyright (C) 2009 Fredy Yanardi <fyanardi@gmail.com> - * - * This library 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 library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. 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 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/>. +* +* ============================================================ */ + #ifndef OPENSEARCHMANAGER_H #define OPENSEARCHMANAGER_H -#include <QtCore/QObject> + +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes #include <kio/jobclasses.h> -class SuggestionEngine; +// Qt Includes +#include <QtCore/QObject> +// Forward Declarations +class SuggestionEngine; 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 + * 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 { + enum STATE + { REQ_SUGGESTION, REQ_DESCRIPTION, IDLE }; + public: /** * Constructor @@ -85,4 +106,3 @@ private: }; #endif // OPENSEARCHMANAGER_H - 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; } - diff --git a/src/search/opensearchreader.h b/src/search/opensearchreader.h index 5481881a..4e2444e0 100644 --- a/src/search/opensearchreader.h +++ b/src/search/opensearchreader.h @@ -1,29 +1,45 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@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) 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/>. +* +* ============================================================ */ + #ifndef OPENSEARCHREADER_H #define OPENSEARCHREADER_H + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes #include <QtCore/QXmlStreamReader> +// Forward Declarations class OpenSearchEngine; + class OpenSearchReader : public QXmlStreamReader { public: diff --git a/src/search/opensearchwriter.cpp b/src/search/opensearchwriter.cpp index a18ce0e2..81ce022c 100644 --- a/src/search/opensearchwriter.cpp +++ b/src/search/opensearchwriter.cpp @@ -1,29 +1,44 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@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) 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 "opensearchwriter.h" +// Local Includes #include "opensearchengine.h" +// KDE Includes +#include <KDebug> + +// Qt Includes #include <QtCore/QIODevice> -#include <KDebug> + OpenSearchWriter::OpenSearchWriter() : QXmlStreamWriter() @@ -31,6 +46,7 @@ OpenSearchWriter::OpenSearchWriter() setAutoFormatting(true); } + bool OpenSearchWriter::write(QIODevice *device, OpenSearchEngine *engine) { if (!engine) @@ -44,34 +60,40 @@ bool OpenSearchWriter::write(QIODevice *device, OpenSearchEngine *engine) return true; } + void OpenSearchWriter::write(OpenSearchEngine *engine) { writeStartDocument(); - writeStartElement(QLatin1String("OpenSearchDescription")); - writeDefaultNamespace(QLatin1String("http://a9.com/-/spec/opensearch/1.1/")); + writeStartElement(QL1S("OpenSearchDescription")); + writeDefaultNamespace(QL1S("http://a9.com/-/spec/opensearch/1.1/")); - if (!engine->name().isEmpty()) { - writeTextElement(QLatin1String("ShortName"), engine->name()); + if (!engine->name().isEmpty()) + { + writeTextElement(QL1S("ShortName"), engine->name()); } - if (!engine->description().isEmpty()) { - writeTextElement(QLatin1String("Description"), engine->description()); + if (!engine->description().isEmpty()) + { + writeTextElement(QL1S("Description"), engine->description()); } - if (!engine->searchUrlTemplate().isEmpty()) { - writeStartElement(QLatin1String("Url")); - writeAttribute(QLatin1String("method"), QLatin1String("get")); - writeAttribute(QLatin1String("template"), engine->searchUrlTemplate()); + if (!engine->searchUrlTemplate().isEmpty()) + { + writeStartElement(QL1S("Url")); + writeAttribute(QL1S("method"), QL1S("get")); + writeAttribute(QL1S("template"), engine->searchUrlTemplate()); - if (!engine->searchParameters().empty()) { - writeNamespace(QLatin1String("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QLatin1String("p")); + 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(QLatin1String("p:Parameter")); - writeAttribute(QLatin1String("name"), i->first); - writeAttribute(QLatin1String("value"), i->second); + for (; i != end; ++i) + { + writeStartElement(QL1S("p:Parameter")); + writeAttribute(QL1S("name"), i->first); + writeAttribute(QL1S("value"), i->second); writeEndElement(); } } @@ -79,21 +101,24 @@ void OpenSearchWriter::write(OpenSearchEngine *engine) writeEndElement(); } - if (!engine->suggestionsUrlTemplate().isEmpty()) { - writeStartElement(QLatin1String("Url")); - writeAttribute(QLatin1String("method"), QLatin1String("get")); - writeAttribute(QLatin1String("type"), QLatin1String("application/x-suggestions+json")); - writeAttribute(QLatin1String("template"), engine->suggestionsUrlTemplate()); + if (!engine->suggestionsUrlTemplate().isEmpty()) + { + writeStartElement(QL1S("Url")); + writeAttribute(QL1S("method"), QL1S("get")); + writeAttribute(QL1S("type"), QL1S("application/x-suggestions+json")); + writeAttribute(QL1S("template"), engine->suggestionsUrlTemplate()); - if (!engine->suggestionsParameters().empty()) { - writeNamespace(QLatin1String("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QLatin1String("p")); + 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(QLatin1String("p:Parameter")); - writeAttribute(QLatin1String("name"), i->first); - writeAttribute(QLatin1String("value"), i->second); + for (; i != end; ++i) + { + writeStartElement(QL1S("p:Parameter")); + writeAttribute(QL1S("name"), i->first); + writeAttribute(QL1S("value"), i->second); writeEndElement(); } } @@ -102,9 +127,8 @@ void OpenSearchWriter::write(OpenSearchEngine *engine) } if (!engine->imageUrl().isEmpty()) - writeTextElement(QLatin1String("Image"), engine->imageUrl()); + writeTextElement(QL1S("Image"), engine->imageUrl()); writeEndElement(); writeEndDocument(); } - diff --git a/src/search/opensearchwriter.h b/src/search/opensearchwriter.h index b089c4bb..6a2e0d11 100644 --- a/src/search/opensearchwriter.h +++ b/src/search/opensearchwriter.h @@ -1,31 +1,46 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@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) 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/>. +* +* ============================================================ */ + #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: |