1 #include "selectremotedlg.h"
10 #include <QListWidgetItem>
12 #include <QtNetwork/QNetworkAccessManager>
13 #include <QtNetwork/QNetworkReply>
19 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
22 this->setWindowTitle(tr("Select remote"));
24 deviceNameMap = new QMap<QString, QString>();
27 mfgNetAM = new QNetworkAccessManager(this);
28 connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)),
29 this, SLOT(mfgListDownloadFinished(QNetworkReply*)));
31 modelNetAM = new QNetworkAccessManager(this);
32 connect(modelNetAM, SIGNAL(finished(QNetworkReply*)),
33 this, SLOT(modelListDownloadFinished(QNetworkReply*)));
35 remoteNetAM = new QNetworkAccessManager(this);
36 connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
37 this, SLOT(remoteDownloadFinished(QNetworkReply*)));
39 settings = new QSettings(this);
41 layout = new QHBoxLayout(this);
43 alphabetList = new QListWidget(this);
44 for (char c = 'a'; c <= 'z'; ++c)
46 alphabetList->addItem(QString(c));
48 layout->addWidget(alphabetList);
49 connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
50 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
52 mfgList = new QListWidget(this);
53 layout->addWidget(mfgList);
54 connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
55 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
57 modelList = new QListWidget(this);
58 layout->addWidget(modelList);
59 connect(modelList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
60 this, SLOT(modelItemChanged(QListWidgetItem*, QListWidgetItem*)));
62 this->setLayout(layout);
65 SelectRemoteDlg::~SelectRemoteDlg()
81 void SelectRemoteDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
83 nam->get(QNetworkRequest(QUrl(url)));
86 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
87 QListWidgetItem *previous)
89 QString url = settings->value("remoteUrl",
90 "http://mercury.wipsl.com/irwi/remotes/").toString() +
91 current->text() + ".txt";
92 beginDownload(url, mfgNetAM);
95 void SelectRemoteDlg::mfgListDownloadFinished(QNetworkReply *reply)
98 if (reply->error() == QNetworkReply::NoError) {
99 QByteArray ba = reply->readAll();
100 QBuffer buf(&ba, this);
101 buf.open(QIODevice::ReadOnly);
103 while (buf.canReadLine())
105 QString str(buf.readLine());
107 mfgList->addItem(str);
110 //qDebug() << (int)reply->error();
113 reply->deleteLater();
116 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
118 if (mfgList->currentItem() != NULL) {
119 QString url = settings->value(
120 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
121 + alphabetList->currentItem()->text()
122 + "/" + current->text() + ".txt";
123 beginDownload(url, modelNetAM);
127 void SelectRemoteDlg::modelListDownloadFinished(QNetworkReply *reply)
130 if (reply->error() == QNetworkReply::NoError) {
131 QByteArray ba = reply->readAll();
132 QBuffer buf(&ba, this);
133 buf.open(QIODevice::ReadOnly);
135 deviceNameMap->clear();
136 while (buf.canReadLine())
138 QString str(buf.readLine());
140 QStringList strlist = str.split(":");
141 if (strlist.count() == 2) {
142 modelList->addItem(strlist[1]);
143 deviceNameMap->insert(strlist[1], strlist[0]);
147 //qDebug() << (int)reply->error();
150 reply->deleteLater();
153 void SelectRemoteDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
157 if (!current->text().isEmpty()) {
158 QString url = settings->value(
160 "http://mercury.wipsl.com/irwi/remotes/").toString()
161 + alphabetList->currentItem()->text()
162 + "/" + mfgList->currentItem()->text()
163 + "/" + (*deviceNameMap)[current->text()];
164 beginDownload(url, remoteNetAM);
165 settings->setValue("remoteName", current->text());
170 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
172 if (reply->error() == QNetworkReply::NoError) {
173 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
174 if(file.open(QIODevice::WriteOnly))
176 file.write(reply->readAll());
181 reply->deleteLater();
183 std::system("lircctl restart");
185 QMessageBox mbox(NULL, tr("Success"), tr("Remote downloaded"), QMessageBox::Ok, this, Qt:Popup);