*
*/
-#include <QDebug>
+#include <QtCore/QDebug>
#include <QtCore/QVariant>
#include <QtCore/QString>
#include <QtGui/QLabel>
#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"));
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 <Eniro::Result> const&,
- Eniro::SearchDetails const&, bool)),
- this, SLOT(requestFinished(QVector <Eniro::Result> 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 <Source::Result> const&,
+ Source::SearchDetails const&, bool)),
+ this, SLOT(requestFinished(QVector <Source::Result> 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())
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 <Eniro::Result> const& results,
- Eniro::SearchDetails const& details,
+void ResultWindow::requestFinished(QVector <Source::Result> const& results,
+ Source::SearchDetails const& details,
bool error)
{
Q_UNUSED(details);
if(error)
{
QString errorString;
- Eniro::Error error = eniro_->error();
+ Source::Error error = source_->error();
switch(error)
{
- case Eniro::CONNECTION_FAILURE:
+ case Source::CONNECTION_FAILURE:
errorString = tr("Connection to server failed");
break;
- case Eniro::INVALID_LOGIN:
+ case Source::INVALID_LOGIN:
errorString = tr("Invalid login details");
break;
- case Eniro::TIMEOUT:
+ case Source::TIMEOUT:
errorString = tr("Request timed out");
break;
default:
- errorString = tr("Searching failed:") + " " + eniro_->errorString();
+ errorString = tr("Searching failed:") + " " + source_->errorString();
break;
}
setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false);
+ if(timer_)
+ {
+ killTimer(timer_);
+ }
+
+ timer_ = startTimer(SEARCH_INTERVAL);
+ searching_ = false;
+
}
void ResultWindow::itemClicked(QListWidgetItem* item)
{
QMap <QString, QVariant> 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;
+}
+