Architecture changed to allow easier addition of new phone books. Norwegian phonebook...
[jenirok] / src / gui / resultwindow.cpp
index 1a3d954..2640bbe 100644 (file)
 #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)
 {
     setAttribute(Qt::WA_Maemo5StackedWindow);
     setWindowTitle(tr("Search results"));
@@ -54,49 +56,44 @@ 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);
-        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)));
+        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 <Source::Result> const&,
+                                               Source::SearchDetails const&, bool)),
+                                               this, SLOT(requestFinished(QVector <Source::Result> const&,
+                                                                          Source::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);
-    }
+    SourceCoreConfig* config = SourceCoreConfig::getCoreConfig(sourceId);
 
-    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;
     }
 
@@ -110,13 +107,13 @@ void ResultWindow::search(SearchDialog::SearchDetails& details)
 
     connectionManager_->connect();
 
-    eniro_->abort();
-    eniro_->search(Eniro::SearchDetails(details.name, details.location, type));
+    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);
 
@@ -149,8 +146,8 @@ void ResultWindow::resultAvailable(Eniro::Result const& result,
     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);
@@ -158,21 +155,21 @@ void ResultWindow::requestFinished(QVector <Eniro::Result> const& results,
     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;
         }
 
@@ -194,7 +191,7 @@ void ResultWindow::requestFinished(QVector <Eniro::Result> const& results,
 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();
@@ -203,4 +200,15 @@ void ResultWindow::itemClicked(QListWidgetItem* item)
     emit itemSelected(details);
 }
 
+void ResultWindow::setVisible(bool visible)
+{
+    QMainWindow::setVisible(visible);
+
+    if(!visible && source_)
+    {
+        source_->abort();
+    }
+}
+
+