1 #include "settingsdlg.h"
10 #include <QListWidgetItem>
12 #include <QtNetwork/QNetworkAccessManager>
13 #include <QtNetwork/QNetworkReply>
19 SettingsDlg::SettingsDlg(QWidget *parent)
22 this->setWindowTitle(tr("Settings"));
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 SettingsDlg::~SettingsDlg()
75 void SettingsDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
77 nam->get(QNetworkRequest(QUrl(url)));
80 void SettingsDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
82 QString url = settings->value("remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
83 + current->text() + ".txt";
84 beginDownload(url, mfgNetAM);
87 void SettingsDlg::mfgListDownloadFinished(QNetworkReply *reply)
90 if (reply->error() == QNetworkReply::NoError) {
91 QByteArray ba = reply->readAll();
92 QBuffer buf(&ba, this);
93 buf.open(QIODevice::ReadOnly);
95 while (buf.canReadLine())
97 QString str(buf.readLine());
99 mfgList->addItem(str);
102 //qDebug() << (int)reply->error();
105 reply->deleteLater();
108 void SettingsDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
110 if (mfgList->currentItem() != NULL) {
111 QString url = settings->value(
112 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
113 + alphabetList->currentItem()->text()
114 + "/" + current->text() + ".txt";
115 beginDownload(url, modelNetAM);
119 void SettingsDlg::modelListDownloadFinished(QNetworkReply *reply)
122 if (reply->error() == QNetworkReply::NoError) {
123 QByteArray ba = reply->readAll();
124 QBuffer buf(&ba, this);
125 buf.open(QIODevice::ReadOnly);
127 deviceNameMap->clear();
128 while (buf.canReadLine())
130 QString str(buf.readLine());
132 QStringList strlist = str.split(":");
133 if (strlist.count() == 2) {
134 modelList->addItem(strlist[1]);
135 deviceNameMap->insert(strlist[1], strlist[0]);
139 //qDebug() << (int)reply->error();
142 reply->deleteLater();
145 void SettingsDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
149 if (!current->text().isEmpty()) {
150 QString url = settings->value(
151 "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
152 + alphabetList->currentItem()->text()
153 + "/" + mfgList->currentItem()->text()
154 + "/" + (*deviceNameMap)[current->text()];
155 beginDownload(url, remoteNetAM);
156 settings->setValue("remoteName", current->text());
161 void SettingsDlg::remoteDownloadFinished(QNetworkReply *reply)
163 if (reply->error() == QNetworkReply::NoError) {
164 QFile file("/etc/lircd.conf");
165 if(file.open(QIODevice::WriteOnly))
167 file.write(reply->readAll());
172 reply->deleteLater();
174 std::system("lircctl restart");