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"));
27 deviceNameMap = new QMap<QString, QString>();
30 mfgNetAM = new QNetworkAccessManager(this);
31 connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)),
32 this, SLOT(mfgListDownloadFinished(QNetworkReply*)));
34 modelNetAM = new QNetworkAccessManager(this);
35 connect(modelNetAM, SIGNAL(finished(QNetworkReply*)),
36 this, SLOT(modelListDownloadFinished(QNetworkReply*)));
38 remoteNetAM = new QNetworkAccessManager(this);
39 connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
40 this, SLOT(remoteDownloadFinished(QNetworkReply*)));
42 settings = new QSettings(this);
44 layout = new QHBoxLayout(this);
46 alphabetList = new QListWidget(this);
47 for (char c = 'a'; c <= 'z'; ++c)
49 alphabetList->addItem(QString(c));
51 layout->addWidget(alphabetList);
52 connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
53 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
55 mfgList = new QListWidget(this);
56 layout->addWidget(mfgList);
57 connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
58 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
60 modelList = new QListWidget(this);
61 layout->addWidget(modelList);
63 downloadBtn = new QPushButton(tr("Download"), this);
64 layout->addWidget(downloadBtn);
65 connect(downloadBtn, SIGNAL(clicked()),
66 this, SLOT(downloadRemote()));
68 this->setLayout(layout);
71 SelectRemoteDlg::~SelectRemoteDlg()
87 void SelectRemoteDlg::setBusy(bool busy)
89 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
93 void SelectRemoteDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
95 nam->get(QNetworkRequest(QUrl(url)));
99 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
100 QListWidgetItem * /*previous*/)
102 QString url = settings->value("remoteUrl",
103 "http://mercury.wipsl.com/irwi/remotes/").toString() +
104 current->text() + ".txt";
105 beginDownload(url, mfgNetAM);
108 void SelectRemoteDlg::mfgListDownloadFinished(QNetworkReply *reply)
111 if (reply->error() == QNetworkReply::NoError) {
112 QByteArray ba = reply->readAll();
113 QBuffer buf(&ba, this);
114 buf.open(QIODevice::ReadOnly);
116 while (buf.canReadLine())
118 QString str(buf.readLine());
120 mfgList->addItem(str);
123 //qDebug() << (int)reply->error();
126 reply->deleteLater();
130 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
131 QListWidgetItem * /*previous*/)
133 if (mfgList->currentItem() != NULL) {
134 QString url = settings->value(
135 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
136 + alphabetList->currentItem()->text()
137 + "/" + current->text() + ".txt";
138 beginDownload(url, modelNetAM);
142 void SelectRemoteDlg::modelListDownloadFinished(QNetworkReply *reply)
145 if (reply->error() == QNetworkReply::NoError) {
146 QByteArray ba = reply->readAll();
147 QBuffer buf(&ba, this);
148 buf.open(QIODevice::ReadOnly);
150 deviceNameMap->clear();
151 while (buf.canReadLine())
153 QString str(buf.readLine());
155 QStringList strlist = str.split(":");
156 if (strlist.count() == 2) {
157 modelList->addItem(strlist[1]);
158 deviceNameMap->insert(strlist[1], strlist[0]);
162 //qDebug() << (int)reply->error();
165 reply->deleteLater();
169 void SelectRemoteDlg::downloadRemote()
171 QListWidgetItem *current = modelList->currentItem();
174 if (!current->text().isEmpty()) {
175 QString url = settings->value(
177 "http://mercury.wipsl.com/irwi/remotes/").toString()
178 + alphabetList->currentItem()->text()
179 + "/" + mfgList->currentItem()->text()
180 + "/" + (*deviceNameMap)[current->text()];
181 beginDownload(url, remoteNetAM);
182 settings->setValue("remoteName", current->text());
187 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
189 if (reply->error() == QNetworkReply::NoError) {
190 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
191 if(file.open(QIODevice::WriteOnly))
193 file.write(reply->readAll());
198 reply->deleteLater();
200 std::system("lircctl restart");
202 emit remoteDownloaded();
204 QMessageBox mbox(QMessageBox::Information, tr("Success"),
205 tr("Remote downloaded"), QMessageBox::Ok, this);