From: Torste Aikio Date: Thu, 10 Jun 2010 11:56:54 +0000 (+0300) Subject: Integration of remotelist to main code X-Git-Url: http://vcs.maemo.org/git/?p=irwi;a=commitdiff_plain;h=45ccc95cedae0ac98706fb55c9a34ffbc727ec20 Integration of remotelist to main code --- diff --git a/src/remotelist.cpp b/src/remotelist.cpp index 6fc7cd1..e5352bf 100644 --- a/src/remotelist.cpp +++ b/src/remotelist.cpp @@ -26,6 +26,13 @@ RemoteList::RemoteList(const QString &xmlFile) parse(xmlFile); } +RemoteList::RemoteList(QIODevice in) +{ + QDomDocument doc; + doc.setContent(&in); + parse(doc); +} + RemoteList::~RemoteList() { } diff --git a/src/remotelist.h b/src/remotelist.h index 796bce0..a1249f5 100644 --- a/src/remotelist.h +++ b/src/remotelist.h @@ -14,6 +14,7 @@ public: RemoteList(const RemoteList &); RemoteList(QDomDocument &); RemoteList(const QString &xmlFile); + RemoteList(QIODevice); ~RemoteList(); void setContent(QDomDocument &); @@ -22,8 +23,8 @@ public: // Returns false if document is not set or it's invalid bool isValid(); - QList letters(); - QStringList manufacturers(const QChar &letter); + QStringList letters(); + QStringList manufacturers(const QString &letter); QList models(const QString &manufacturer); private: @@ -35,7 +36,7 @@ private: private: bool valid; - QMap mfgMap; + QMap mfgMap; QMap > modelMap; }; diff --git a/src/selectremotedlg.cpp b/src/selectremotedlg.cpp index af5c5f8..ce36cf2 100644 --- a/src/selectremotedlg.cpp +++ b/src/selectremotedlg.cpp @@ -1,5 +1,8 @@ #include "selectremotedlg.h" +#include "remotelist.h" +#include "model.h" + #include #include @@ -15,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -26,30 +30,13 @@ SelectRemoteDlg::SelectRemoteDlg(QWidget *parent) this->setMinimumHeight(320); deviceNameMap = new QMap(); - - //TODO caching? - mfgNetAM = new QNetworkAccessManager(this); - connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)), - this, SLOT(mfgListDownloadFinished(QNetworkReply*))); - - modelNetAM = new QNetworkAccessManager(this); - connect(modelNetAM, SIGNAL(finished(QNetworkReply*)), - this, SLOT(modelListDownloadFinished(QNetworkReply*))); - - remoteNetAM = new QNetworkAccessManager(this); - connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)), - this, SLOT(remoteDownloadFinished(QNetworkReply*))); - settings = new QSettings(this); + remoteList = NULL; layout = new QHBoxLayout(this); alphabetList = new QListWidget(this); alphabetList->setMaximumWidth(96); - for (char c = 'a'; c <= 'z'; ++c) - { - alphabetList->addItem(QString(c)); - } layout->addWidget(alphabetList); connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*))); @@ -68,6 +55,17 @@ SelectRemoteDlg::SelectRemoteDlg(QWidget *parent) this, SLOT(downloadRemote())); this->setLayout(layout); + + //TODO caching? + listNetAM = new QNetworkAccessManager(this); + connect(listNetAM, SIGNAL(finished(QNetworkReply*)), + this, SLOT(listDownloadFinished(QNetworkReply*))); + + remoteNetAM = new QNetworkAccessManager(this); + connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)), + this, SLOT(remoteDownloadFinished(QNetworkReply*))); + beginDownload(settings->value("dbUrl", + "http://mercury.wipsl.com/irwi/db.xml").toString, listNetAM); } SelectRemoteDlg::~SelectRemoteDlg() @@ -76,14 +74,17 @@ SelectRemoteDlg::~SelectRemoteDlg() layout = NULL; delete settings; settings = NULL; - delete mfgNetAM; - mfgNetAM = NULL; - delete modelNetAM; - modelNetAM = NULL; + delete listNetAM; + listNetAM = NULL; delete remoteNetAM; remoteNetAM = NULL; delete deviceNameMap; deviceNameMap = NULL; + if (remoteList) + { + delete remoteList; + remoteList = NULL; + } } void SelectRemoteDlg::setBusy(bool busy) @@ -101,26 +102,26 @@ void SelectRemoteDlg::beginDownload(const QString &url, QNetworkAccessManager *n void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem * /*previous*/) { - QString url = settings->value("remoteUrl", - "http://mercury.wipsl.com/irwi/remotes/").toString() + - current->text() + ".txt"; - beginDownload(url, mfgNetAM); + mfgList->clear(); + modelList->clear(); + if (current) + { + mfgList->addItems(remoteList->manufacturers(current->text())); + } } -void SelectRemoteDlg::mfgListDownloadFinished(QNetworkReply *reply) +void SelectRemoteDlg::listDownloadFinished(QNetworkReply *reply) { - mfgList->clear(); - modelList->clear(); if (reply->error() == QNetworkReply::NoError) { QByteArray ba = reply->readAll(); QBuffer buf(&ba, this); buf.open(QIODevice::ReadOnly); buf.seek(0); - while (buf.canReadLine()) + remoteList = new RemoteList(buf); + alist = remoteList->letters(); + for (int i = 0; i < alist.size(); ++i) { - QString str(buf.readLine()); - str.chop(1); - mfgList->addItem(str); + alphabetList->addItem(QString(alist[i])); } } else { //qDebug() << (int)reply->error(); @@ -133,58 +134,33 @@ void SelectRemoteDlg::mfgListDownloadFinished(QNetworkReply *reply) void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem * /*previous*/) { - if (mfgList->currentItem() != NULL) { - QString url = settings->value( - "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString() - + alphabetList->currentItem()->text() - + "/" + current->text() + ".txt"; - beginDownload(url, modelNetAM); - } -} - -void SelectRemoteDlg::modelListDownloadFinished(QNetworkReply *reply) -{ modelList->clear(); - if (reply->error() == QNetworkReply::NoError) { - QByteArray ba = reply->readAll(); - QBuffer buf(&ba, this); - buf.open(QIODevice::ReadOnly); - buf.seek(0); - deviceNameMap->clear(); - while (buf.canReadLine()) + deviceNameMap->clear(); + if (current) + { + QList models = remoteList->models(current->text()); + for (int i = 0; i < models.size(); ++i) { - QString str(buf.readLine()); - str.chop(1); - QStringList strlist = str.split(":"); - if (strlist.count() == 2) { - modelList->addItem(strlist[1]); - deviceNameMap->insert(strlist[1], strlist[0]); - } + modelList->addItem(models[i].name); + deviceNameMap->insert(models[i].name, models[i].file); } - } else { - //qDebug() << (int)reply->error(); + } - reply->close(); - reply->deleteLater(); - setBusy(false); } void SelectRemoteDlg::downloadRemote() { - QListWidgetItem *currentAlpha = alphabetList->currentItem(); - QListWidgetItem *currentMfg = mfgList->currentItem(); QListWidgetItem *currentModel = modelList->currentItem(); - if (currentModel && currentMfg && currentAlpha) + if (currentModel) { - if (!currentModel->text().isEmpty()) { + QString name = currentModel->text(); + if (!name.isEmpty()) { QString url = settings->value( "remoteUrl", - "http://mercury.wipsl.com/irwi/remotes/").toString() - + currentAlpha->text() - + "/" + currentMfg->text() - + "/" + (*deviceNameMap)[currentModel->text()]; + "http://mercury.wipsl.com/irwi/uploaded/").toString() + + (*deviceNameMap)[name]; beginDownload(url, remoteNetAM); - settings->setValue("remoteName", currentModel->text()); + settings->setValue("remoteName", name); } } } diff --git a/src/selectremotedlg.h b/src/selectremotedlg.h index b7ab807..9685df0 100644 --- a/src/selectremotedlg.h +++ b/src/selectremotedlg.h @@ -14,6 +14,7 @@ class QNetworkReply; class QWidget; class QPushButton; class QLabel; +class RemoteList; class SelectRemoteDlg : public QDialog { @@ -29,9 +30,7 @@ private slots: void alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous); void mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous); - void mfgListDownloadFinished(QNetworkReply *reply); - - void modelListDownloadFinished(QNetworkReply *reply); + void listDownloadFinished(QNetworkReply *reply); void downloadRemote(); void remoteDownloadFinished(QNetworkReply *reply); @@ -42,13 +41,14 @@ private: QListWidget *mfgList; QListWidget *modelList; QSettings *settings; - QNetworkAccessManager *mfgNetAM; - QNetworkAccessManager *modelNetAM; + QNetworkAccessManager *listNetAM; QNetworkAccessManager *remoteNetAM; QMap *deviceNameMap; QPushButton *downloadBtn; QLabel *remoteNameLabel; + RemoteList *remoteList; + void beginDownload(const QString &url, QNetworkAccessManager *nam); void setBusy(bool busy = true); };