1 #include "selectremotedlg.h"
10 #include <QListWidgetItem>
12 #include <QtNetwork/QNetworkAccessManager>
13 #include <QtNetwork/QNetworkReply>
18 #include <QMessageBox>
20 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
23 this->setWindowTitle(tr("Select remote"));
25 deviceNameMap = new QMap<QString, QString>();
28 mfgNetAM = new QNetworkAccessManager(this);
29 connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)),
30 this, SLOT(mfgListDownloadFinished(QNetworkReply*)));
32 modelNetAM = new QNetworkAccessManager(this);
33 connect(modelNetAM, SIGNAL(finished(QNetworkReply*)),
34 this, SLOT(modelListDownloadFinished(QNetworkReply*)));
36 remoteNetAM = new QNetworkAccessManager(this);
37 connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
38 this, SLOT(remoteDownloadFinished(QNetworkReply*)));
40 settings = new QSettings(this);
42 layout = new QHBoxLayout(this);
44 alphabetList = new QListWidget(this);
45 for (char c = 'a'; c <= 'z'; ++c)
47 alphabetList->addItem(QString(c));
49 layout->addWidget(alphabetList);
50 connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
51 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
53 mfgList = new QListWidget(this);
54 layout->addWidget(mfgList);
55 connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
56 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
58 modelList = new QListWidget(this);
59 layout->addWidget(modelList);
60 connect(modelList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
61 this, SLOT(modelItemChanged(QListWidgetItem*, QListWidgetItem*)));
63 this->setLayout(layout);
66 SelectRemoteDlg::~SelectRemoteDlg()
82 void SelectRemoteDlg::setBusy(bool busy)
84 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
88 void SelectRemoteDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
90 nam->get(QNetworkRequest(QUrl(url)));
94 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
95 QListWidgetItem *previous)
97 QString url = settings->value("remoteUrl",
98 "http://mercury.wipsl.com/irwi/remotes/").toString() +
99 current->text() + ".txt";
100 beginDownload(url, mfgNetAM);
103 void SelectRemoteDlg::mfgListDownloadFinished(QNetworkReply *reply)
106 if (reply->error() == QNetworkReply::NoError) {
107 QByteArray ba = reply->readAll();
108 QBuffer buf(&ba, this);
109 buf.open(QIODevice::ReadOnly);
111 while (buf.canReadLine())
113 QString str(buf.readLine());
115 mfgList->addItem(str);
118 //qDebug() << (int)reply->error();
121 reply->deleteLater();
125 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
127 if (mfgList->currentItem() != NULL) {
128 QString url = settings->value(
129 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
130 + alphabetList->currentItem()->text()
131 + "/" + current->text() + ".txt";
132 beginDownload(url, modelNetAM);
136 void SelectRemoteDlg::modelListDownloadFinished(QNetworkReply *reply)
139 if (reply->error() == QNetworkReply::NoError) {
140 QByteArray ba = reply->readAll();
141 QBuffer buf(&ba, this);
142 buf.open(QIODevice::ReadOnly);
144 deviceNameMap->clear();
145 while (buf.canReadLine())
147 QString str(buf.readLine());
149 QStringList strlist = str.split(":");
150 if (strlist.count() == 2) {
151 modelList->addItem(strlist[1]);
152 deviceNameMap->insert(strlist[1], strlist[0]);
156 //qDebug() << (int)reply->error();
159 reply->deleteLater();
163 void SelectRemoteDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
167 if (!current->text().isEmpty()) {
168 QString url = settings->value(
170 "http://mercury.wipsl.com/irwi/remotes/").toString()
171 + alphabetList->currentItem()->text()
172 + "/" + mfgList->currentItem()->text()
173 + "/" + (*deviceNameMap)[current->text()];
174 beginDownload(url, remoteNetAM);
175 settings->setValue("remoteName", current->text());
180 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
182 if (reply->error() == QNetworkReply::NoError) {
183 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
184 if(file.open(QIODevice::WriteOnly))
186 file.write(reply->readAll());
191 reply->deleteLater();
193 std::system("lircctl restart");
196 QMessageBox mbox(QMessageBox::Information, tr("Success"),
197 tr("Remote downloaded"), QMessageBox::Ok, this, Qt::Popup);