1 #include "selectremotedlg.h"
3 #include "remotelist.h"
12 #include <QListWidget>
13 #include <QListWidgetItem>
15 #include <QtNetwork/QNetworkAccessManager>
16 #include <QtNetwork/QNetworkReply>
22 #include <QMessageBox>
23 #include <QPushButton>
24 #include <QListWidgetItem>
25 #include <QDomDocument>
27 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
30 this->setWindowTitle(tr("Select remote"));
31 this->setMinimumHeight(320);
33 deviceNameMap = new QMap<QString, QString>();
34 settings = new QSettings(this);
37 layout = new QHBoxLayout(this);
39 alphabetList = new QListWidget(this);
40 alphabetList->setMaximumWidth(96);
41 layout->addWidget(alphabetList);
42 connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
43 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
45 mfgList = new QListWidget(this);
46 layout->addWidget(mfgList);
47 connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
48 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
50 modelList = new QListWidget(this);
51 layout->addWidget(modelList);
53 downloadBtn = new QPushButton(tr("Download"), this);
54 layout->addWidget(downloadBtn);
55 connect(downloadBtn, SIGNAL(clicked()),
56 this, SLOT(downloadRemote()));
58 this->setLayout(layout);
61 listNetAM = new QNetworkAccessManager(this);
62 connect(listNetAM, SIGNAL(finished(QNetworkReply*)),
63 this, SLOT(listDownloadFinished(QNetworkReply*)));
65 remoteNetAM = new QNetworkAccessManager(this);
66 connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
67 this, SLOT(remoteDownloadFinished(QNetworkReply*)));
68 beginDownload(settings->value("dbUrl",
69 "http://mercury.wipsl.com/irwi/db.xml").toString(), listNetAM);
72 SelectRemoteDlg::~SelectRemoteDlg()
85 void SelectRemoteDlg::setBusy(bool busy)
87 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
91 void SelectRemoteDlg::beginDownload(const QString &url,
92 QNetworkAccessManager *nam)
94 nam->get(QNetworkRequest(QUrl(url)));
98 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
99 QListWidgetItem * /*previous*/)
105 mfgList->addItems(remoteList->manufacturers(current->text()));
109 void SelectRemoteDlg::listDownloadFinished(QNetworkReply *reply)
111 if (reply->error() == QNetworkReply::NoError) {
112 QByteArray ba = reply->readAll();
113 QBuffer buf(&ba, this);
114 buf.open(QIODevice::ReadOnly);
117 doc.setContent(&buf);
118 remoteList = new RemoteList(doc);
119 QStringList alist = remoteList->letters();
120 for (int i = 0; i < alist.size(); ++i)
122 alphabetList->addItem(QString(alist[i]));
125 //qDebug() << (int)reply->error();
128 reply->deleteLater();
132 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
133 QListWidgetItem * /*previous*/)
136 deviceNameMap->clear();
139 QList<Model> models = remoteList->models(current->text());
140 for (int i = 0; i < models.size(); ++i)
142 modelList->addItem(models[i].name);
143 deviceNameMap->insert(models[i].name, models[i].file);
149 void SelectRemoteDlg::downloadRemote()
151 QListWidgetItem *currentModel = modelList->currentItem();
154 QString name = currentModel->text();
155 if (!name.isEmpty()) {
156 QString url = settings->value(
158 "http://mercury.wipsl.com/irwi/uploaded/").toString()
159 + (*deviceNameMap)[name];
160 beginDownload(url, remoteNetAM);
161 settings->setValue("remoteName", name);
166 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
168 if (reply->error() == QNetworkReply::NoError) {
169 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
170 if(file.open(QIODevice::WriteOnly))
172 file.write(reply->readAll());
177 reply->deleteLater();
179 std::system("sudo /etc/init.d/lirc reload");
181 emit remoteDownloaded();
183 QMessageBox mbox(QMessageBox::Information, tr("Success"),
184 tr("Remote downloaded"), QMessageBox::Ok, this);