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)
113 if (reply->error() == QNetworkReply::NoError) {
114 QByteArray ba = reply->readAll();
115 QBuffer buf(&ba, this);
116 buf.open(QIODevice::ReadOnly);
118 while (buf.canReadLine())
120 QString str(buf.readLine());
122 mfgList->addItem(str);
125 //qDebug() << (int)reply->error();
128 reply->deleteLater();
132 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
133 QListWidgetItem * /*previous*/)
135 if (mfgList->currentItem() != NULL) {
136 QString url = settings->value(
137 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
138 + alphabetList->currentItem()->text()
139 + "/" + current->text() + ".txt";
140 beginDownload(url, modelNetAM);
144 void SelectRemoteDlg::modelListDownloadFinished(QNetworkReply *reply)
147 if (reply->error() == QNetworkReply::NoError) {
148 QByteArray ba = reply->readAll();
149 QBuffer buf(&ba, this);
150 buf.open(QIODevice::ReadOnly);
152 deviceNameMap->clear();
153 while (buf.canReadLine())
155 QString str(buf.readLine());
157 QStringList strlist = str.split(":");
158 if (strlist.count() == 2) {
159 modelList->addItem(strlist[1]);
160 deviceNameMap->insert(strlist[1], strlist[0]);
164 //qDebug() << (int)reply->error();
167 reply->deleteLater();
171 void SelectRemoteDlg::downloadRemote()
173 QListWidgetItem *current = modelList->currentItem();
176 if (!current->text().isEmpty()) {
177 QString url = settings->value(
179 "http://mercury.wipsl.com/irwi/remotes/").toString()
180 + alphabetList->currentItem()->text()
181 + "/" + mfgList->currentItem()->text()
182 + "/" + (*deviceNameMap)[current->text()];
183 beginDownload(url, remoteNetAM);
184 settings->setValue("remoteName", current->text());
189 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
191 if (reply->error() == QNetworkReply::NoError) {
192 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
193 if(file.open(QIODevice::WriteOnly))
195 file.write(reply->readAll());
200 reply->deleteLater();
202 std::system("sudo /etc/init.d/lirc restart");
204 emit remoteDownloaded();
206 QMessageBox mbox(QMessageBox::Information, tr("Success"),
207 tr("Remote downloaded"), QMessageBox::Ok, this);