void SearchEnginesManager::replyFinished() { qApp->restoreOverrideCursor(); QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender()); if (!reply) { return; } if (reply->error() != QNetworkReply::NoError) { reply->close(); reply->deleteLater(); return; } OpenSearchReader reader; OpenSearchEngine* engine = reader.read(reply); engine->setNetworkAccessManager(mApp->networkManager()); reply->close(); reply->deleteLater(); if (checkEngine(engine)) { addEngine(engine); QMessageBox::information(0, tr("Search Engine Added"), tr("Search Engine \"%1\" has been successfully added.").arg(engine->name())); } }
void EngineManager::loadEngines(const QString& fileName) { if (!QFile::exists(fileName)) return; QFile input(fileName); if (!input.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "cannot open engine configuration file:" << fileName; return; } QTextStream stream(&input); JsonParser parser(stream); const QVariantList engines(parser.parse().toList()); if (parser.hasError()) { qWarning() << "bad engine configuration file line" << parser.errorLineNumber() << "in" << fileName << ":" << parser.errorString(); return; } foreach(const QVariant& engine, engines) addEngine(EngineConfiguration(engine)); }
void SearchEnginesManager::restoreDefaults() { Engine duck; duck.name = "DuckDuckGo"; duck.icon = QIcon(":/icons/sites/duck.png"); duck.url = "https://duckduckgo.com/?q=%s&t=qupzilla"; duck.shortcut = "d"; Engine sp; sp.name = "StartPage"; sp.icon = QIcon(":/icons/sites/startpage.png"); sp.url = "https://startpage.com/do/search"; sp.postData = "query=%s&cat=web&language=english"; sp.shortcut = "sp"; sp.suggestionsUrl = "https://startpage.com/cgi-bin/csuggest?output=json&lang=english&query=%s"; Engine wiki; wiki.name = "Wikipedia (en)"; wiki.icon = QIcon(":/icons/sites/wikipedia.png"); wiki.url = "http://en.wikipedia.org/wiki/Special:Search?search=%s&fulltext=Search"; wiki.shortcut = "w"; wiki.suggestionsUrl = "http://en.wikipedia.org/w/api.php?action=opensearch&search=%s&namespace=0"; Engine google; google.name = "Google"; google.icon = QIcon(":icons/sites/google.png"); google.url = "http://www.google.com/search?client=qupzilla&q=%s"; google.shortcut = "g"; google.suggestionsUrl = "http://suggestqueries.google.com/complete/search?output=firefox&q=%s"; addEngine(duck); addEngine(sp); addEngine(wiki); addEngine(google); m_defaultEngine = duck; emit enginesChanged(); }
void SearchEnginesManager::restoreDefaults() { Engine google; google.name = "Google"; google.icon = QIcon(":icons/menu/google.png"); google.url = "http://www.google.com/search?client=qupzilla&q=%s"; google.shortcut = "g"; google.suggestionsUrl = "http://suggestqueries.google.com/complete/search?json=t&q=%s&nolabels=t"; Engine wiki; wiki.name = "Wikipedia (en)"; wiki.icon = QIcon(":/icons/menu/wikipedia.png"); wiki.url = "http://en.wikipedia.org/wiki/Special:Search?search=%s&fulltext=Search"; wiki.shortcut = "w"; wiki.suggestionsUrl = "http://en.wikipedia.org/w/api.php?action=opensearch&search=%s&namespace=0"; Engine yt; yt.name = "YouTube"; yt.icon = QIcon(":/icons/menu/youtube.png"); yt.url = "http://www.youtube.com/results?search_query=%s&search=Search"; yt.shortcut = "yt"; yt.suggestionsUrl = "http://suggestqueries.google.com/complete/search?ds=yt&json=t&q=%s&nolabels=t"; Engine yahoo; yahoo.name = "Yahoo!"; yahoo.icon = QIcon(":/icons/menu/yahoo.png"); yahoo.url = "http://search.yahoo.com/search?ei=utf-8&fr=sfp&iscqry=&p=%s"; yahoo.shortcut = "yh"; addEngine(google, false); addEngine(wiki, false); addEngine(yt, false); addEngine(yahoo, false); emit enginesChanged(); }
void SearchEnginesManager::addEngine(OpenSearchEngine* engine) { ENSURE_LOADED; Engine en; en.name = engine->name(); en.url = engine->searchUrl("searchstring").toString().replace("searchstring", "%s"); if (engine->image().isNull()) { en.icon = iconForSearchEngine(engine->searchUrl("")); } else { en.icon = QIcon(QPixmap::fromImage(engine->image())); } en.suggestionsUrl = engine->getSuggestionsUrl(); en.suggestionsParameters = engine->getSuggestionsParameters(); addEngine(en); connect(engine, SIGNAL(imageChanged()), this, SLOT(engineChangedImage())); }
SearchEnginesDialog::SearchEnginesDialog(QWidget* parent) : QDialog(parent) , ui(new Ui::SearchEnginesDialog) , m_manager(mApp->searchEnginesManager()) { setAttribute(Qt::WA_DeleteOnClose); ui->setupUi(this); connect(ui->add, SIGNAL(clicked()), this, SLOT(addEngine())); connect(ui->remove, SIGNAL(clicked()), this, SLOT(removeEngine())); connect(ui->edit, SIGNAL(clicked()), this, SLOT(editEngine())); connect(ui->setAsDefault, SIGNAL(clicked()), this, SLOT(setDefaultEngine())); connect(ui->defaults, SIGNAL(clicked()), this, SLOT(defaults())); connect(ui->moveUp, SIGNAL(clicked()), this, SLOT(moveUp())); connect(ui->moveDown, SIGNAL(clicked()), this, SLOT(moveDown())); connect(ui->treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(editEngine())); ui->treeWidget->sortByColumn(-1); reloadEngines(); }
void SearchEnginesManager::editEngine(const Engine &before, const Engine &after) { removeEngine(before); addEngine(after); }
void SearchEnginesManager::addEngineFromForm(const QWebElement &element, WebView* view) { QWebElement formElement = element.parent(); while (!formElement.isNull()) { if (formElement.tagName().toLower() == QLatin1String("form")) { break; } formElement = formElement.parent(); } if (formElement.isNull()) { return; } const QString method = formElement.hasAttribute("method") ? formElement.attribute("method").toUpper() : "GET"; bool isPost = method == QLatin1String("POST"); QUrl actionUrl = QUrl::fromEncoded(formElement.attribute("action").toUtf8()); if (actionUrl.isRelative()) { actionUrl = view->url().resolved(actionUrl); } QUrl parameterUrl = actionUrl; if (isPost) { parameterUrl = QUrl("http://foo.bar"); } #if QT_VERSION >= 0x050000 QUrlQuery query(parameterUrl); query.addQueryItem(element.attribute("name"), "%s"); QWebElementCollection allInputs = formElement.findAll("input"); foreach (QWebElement e, allInputs) { if (element == e || !e.hasAttribute("name")) { continue; } query.addQueryItem(e.attribute("name"), e.evaluateJavaScript("this.value").toString()); } parameterUrl.setQuery(query); #else QList<QPair<QByteArray, QByteArray> > queryItems; QPair<QByteArray, QByteArray> item; item.first = element.attribute("name").toUtf8(); item.second = "%s"; queryItems.append(item); QWebElementCollection allInputs = formElement.findAll("input"); foreach (QWebElement e, allInputs) { if (element == e || !e.hasAttribute("name")) { continue; } QPair<QByteArray, QByteArray> item; item.first = QUrl::toPercentEncoding(e.attribute("name").toUtf8()); item.second = QUrl::toPercentEncoding(e.evaluateJavaScript("this.value").toByteArray()); queryItems.append(item); } parameterUrl.setEncodedQueryItems(parameterUrl.encodedQueryItems() + queryItems); #endif if (!isPost) { actionUrl = parameterUrl; } SearchEngine engine; engine.name = view->title(); engine.icon = view->icon(); engine.url = actionUrl.toEncoded(); if (isPost) { QByteArray data = parameterUrl.toEncoded(QUrl::RemoveScheme); engine.postData = data.contains('?') ? data.mid(data.lastIndexOf('?') + 1) : QByteArray(); } EditSearchEngine dialog(SearchEnginesDialog::tr("Add Search Engine"), view); dialog.setName(engine.name); dialog.setIcon(engine.icon); dialog.setUrl(engine.url); dialog.setPostData(engine.postData); if (dialog.exec() != QDialog::Accepted) { return; } engine.name = dialog.name(); engine.icon = dialog.icon(); engine.url = dialog.url(); engine.shortcut = dialog.shortcut(); engine.postData = dialog.postData().toUtf8(); if (engine.name.isEmpty() || engine.url.isEmpty()) { return; } addEngine(engine); }