X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fgui%2Fresultwindow.cpp;h=2640bbee8f71a4c35fca7f24313863fb072b6d62;hb=d187495fd3566da1ee1eb94cc313c2f561a0fac5;hp=179eac89ca1941edc9c6bbd130a738786772f557;hpb=cf883c1283eb6b096592ef875a32696fee9dd6ff;p=jenirok diff --git a/src/gui/resultwindow.cpp b/src/gui/resultwindow.cpp index 179eac8..2640bbe 100644 --- a/src/gui/resultwindow.cpp +++ b/src/gui/resultwindow.cpp @@ -16,7 +16,7 @@ * */ -#include +#include #include #include #include @@ -25,14 +25,23 @@ #include "resultwindow.h" #include "settings.h" #include "db.h" +#include "cache.h" +#include "source.h" +#include "sourcecoreconfig.h" ResultWindow::ResultWindow(QWidget* parent): QMainWindow(parent), -eniro_(0), list_(0) +source_(0), list_(0), connectionManager_(0) { setAttribute(Qt::WA_Maemo5StackedWindow); setWindowTitle(tr("Search results")); } +ResultWindow::~ResultWindow() +{ + delete connectionManager_; + connectionManager_ = 0; +} + void ResultWindow::search(SearchDialog::SearchDetails& details) { if(!list_) @@ -47,64 +56,72 @@ void ResultWindow::search(SearchDialog::SearchDetails& details) list_->clear(); } - DB::connect(); + Source::SourceId sourceId = Source::stringToId(Settings::instance()->get("source")); - Eniro::Site selectedSite = Eniro::stringToSite(Settings::instance()->get("site")); - - if(!eniro_) + if(!source_) { - eniro_ = new Eniro(selectedSite, this); - - connect(eniro_, SIGNAL(resultAvailable(Eniro::Result const&, - Eniro::SearchDetails const&)), - this, SLOT(resultAvailable(Eniro::Result const&, - Eniro::SearchDetails const&))); - - connect(eniro_, SIGNAL(requestFinished(QVector const&, - Eniro::SearchDetails const&, bool)), - this, SLOT(requestFinished(QVector const&, - Eniro::SearchDetails const&, bool))); + source_ = Source::getSource(sourceId); + Q_ASSERT(source_ != 0); + source_->setTimeout(REQUEST_TIMEOUT); + + connect(source_, SIGNAL(resultAvailable(Source::Result const&, + Source::SearchDetails const&)), + this, SLOT(resultAvailable(Source::Result const&, + Source::SearchDetails const&))); + + connect(source_, SIGNAL(requestFinished(QVector const&, + Source::SearchDetails const&, bool)), + this, SLOT(requestFinished(QVector const&, + Source::SearchDetails const&, bool))); } - QString username = Settings::instance()->get("eniro_username"); - QString password = Settings::instance()->get("eniro_password"); + SourceCoreConfig* config = SourceCoreConfig::getCoreConfig(sourceId); - if(!username.isEmpty() && !password.isEmpty()) - { - eniro_->login(username, password); - } - - eniro_->setSite(selectedSite); + Q_ASSERT(config != 0); - DB::disconnect(); + config->apply(source_); + delete config; - Eniro::SearchType type; + Source::SearchType type; switch(details.type) { case 0: - type = Eniro::PERSONS; + type = Source::PERSONS; break; case 1: - type = Eniro::YELLOW_PAGES; + type = Source::YELLOW_PAGES; break; default: + qDebug() << "Unknown search type: " << details.type; return; } show(); setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); - eniro_->abort(); - eniro_->search(Eniro::SearchDetails(details.name, details.location, type)); + if(!connectionManager_) + { + connectionManager_ = new ConnectionManager(); + } + + connectionManager_->connect(); + + source_->abort(); + source_->search(Source::SearchDetails(details.name, details.location, type)); } -void ResultWindow::resultAvailable(Eniro::Result const& result, - Eniro::SearchDetails const& details) +void ResultWindow::resultAvailable(Source::Result const& result, + Source::SearchDetails const& details) { Q_UNUSED(details); + if(!result.number.isEmpty()) + { + Cache::instance().addItem(result); + } + QString row = result.name; if(!result.street.isEmpty()) @@ -129,15 +146,34 @@ void ResultWindow::resultAvailable(Eniro::Result const& result, list_->addItem(item); } -void ResultWindow::requestFinished(QVector const& results, - Eniro::SearchDetails const& details, +void ResultWindow::requestFinished(QVector const& results, + Source::SearchDetails const& details, bool error) { Q_UNUSED(details); if(error) { - QMessageBox::critical(this, tr("Error"), eniro_->errorString()); + QString errorString; + Source::Error error = source_->error(); + + switch(error) + { + case Source::CONNECTION_FAILURE: + errorString = tr("Connection to server failed"); + break; + case Source::INVALID_LOGIN: + errorString = tr("Invalid login details"); + break; + case Source::TIMEOUT: + errorString = tr("Request timed out"); + break; + default: + errorString = tr("Searching failed:") + " " + source_->errorString(); + break; + } + + QMessageBox::critical(this, tr("Error"), errorString); } if(results.size() == 0) @@ -155,7 +191,7 @@ void ResultWindow::requestFinished(QVector const& results, void ResultWindow::itemClicked(QListWidgetItem* item) { QMap data = item->data(Qt::UserRole).toMap(); - Eniro::Result details; + Source::Result details; details.name = data["name"].toString(); details.street = data["street"].toString(); details.city = data["city"].toString(); @@ -164,4 +200,15 @@ void ResultWindow::itemClicked(QListWidgetItem* item) emit itemSelected(details); } +void ResultWindow::setVisible(bool visible) +{ + QMainWindow::setVisible(visible); + + if(!visible && source_) + { + source_->abort(); + } +} + +