X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fgui%2Fresultwindow.cpp;h=dc1509f02f731b0634aea595ca7fbf61b91c5929;hb=d93782e7a5ae0fc072d094fd645cf415a34a2244;hp=605ecb1a88a21e01babf5271c90a4b88b22520aa;hpb=d446f61d869683cce860e717726805fa859ebbfc;p=jenirok diff --git a/src/gui/resultwindow.cpp b/src/gui/resultwindow.cpp index 605ecb1..dc1509f 100644 --- a/src/gui/resultwindow.cpp +++ b/src/gui/resultwindow.cpp @@ -16,7 +16,7 @@ * */ -#include +#include #include #include #include @@ -26,9 +26,11 @@ #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), connectionManager_(0) +source_(0), list_(0), connectionManager_(0), timer_(0), searching_(false) { setAttribute(Qt::WA_Maemo5StackedWindow); setWindowTitle(tr("Search results")); @@ -54,70 +56,75 @@ void ResultWindow::search(SearchDialog::SearchDetails& details) list_->clear(); } - DB::connect(); - - Eniro::Site selectedSite = Eniro::stringToSite(Settings::instance()->get("site")); + show(); + setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); - if(!eniro_) + if(!connectionManager_) { - eniro_ = new Eniro(selectedSite, this); - eniro_->setTimeout(REQUEST_TIMEOUT); - - 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))); + connectionManager_ = new ConnectionManager(); } - QString username = Settings::instance()->get("eniro_username"); - QString password = Settings::instance()->get("eniro_password"); + connectionManager_->connect(); + + Source::SourceId id = Source::stringToId(Settings::instance()->get("source")); - if(!username.isEmpty() && !password.isEmpty()) + if(!source_ || id != sourceId_) { - eniro_->login(username, password); - } + sourceId_ = id; - eniro_->setSite(selectedSite); + if(source_) + { + delete source_; + source_ = 0; + } - DB::disconnect(); + source_ = Source::getSource(sourceId_); + Q_ASSERT(source_ != 0); + source_->setTimeout(REQUEST_TIMEOUT); - Eniro::SearchType type; + connect(source_, SIGNAL(resultAvailable(Source::Result const&, + Source::SearchDetails const&)), + this, SLOT(resultAvailable(Source::Result const&, + Source::SearchDetails const&))); - switch(details.type) - { - case 0: - type = Eniro::PERSONS; - break; - case 1: - type = Eniro::YELLOW_PAGES; - break; - default: - return; + connect(source_, SIGNAL(requestFinished(QVector const&, + Source::SearchDetails const&, bool)), + this, SLOT(requestFinished(QVector const&, + Source::SearchDetails const&, bool))); } - show(); - setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); + SourceCoreConfig* config = SourceCoreConfig::getCoreConfig(sourceId_); - if(!connectionManager_) + Q_ASSERT(config != 0); + + config->apply(source_); + delete config; + + if(searching_) { - connectionManager_ = new ConnectionManager(); + source_->abort(); + timer_ = startTimer(SEARCH_INTERVAL); } - connectionManager_->connect(); + while(timer_) + { + QApplication::processEvents(QEventLoop::WaitForMoreEvents); + } - eniro_->abort(); - eniro_->search(Eniro::SearchDetails(details.name, details.location, type)); + list_->clear(); + searching_ = true; + source_->search(Source::SearchDetails(details.name, details.location, details.type)); } -void ResultWindow::resultAvailable(Eniro::Result const& result, - Eniro::SearchDetails const& details) +void ResultWindow::resultAvailable(Source::Result const& result, + Source::SearchDetails const& details) { + if(!list_) + { + return; + } + Q_UNUSED(details); if(!result.number.isEmpty()) @@ -143,25 +150,38 @@ void ResultWindow::resultAvailable(Eniro::Result const& result, data["street"] = QVariant(result.street); data["city"] = QVariant(result.city); data["number"] = QVariant(result.number); + data["country"] = QVariant(result.country); item->setData(Qt::UserRole, QVariant(data)); 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) { - QString errorString = eniro_->errorString(); + QString errorString; + Source::Error error = source_->error(); - if(errorString.isEmpty()) + switch(error) { - errorString = tr("Unknown 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); @@ -177,18 +197,45 @@ void ResultWindow::requestFinished(QVector const& results, setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); + if(timer_) + { + killTimer(timer_); + } + + timer_ = startTimer(SEARCH_INTERVAL); + searching_ = false; + } 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(); details.number = data["number"].toString(); + details.country = data["country"].toString(); emit itemSelected(details); } +void ResultWindow::setVisible(bool visible) +{ + if(!visible && source_) + { + source_->abort(); + } + + QMainWindow::setVisible(visible); +} + +void ResultWindow::timerEvent(QTimerEvent* event) +{ + Q_UNUSED(event); + + killTimer(timer_); + timer_ = 0; +} +