#include <QLineEdit>
#include <QPushButton>
#include <QUrl>
+#include <QDir>
#include <QFileInfo>
#include <QWebView>
#include <QWebPage>
+#include <QDomDocument>
#include "SearchPlugin.h"
#include "DownloadManager.h"
namespace qtrapids
{
+ const QString ENGINES_DIR = "engines";
+ const QString DESCRIPTION_FILENAME = "opensearch.xml";
+ const QString SEARCH_TERMS_STRING = "{searchTerms}";
+
+
SearchPlugin::SearchPlugin() :
comboBox_(NULL), searchLine_(NULL),
searchButton_(NULL), result_(NULL),
}
- void SearchPlugin::initialize(PluginHostInterface* host)
+ void SearchPlugin::initialize(PluginHostInterface* host, Info info)
{
host_ = host;
if (host_ != NULL) {
+
+ // Build up the plugin widget:
QWidget *pluginWidget = new QWidget;
QVBoxLayout *vbox = new QVBoxLayout;
QHBoxLayout *hbox = new QHBoxLayout;
connect(searchButton_, SIGNAL(clicked()), this, SLOT(on_searchButton_clicked()));
//connect(this, SIGNAL(searchResult(QWidget*)), this, SLOT(on_searchResult(QWidget*)));
+ qDebug() << info.directory;
+ QDir dir(info.directory);
+ if (dir.cd(ENGINES_DIR)) {
+ ParseSearchEngineDescriptions(dir);
+ }
host_->setGui(pluginWidget, qtrapids::PluginHostInterface::BASE_WIDGET);
}
{
return NULL;
}
-
-
+
+
void SearchPlugin::on_searchButton_clicked()
{
- QUrl searchUrl(QString("http://www.google.fi/search?q="
- + searchLine_->text()));
+
+ int i = comboBox_->currentIndex();
+ QString tmp = engineTemplates_.at(i);
+ i = tmp.indexOf(SEARCH_TERMS_STRING);
+ tmp.replace(i, SEARCH_TERMS_STRING.length(), searchLine_->text());
+ QUrl searchUrl(tmp);
qDebug() << searchUrl;
result_ = new QWebView;
QFileInfo fInfo(path);
// Check path suffix. If it is .torrent, we should download:
- /// @todo We should also check MIME-type, instead of relying on file suffix.
+ /// @todo We should actually check for MIME-type application/x-bittorrent in HTTP response,
+ /// instead of relying on file suffix.
+ /// e.g. link
+ ///http://www.bitenova.org/download.php?id=c84375141231eef49fc6c55e6347ba4f4a623a05&name=Nero_Linux_3.5.1.0__(Debian)_deutsch
+ /// will not work.
/// @todo Also, after downloading, the torrent bencoding validity should be checked at plugin host..
if (fInfo.suffix() == "torrent") {
#ifdef QTRAPIDS_DEBUG
dlManager_ = new DownloadManager(url, "/tmp/" + filename);
connect(dlManager_, SIGNAL(finished(QString)), this, SLOT(on_downloadFinished(QString)));
dlManager_->start();
+
} else {
// If was not .torrent -file, check URL validity and load the page as usual.
if (url.isValid()) {
host_->eventRequest(QVariant(filepath), qtrapids::PluginHostInterface::OPEN_FILE);
}
+
+ void SearchPlugin::ParseSearchEngineDescriptions(const QDir& dir)
+ {
+ foreach (QString dirName, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
+
+ QFile file(dir.path() + "/" + dirName + "/" + DESCRIPTION_FILENAME);
+
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qWarning() << "Unable to open " << DESCRIPTION_FILENAME << " for reading in " << dir.path();
+ continue;
+ }
+
+ // Parse the XML file to DOM document.
+ QDomDocument document;
+
+ // Second parameter: nameSpaceProcessing = false
+ if (!document.setContent(&file, false)) {
+ qWarning() << "Unable to parse " << DESCRIPTION_FILENAME << " in " << dirName;
+ } else {
+ QDomNodeList urlElements = document.elementsByTagName("Url");
+ QDomNodeList shortNameElements = document.elementsByTagName("ShortName");
+
+ QDomNode n = urlElements.item(0);
+ QDomNode m;
+ QDomNamedNodeMap attribMap;
+ if (n.hasAttributes()) {
+ attribMap = n.attributes();
+ m = attribMap.namedItem("template");
+ engineTemplates_.push_back(m.nodeValue());
+ }
+
+ n = shortNameElements.item(0);
+ if (n.hasChildNodes()) {
+ m = n.firstChild();
+ comboBox_->addItem(m.nodeValue());
+ }
+ }
+ }
+
+
+ /// @todo save parsed xml elements <Shortname> and <Url template="<foo>"> to a model which is displayed in combobox.
+ }
+
+ /*
+ QDomElement docElem = document.documentElement();
+ QDomNode n = docElem.firstChild();
+ while(!n.isNull()) {
+ QDomElement e = n.toElement(); // try to convert the node to an element.
+ if(!e.isNull()) {
+ qDebug() << qPrintable(e.tagName()); // the node really is an element.
+ }
+ n = n.nextSibling();
+ }
+ */
+
} // namespace qtrapids
Q_EXPORT_PLUGIN2(searchplugin, qtrapids::SearchPlugin)