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::beginDownload(const QString &url, QNetworkAccessManager *nam)
84 nam->get(QNetworkRequest(QUrl(url)));
87 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
88 QListWidgetItem * /*previous*/)
90 QString url = settings->value("remoteUrl",
91 "http://mercury.wipsl.com/irwi/remotes/").toString() +
92 current->text() + ".txt";
93 beginDownload(url, mfgNetAM);
96 void SelectRemoteDlg::mfgListDownloadFinished(QNetworkReply *reply)
99 if (reply->error() == QNetworkReply::NoError) {
100 QByteArray ba = reply->readAll();
101 QBuffer buf(&ba, this);
102 buf.open(QIODevice::ReadOnly);
104 while (buf.canReadLine())
106 QString str(buf.readLine());
108 mfgList->addItem(str);
111 //qDebug() << (int)reply->error();
114 reply->deleteLater();
117 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
118 QListWidgetItem * /*previous*/)
120 if (mfgList->currentItem() != NULL) {
121 QString url = settings->value(
122 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
123 + alphabetList->currentItem()->text()
124 + "/" + current->text() + ".txt";
125 beginDownload(url, modelNetAM);
129 void SelectRemoteDlg::modelListDownloadFinished(QNetworkReply *reply)
132 if (reply->error() == QNetworkReply::NoError) {
133 QByteArray ba = reply->readAll();
134 QBuffer buf(&ba, this);
135 buf.open(QIODevice::ReadOnly);
137 deviceNameMap->clear();
138 while (buf.canReadLine())
140 QString str(buf.readLine());
142 QStringList strlist = str.split(":");
143 if (strlist.count() == 2) {
144 modelList->addItem(strlist[1]);
145 deviceNameMap->insert(strlist[1], strlist[0]);
149 //qDebug() << (int)reply->error();
152 reply->deleteLater();
155 void SelectRemoteDlg::modelItemChanged(QListWidgetItem *current,
156 QListWidgetItem * /*previous*/)
160 if (!current->text().isEmpty()) {
161 QString url = settings->value(
163 "http://mercury.wipsl.com/irwi/remotes/").toString()
164 + alphabetList->currentItem()->text()
165 + "/" + mfgList->currentItem()->text()
166 + "/" + (*deviceNameMap)[current->text()];
167 beginDownload(url, remoteNetAM);
168 settings->setValue("remoteName", current->text());
173 void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
175 if (reply->error() == QNetworkReply::NoError) {
176 QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
177 if(file.open(QIODevice::WriteOnly))
179 file.write(reply->readAll());
184 reply->deleteLater();
186 std::system("lircctl restart");
188 QMessageBox mbox(QMessageBox::Information, tr("Success"),
189 tr("Remote downloaded"), QMessageBox::Ok, this, Qt::Popup);