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>
26 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
29 this->setWindowTitle(tr("Select remote"));
30 this->setMinimumHeight(320);
32 deviceNameMap = new QMap<QString, QString>();
33 settings = new QSettings(this);
36 layout = new QHBoxLayout(this);
38 alphabetList = new QListWidget(this);
39 alphabetList->setMaximumWidth(96);
40 layout->addWidget(alphabetList);
41 connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
42 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
44 mfgList = new QListWidget(this);
45 layout->addWidget(mfgList);
46 connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
47 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
49 modelList = new QListWidget(this);
50 layout->addWidget(modelList);
52 downloadBtn = new QPushButton(tr("Download"), this);
53 layout->addWidget(downloadBtn);
54 connect(downloadBtn, SIGNAL(clicked()),
55 this, SLOT(downloadRemote()));
57 this->setLayout(layout);
60 listNetAM = new QNetworkAccessManager(this);
61 connect(listNetAM, SIGNAL(finished(QNetworkReply*)),
62 this, SLOT(listDownloadFinished(QNetworkReply*)));
64 remoteNetAM = new QNetworkAccessManager(this);
65 connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
66 this, SLOT(remoteDownloadFinished(QNetworkReply*)));
67 beginDownload(settings->value("dbUrl",
68 "http://mercury.wipsl.com/irwi/db.xml").toString, listNetAM);
71 SelectRemoteDlg::~SelectRemoteDlg()
90 void SelectRemoteDlg::setBusy(bool busy)
92 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
96 void SelectRemoteDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
98 nam->get(QNetworkRequest(QUrl(url)));
102 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
103 QListWidgetItem * /*previous*/)
109 mfgList->addItems(remoteList->manufacturers(current->text()));
113 void SelectRemoteDlg::listDownloadFinished(QNetworkReply *reply)
115 if (reply->error() == QNetworkReply::NoError) {
116 QByteArray ba = reply->readAll();
117 QBuffer buf(&ba, this);
118 buf.open(QIODevice::ReadOnly);
120 remoteList = new RemoteList(buf);
121 alist = remoteList->letters();
122 for (int i = 0; i < alist.size(); ++i)
124 alphabetList->addItem(QString(alist[i]));
127 //qDebug() << (int)reply->error();
130 reply->deleteLater();
134 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
135 QListWidgetItem * /*previous*/)
138 deviceNameMap->clear();
141 QList<Model> models = remoteList->models(current->text());
142 for (int i = 0; i < models.size(); ++i)
144 modelList->addItem(models[i].name);
145 deviceNameMap->insert(models[i].name, models[i].file);
151 void SelectRemoteDlg::downloadRemote()
153 QListWidgetItem *currentModel = modelList->currentItem();
156 QString name = currentModel->text();
157 if (!name.isEmpty()) {
158 QString url = settings->value(
160 "http://mercury.wipsl.com/irwi/uploaded/").toString()
161 + (*deviceNameMap)[name];
162 beginDownload(url, remoteNetAM);
163 settings->setValue("remoteName", name);
168 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
170 if (reply->error() == QNetworkReply::NoError) {
171 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
172 if(file.open(QIODevice::WriteOnly))
174 file.write(reply->readAll());
179 reply->deleteLater();
181 std::system("sudo /etc/init.d/lirc reload");
183 emit remoteDownloaded();
185 QMessageBox mbox(QMessageBox::Information, tr("Success"),
186 tr("Remote downloaded"), QMessageBox::Ok, this);