1 #include "selectremotedlg.h"
10 #include <QListWidgetItem>
12 #include <QtNetwork/QNetworkAccessManager>
13 #include <QtNetwork/QNetworkReply>
18 #include <QMessageBox>
19 #include <QPushButton>
20 #include <QListWidgetItem>
22 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
25 this->setWindowTitle(tr("Select remote"));
26 this->setMinimumHeight(320);
28 deviceNameMap = new QMap<QString, QString>();
31 mfgNetAM = new QNetworkAccessManager(this);
32 connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)),
33 this, SLOT(mfgListDownloadFinished(QNetworkReply*)));
35 modelNetAM = new QNetworkAccessManager(this);
36 connect(modelNetAM, SIGNAL(finished(QNetworkReply*)),
37 this, SLOT(modelListDownloadFinished(QNetworkReply*)));
39 remoteNetAM = new QNetworkAccessManager(this);
40 connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
41 this, SLOT(remoteDownloadFinished(QNetworkReply*)));
43 settings = new QSettings(this);
45 layout = new QHBoxLayout(this);
47 alphabetList = new QListWidget(this);
48 alphabetList->setMaximumWidth(96);
49 for (char c = 'a'; c <= 'z'; ++c)
51 alphabetList->addItem(QString(c));
53 layout->addWidget(alphabetList);
54 connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
55 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
57 mfgList = new QListWidget(this);
58 layout->addWidget(mfgList);
59 connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
60 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
62 modelList = new QListWidget(this);
63 layout->addWidget(modelList);
65 downloadBtn = new QPushButton(tr("Download"), this);
66 layout->addWidget(downloadBtn);
67 connect(downloadBtn, SIGNAL(clicked()),
68 this, SLOT(downloadRemote()));
70 this->setLayout(layout);
73 SelectRemoteDlg::~SelectRemoteDlg()
89 void SelectRemoteDlg::setBusy(bool busy)
91 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
95 void SelectRemoteDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
97 nam->get(QNetworkRequest(QUrl(url)));
101 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
102 QListWidgetItem * /*previous*/)
104 QString url = settings->value("remoteUrl",
105 "http://mercury.wipsl.com/irwi/remotes/").toString() +
106 current->text() + ".txt";
107 beginDownload(url, mfgNetAM);
110 void SelectRemoteDlg::mfgListDownloadFinished(QNetworkReply *reply)
114 if (reply->error() == QNetworkReply::NoError) {
115 QByteArray ba = reply->readAll();
116 QBuffer buf(&ba, this);
117 buf.open(QIODevice::ReadOnly);
119 while (buf.canReadLine())
121 QString str(buf.readLine());
123 mfgList->addItem(str);
126 //qDebug() << (int)reply->error();
129 reply->deleteLater();
133 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
134 QListWidgetItem * /*previous*/)
136 if (mfgList->currentItem() != NULL) {
137 QString url = settings->value(
138 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
139 + alphabetList->currentItem()->text()
140 + "/" + current->text() + ".txt";
141 beginDownload(url, modelNetAM);
145 void SelectRemoteDlg::modelListDownloadFinished(QNetworkReply *reply)
148 if (reply->error() == QNetworkReply::NoError) {
149 QByteArray ba = reply->readAll();
150 QBuffer buf(&ba, this);
151 buf.open(QIODevice::ReadOnly);
153 deviceNameMap->clear();
154 while (buf.canReadLine())
156 QString str(buf.readLine());
158 QStringList strlist = str.split(":");
159 if (strlist.count() == 2) {
160 modelList->addItem(strlist[1]);
161 deviceNameMap->insert(strlist[1], strlist[0]);
165 //qDebug() << (int)reply->error();
168 reply->deleteLater();
172 void SelectRemoteDlg::downloadRemote()
174 QListWidgetItem *currentAlpha = alphabetList->currentItem();
175 QListWidgetItem *currentMfg = mfgList->currentItem();
176 QListWidgetItem *currentModel = modelList->currentItem();
177 if (currentModel && currentMfg && currentAlpha)
179 if (!currentModel->text().isEmpty()) {
180 QString url = settings->value(
182 "http://mercury.wipsl.com/irwi/remotes/").toString()
183 + currentAlpha->text()
184 + "/" + currentMfg->text()
185 + "/" + (*deviceNameMap)[currentModel->text()];
186 beginDownload(url, remoteNetAM);
187 settings->setValue("remoteName", currentModel->text());
192 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
194 if (reply->error() == QNetworkReply::NoError) {
195 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
196 if(file.open(QIODevice::WriteOnly))
198 file.write(reply->readAll());
203 reply->deleteLater();
205 std::system("sudo /etc/init.d/lirc restart");
207 emit remoteDownloaded();
209 QMessageBox mbox(QMessageBox::Information, tr("Success"),
210 tr("Remote downloaded"), QMessageBox::Ok, this);