Bugfixes to previous commit
[irwi] / src / selectremotedlg.cpp
index e4f1b74..ec435c6 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "remote.h"
 #include "remotelistwidgetitem.h"
+#include "onlinepollerthread.h"
 
 #include <QHBoxLayout>
 #include <QLabel>
@@ -46,21 +47,24 @@ SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
             this, SLOT(downloadRemote()));
 
     this->setLayout(layout);
-    connect(&remoteDBMgr, SIGNAL(RemoteDBMgr::dbReady(RemoteDB*)),
+    connect(&remoteDBMgr, SIGNAL(dbReady(RemoteDB*)),
             this, SLOT(setDB(RemoteDB*)));
-    remoteDBMgr.getDBAsync();
-    setBusy(true);
 }
 
-
 SelectRemoteDlg::~SelectRemoteDlg()
 {
     delete layout;
+    if (onlinePollerThread != NULL) {
+        onlinePollerThread->quit();
+        delete onlinePollerThread;
+        onlinePollerThread = NULL;
+    }
 }
 
 void SelectRemoteDlg::setDB(RemoteDB *db)
 {
     remoteDB = db;
+    alphabetList->addItems(remoteDB->keys());
     setBusy(false);
 }
 
@@ -87,9 +91,9 @@ void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
     modelList->clear();
     if (current)
     {
-        QList <Remote> remotes =
-           (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
-        foreach(Remote remote, remotes) {
+        RemoteList remotes =
+            (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
+        foreach(Remote *remote, remotes) {
             modelList->addItem(new RemoteListWidgetItem(remote));
         }
     }
@@ -97,10 +101,44 @@ void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
 
 void SelectRemoteDlg::downloadRemote()
 {
-    RemoteListWidgetItem *currentModel = static_cast<RemoteListWidgetItem *>(modelList->currentItem());
+    RemoteListWidgetItem *currentModel =
+        static_cast<RemoteListWidgetItem *>(modelList->currentItem());
     if (currentModel)
     {
-        currentModel->remote().saveToFile();
+        setBusy();
+        connect(currentModel->remote(), SIGNAL(saveFinished()),
+                this, SLOT(close()));
+        currentModel->remote()->saveToFile();
+
+        emit remoteChanged(*(currentModel->remote()));
+    }
+}
+
+void SelectRemoteDlg::getDB()
+{
+    if (onlinePollerThread != NULL) {
+        onlinePollerThread->quit();
+        delete onlinePollerThread;
+        onlinePollerThread = NULL;
     }
+    remoteDBMgr.getDBAsync();
+}
+
+void SelectRemoteDlg::refreshDB()
+{
+    setBusy(true);
+    if (onlinePollerThread != NULL) {
+        delete onlinePollerThread;
+    }
+    onlinePollerThread = new OnlinePollerThread();
+    connect(onlinePollerThread, SIGNAL(online()),
+            this, SLOT(getDB()));
+    onlinePollerThread->run();
+}
+
+void SelectRemoteDlg::showEvent(QShowEvent *event)
+{
+    refreshDB();
+    QDialog::showEvent(event);
 }