Danish Eniro search fixed.
[jenirok] / src / gui / settingsdialog.cpp
index f9dd623..2c3ee77 100644 (file)
@@ -16,6 +16,7 @@
  *
  */
 
+#include <QtCore/QDebug>
 #include <QtGui/QLabel>
 #include <QtGui/QPushButton>
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QTabWidget>
 #include <QMaemo5ValueButton>
 #include <QMaemo5InformationBox>
-#include <QDebug>
 #include "settingsdialog.h"
 #include "settings.h"
 #include "db.h"
 #include "daemon.h"
 #include "cache.h"
+#include "buttonselector.h"
+#include "connectionselector.h"
+#include "sourceguiconfig.h"
 
-QMap <Eniro::Site, Eniro::SiteDetails> SettingsDialog::sites_;
+QList<Source::SourceDetails> SettingsDialog::sources_;
 
 SettingsDialog::SettingsDialog(QWidget* parent): QDialog(parent),
-usernameInput_(0), passwordInput_(0), cacheInput_(0), siteSelector_(0),
-autostartSelector_(0)
+sourceConfig_(0), cacheInput_(0), sourceSelector_(0),
+autostartSelector_(0), connectionSelector_(0), tabs_(0)
 {
     setWindowTitle(tr("Settings"));
 
-    DB::connect();
-
     QVBoxLayout* general = new QVBoxLayout;
     QVBoxLayout* daemon = new QVBoxLayout;
     QHBoxLayout* mainLayout = new QHBoxLayout;
-    QHBoxLayout* username = new QHBoxLayout;
-    QHBoxLayout* password = new QHBoxLayout;
+
     QHBoxLayout* cache = new QHBoxLayout;
 
-    QLabel* usernameLabel = new QLabel(tr("Eniro username"));
-    usernameInput_ = new QLineEdit(Settings::instance()->get("eniro_username"));
+    currentSource_ = Settings::instance()->get("source");
+    Source::SourceId sourceId = Source::stringToId(currentSource_);
+    sourceConfig_ = SourceGuiConfig::getGuiConfig(sourceId, this);
 
-    QLabel* passwordLabel = new QLabel(tr("Eniro password"));
-    passwordInput_ = new QLineEdit(Settings::instance()->get("eniro_password"));
-    passwordInput_->setEchoMode(QLineEdit::PasswordEchoOnEdit);
+    Q_ASSERT(sourceConfig_ != 0);
 
     QLabel* cacheLabel = new QLabel(tr("Cache size (numbers)"));
     cacheInput_ = new QLineEdit(Settings::instance()->get("cache_size"));
@@ -62,89 +61,77 @@ autostartSelector_(0)
     QPushButton* cacheResetButton = new QPushButton(tr("Clear"), this);
     connect(cacheResetButton, SIGNAL(pressed()), this, SLOT(resetCache()));
 
-    siteSelector_ = new ButtonSelector(tr("Eniro site"), this);
-    QString site = Settings::instance()->get("eniro_site");
-    int i = 0;
+    languageSelector_ = new ButtonSelector(tr("Language"), this);
+    languageSelector_->addItem(tr("Automatic"), "");
 
-    if(sites_.empty())
-    {
-       sites_ = Eniro::getSites();
-    }
+    selectedLanguage_ = Settings::instance()->get("language");
+
+    QList<Settings::Language> langs;
+    Settings::getLanguages(langs);
 
-    QMap <Eniro::Site, Eniro::SiteDetails>::const_iterator it;
-    for(it = sites_.begin(); it != sites_.end(); it++)
+    for(int i = 0; i < langs.size(); i++)
     {
-        QString name;
+        languageSelector_->addItem(langs.at(i).name, langs.at(i).id);
 
-        switch(it.key())
+        if(langs.at(i).id == selectedLanguage_)
         {
-        case Eniro::FI:
-            name = tr("Finnish");
-            break;
-        case Eniro::SE:
-            name = tr("Swedish");
-            break;
-        case Eniro::DK:
-            name = tr("Danish");
-            break;
-        default:
-            qDebug() << "Unknown site";
-            continue;
-
+            languageSelector_->setCurrentIndex(i + 1);
         }
-        siteSelector_->addItem(name, it.value().id);
+    }
+
+    sourceSelector_ = new ButtonSelector(tr("Phonebook"), this);
 
-        if(it.value().id == site)
+    if(sources_.isEmpty())
+    {
+        Source::getSources(sources_);
+    }
+
+    for(int i = 0; i < sources_.size(); i++)
+    {
+        sourceSelector_->addItem(sources_.at(i).name, sources_.at(i).id);
+
+        if(sources_.at(i).id == currentSource_)
         {
-            siteSelector_->setCurrentIndex(i);
+            sourceSelector_->setCurrentIndex(i);
         }
-
-        i++;
     }
 
+    connect(sourceSelector_, SIGNAL(selected(unsigned int, QString const&, QVariant const&)),
+            this, SLOT(onSourceSelected(unsigned int, QString const&, QVariant const&)));
+
     autostartSelector_ = new ButtonSelector(tr("Autostart"), this);
     QString autostart = Settings::instance()->get("autostart");
     autostartSelector_->addItem(tr("Enabled"), "1");
     autostartSelector_->addItem(tr("Disabled"), "0");
     autostartSelector_->setCurrentIndex(autostart == "1" ? 0 : 1);
 
-    autoconnectCheck_ = new QCheckBox(tr("Allow daemon to connect automatically"));
-    QString autoconnect = Settings::instance()->get("autoconnect");
-    autoconnectCheck_->setChecked(autoconnect == "1");
-
-    connectionSelector_ = new ConnectionSelector(tr("Connection to use"), this);
+    connectionSelector_ = new ConnectionSelector(tr("Connect automatically on"), this);
     QString selectedConnection = Settings::instance()->get("connection");
 
-    if(selectedConnection != "0")
+    if(connectionSelector_->selectByValue(selectedConnection) &&
+       selectedConnection == "gprs")
     {
-        connectionSelector_->addItem(Settings::instance()->get("connection_name"), selectedConnection);
-        connectionSelector_->selectByValue(selectedConnection);
+        connectionSelector_->updateConnections();
     }
 
     QPushButton* submitButton = new QPushButton(tr("Save"), this);
     connect(submitButton, SIGNAL(pressed()), this, SLOT(saveSettings()));
 
-    username->addWidget(usernameLabel);
-    username->addWidget(usernameInput_);
-    password->addWidget(passwordLabel);
-    password->addWidget(passwordInput_);
     cache->addWidget(cacheLabel);
     cache->addWidget(cacheInput_);
     cache->addWidget(cacheResetButton);
-    general->addLayout(username);
-    general->addLayout(password);
     general->addLayout(cache);
-    general->addWidget(siteSelector_);
+    general->addWidget(languageSelector_);
+    general->addWidget(sourceSelector_);
 
     daemon->addWidget(autostartSelector_);
-    daemon->addWidget(autoconnectCheck_);
     daemon->addWidget(connectionSelector_);
 
     QDialogButtonBox* buttons = new QDialogButtonBox;
     buttons->setCenterButtons(false);
     buttons->addButton(submitButton, QDialogButtonBox::AcceptRole);
 
-    QTabWidget* tabs = new QTabWidget;
+    tabs_ = new QTabWidget;
 
     QWidget* generalTab = new QWidget;
     generalTab->setLayout(general);
@@ -152,60 +139,57 @@ autostartSelector_(0)
     QWidget* daemonTab = new QWidget;
     daemonTab->setLayout(daemon);
 
-    tabs->addTab(generalTab, tr("General"));
-    tabs->addTab(daemonTab, tr("Daemon"));
+    tabs_->addTab(generalTab, tr("General"));
+    tabs_->addTab(daemonTab, tr("Daemon"));
+    tabs_->addTab(sourceConfig_, tr("Phonebook settings"));
 
-    mainLayout->addWidget(tabs);
+    mainLayout->addWidget(tabs_);
     mainLayout->addWidget(buttons);
 
     setLayout(mainLayout);
 
-    DB::disconnect();
 }
 
 void SettingsDialog::saveSettings()
 {
     hide();
 
-    DB::connect();
+    Settings::instance()->startEdit();
 
-    Settings::instance()->set("eniro_username", usernameInput_->text());
-    Settings::instance()->set("eniro_password", passwordInput_->text());
     Settings::instance()->set("cache_size", cacheInput_->text());
-    QString site = siteSelector_->value().toString();
-    Settings::instance()->set("site", site);
+    QString source = sourceSelector_->value().toString();
+    Settings::instance()->set("source", source);
     QString autostart = autostartSelector_->value().toString();
     Settings::instance()->set("autostart", autostart);
-    bool autoconnect = autoconnectCheck_->isChecked();
-    Settings::instance()->set("autoconnect", autoconnect ? "1" : "0");
     QString connection = connectionSelector_->value().toString();
     Settings::instance()->set("connection", connection);
-    Settings::instance()->set("connection_name", connectionSelector_->text());
+    QString language = languageSelector_->value().toString();
+    Settings::instance()->set("language", language);
+    sourceConfig_->save();
+
+    Settings::instance()->endEdit();
 
-    DB::disconnect();
+    bool infoboxShown = false;
 
-    if((site != currentSite_ ||
-        autoconnect != currentAutoconnect_ ||
-        connection != currentConnection_) && Daemon::isRunning())
+    if(language != selectedLanguage_)
     {
-        QMaemo5InformationBox::information(this, tr("Restarting daemon..."));
-        Daemon::restart();
-        currentSite_ = site;
+        QMaemo5InformationBox::information(this, tr("You need to restart Jenirok for language change to take effect."));
+        selectedLanguage_ = language;
+        infoboxShown = true;
     }
 
-}
-
-void SettingsDialog::setVisible(bool visible)
-{
-    QDialog::setVisible(visible);
-
-    if(visible)
+    if(Daemon::isRunning())
     {
-        currentSite_ = siteSelector_->value().toString();
-        currentConnection_ = connectionSelector_->value().toString();
-        currentAutoconnect_ = autoconnectCheck_->isChecked();
+        if(!infoboxShown)
+        {
+            QMaemo5InformationBox::information(this, tr("Restarting daemon..."), 1500);
+        }
+
+        Daemon::restart();
     }
 
+    emit saved();
+
 }
 
 void SettingsDialog::resetCache()
@@ -217,3 +201,30 @@ void SettingsDialog::resetCache()
         QMaemo5InformationBox::information(this, tr("%n number(s) were deleted from cache", "", ret));
     }
 }
+
+void SettingsDialog::onSourceSelected(unsigned int index,
+                                      QString const& text,
+                                      QVariant const& value)
+{
+    Q_UNUSED(index);
+    Q_UNUSED(text);
+
+    QString source = value.toString();
+
+    if(source != currentSource_)
+    {
+        int tabId = tabs_->indexOf(sourceConfig_);
+
+        if(tabId >= 0)
+        {
+            tabs_->removeTab(tabId);
+        }
+
+        delete sourceConfig_;
+        Source::SourceId sourceId = Source::stringToId(value.toString());
+        sourceConfig_ = SourceGuiConfig::getGuiConfig(sourceId, this);
+        Q_ASSERT(sourceConfig_ != 0);
+        tabs_->addTab(sourceConfig_, tr("Phonebook settings"));
+        currentSource_ = source;
+    }
+}