Added missing build dependency to control file and fixed connection handling in gui.
[jenirok] / src / gui / resultwindow.cpp
index 0a5fe23..605ecb1 100644 (file)
 #include "resultwindow.h"
 #include "settings.h"
 #include "db.h"
+#include "cache.h"
 
-ResultWindow::ResultWindow(QWidget* parent): QMainWindow(parent), eniro_(0), list_(0)
+ResultWindow::ResultWindow(QWidget* parent): QMainWindow(parent),
+eniro_(0), list_(0), connectionManager_(0)
 {
-       setAttribute(Qt::WA_Maemo5StackedWindow);
-       setWindowTitle(tr("Search results"));
+    setAttribute(Qt::WA_Maemo5StackedWindow);
+    setWindowTitle(tr("Search results"));
+}
+
+ResultWindow::~ResultWindow()
+{
+    delete connectionManager_;
+    connectionManager_ = 0;
 }
 
 void ResultWindow::search(SearchDialog::SearchDetails& details)
 {
-       if(!list_)
-       {
-               list_ = new QListWidget(this);
-               setCentralWidget(list_);
-               connect(list_, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*)));
-       }
-       else
-       {
-               list_->clear();
-       }
-
-       DB::connect();
-
-       Eniro::Site selectedSite = Eniro::stringToSite(Settings::instance()->get("site"));
-
-       if(!eniro_)
-       {
-               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 <Eniro::Result> const&,
-                               Eniro::SearchDetails const&, bool)),
-                               this, SLOT(requestFinished(QVector <Eniro::Result> const&,
-                               Eniro::SearchDetails const&, bool)));
-       }
-
-       QString username = Settings::instance()->get("eniro_username");
-       QString password = Settings::instance()->get("eniro_password");
-
-       if(!username.isEmpty() && !password.isEmpty())
-       {
-               eniro_->login(username, password);
-       }
-
-       eniro_->setSite(selectedSite);
-
-       DB::disconnect();
-
-       Eniro::SearchType type;
-
-       switch(details.type)
-       {
-       case 0:
-               type = Eniro::PERSONS;
-               break;
-       case 1:
-               type = Eniro::YELLOW_PAGES;
-               break;
-       default:
-               return;
-       }
-
-       show();
-       setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true);
-
-       eniro_->abort();
-       eniro_->search(Eniro::SearchDetails(details.name, details.location, type));
+    if(!list_)
+    {
+        list_ = new QListWidget(this);
+        setCentralWidget(list_);
+        connect(list_, SIGNAL(itemClicked(QListWidgetItem*)), this,
+                SLOT(itemClicked(QListWidgetItem*)));
+    }
+    else
+    {
+        list_->clear();
+    }
+
+    DB::connect();
+
+    Eniro::Site selectedSite = Eniro::stringToSite(Settings::instance()->get("site"));
+
+    if(!eniro_)
+    {
+        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)));
+    }
+
+    QString username = Settings::instance()->get("eniro_username");
+    QString password = Settings::instance()->get("eniro_password");
+
+    if(!username.isEmpty() && !password.isEmpty())
+    {
+        eniro_->login(username, password);
+    }
+
+    eniro_->setSite(selectedSite);
+
+    DB::disconnect();
+
+    Eniro::SearchType type;
+
+    switch(details.type)
+    {
+    case 0:
+        type = Eniro::PERSONS;
+        break;
+    case 1:
+        type = Eniro::YELLOW_PAGES;
+        break;
+    default:
+        return;
+    }
+
+    show();
+    setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true);
+
+    if(!connectionManager_)
+    {
+        connectionManager_ = new ConnectionManager();
+    }
+
+    connectionManager_->connect();
+
+    eniro_->abort();
+    eniro_->search(Eniro::SearchDetails(details.name, details.location, type));
 
 }
 
 void ResultWindow::resultAvailable(Eniro::Result const& result,
-                                          Eniro::SearchDetails const& details)
+                                   Eniro::SearchDetails const& details)
 {
-       Q_UNUSED(details);
+    Q_UNUSED(details);
 
-       QString row = result.name;
+    if(!result.number.isEmpty())
+    {
+        Cache::instance().addItem(result);
+    }
 
-       if(!result.street.isEmpty())
-       {
-               row += ", " + result.street;
-       }
+    QString row = result.name;
 
-       if(!result.city.isEmpty())
-       {
-               row += ", " + result.city;
-       }
+    if(!result.street.isEmpty())
+    {
+        row += ", " + result.street;
+    }
 
-       QListWidgetItem* item = new QListWidgetItem(row, list_);
-       QMap <QString, QVariant> data;
-       data["name"] = QVariant(result.name);
-       data["street"] = QVariant(result.street);
-       data["city"] = QVariant(result.city);
-       data["number"] = QVariant(result.number);
+    if(!result.city.isEmpty())
+    {
+        row += ", " + result.city;
+    }
 
-       item->setData(Qt::UserRole, QVariant(data));
+    QListWidgetItem* item = new QListWidgetItem(row, list_);
+    QMap <QString, QVariant> data;
+    data["name"] = QVariant(result.name);
+    data["street"] = QVariant(result.street);
+    data["city"] = QVariant(result.city);
+    data["number"] = QVariant(result.number);
 
-       list_->addItem(item);
+    item->setData(Qt::UserRole, QVariant(data));
+
+    list_->addItem(item);
 }
 
 void ResultWindow::requestFinished(QVector <Eniro::Result> const& results,
-                                          Eniro::SearchDetails const& details,
-                                          bool error)
+                                   Eniro::SearchDetails const& details,
+                                   bool error)
 {
-       Q_UNUSED(details);
+    Q_UNUSED(details);
+
+    if(error)
+    {
+        QString errorString = eniro_->errorString();
+
+        if(errorString.isEmpty())
+        {
+            errorString = tr("Unknown error");
+        }
 
-       if(error)
-       {
-               QMessageBox::critical(this, tr("Error"), eniro_->errorString());
-       }
+        QMessageBox::critical(this, tr("Error"), errorString);
+    }
 
-       if(results.size() == 0)
-       {
-               QLabel* info = new QLabel(tr("No results found"));
-               info->setAlignment(Qt::AlignCenter);
-               setCentralWidget(info);
-               list_ = 0;
-       }
+    if(results.size() == 0)
+    {
+        QLabel* info = new QLabel(tr("No results found"));
+        info->setAlignment(Qt::AlignCenter);
+        setCentralWidget(info);
+        list_ = 0;
+    }
 
-       setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false);
+    setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false);
 
 }
 
 void ResultWindow::itemClicked(QListWidgetItem* item)
 {
-       QMap <QString, QVariant> data = item->data(Qt::UserRole).toMap();
-       Eniro::Result details;
-       details.name = data["name"].toString();
-       details.street = data["street"].toString();
-       details.city = data["city"].toString();
-       details.number = data["number"].toString();
-
-       emit itemSelected(details);
+    QMap <QString, QVariant> data = item->data(Qt::UserRole).toMap();
+    Eniro::Result details;
+    details.name = data["name"].toString();
+    details.street = data["street"].toString();
+    details.city = data["city"].toString();
+    details.number = data["number"].toString();
+
+    emit itemSelected(details);
 }