X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fselectremotedlg.cpp;h=8b1085efb5f51be3a4262782dbf0aeeb2f354223;hb=25589f8d9af69b7be64a606236f180f005dfd739;hp=e4f1b741dc3f997673fac2aafba6d4f20e7a6a4e;hpb=c7502c3cbc6d1bb4819b9af9300c09a986a2eebb;p=irwi diff --git a/src/selectremotedlg.cpp b/src/selectremotedlg.cpp index e4f1b74..8b1085e 100644 --- a/src/selectremotedlg.cpp +++ b/src/selectremotedlg.cpp @@ -2,6 +2,7 @@ #include "remote.h" #include "remotelistwidgetitem.h" +#include "onlinepollerthread.h" #include #include @@ -17,6 +18,7 @@ SelectRemoteDlg::SelectRemoteDlg(QWidget *parent) : QDialog(parent) { + onlinePollerThread = NULL; this->setWindowTitle(tr("Select remote")); this->setMinimumHeight(320); @@ -46,21 +48,25 @@ 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->stop(); + onlinePollerThread->wait(); + delete onlinePollerThread; + onlinePollerThread = NULL; + } } void SelectRemoteDlg::setDB(RemoteDB *db) { remoteDB = db; + alphabetList->addItems(remoteDB->keys()); setBusy(false); } @@ -87,9 +93,9 @@ void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current, modelList->clear(); if (current) { - QList 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 +103,45 @@ void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current, void SelectRemoteDlg::downloadRemote() { - RemoteListWidgetItem *currentModel = static_cast(modelList->currentItem()); + RemoteListWidgetItem *currentModel = + static_cast(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->stop(); + onlinePollerThread->wait(); + 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); }