#include "settingsdlg.h"
+#include <QDebug>
#include <QHBoxLayout>
#include <QLabel>
#include <QString>
#include <QtNetwork/QNetworkReply>
#include <QBuffer>
#include <QByteArray>
+#include <QFile>
SettingsDlg::SettingsDlg(QWidget *parent)
: QDialog(parent)
this->setWindowTitle(tr("Settings"));
//TODO caching?
- netAM = new QNetworkAccessManager(this);
+ mfgNetAM = new QNetworkAccessManager(this);
+ connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(mfgListDownloadFinished(QNetworkReply*)));
+
+ modelNetAM = new QNetworkAccessManager(this);
+ connect(modelNetAM, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(modelListDownloadFinished(QNetworkReply*)));
+
+ remoteNetAM = new QNetworkAccessManager(this);
+ connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(remoteDownloadFinished(QNetworkReply*)));
settings = new QSettings(this);
{
delete layout;
delete settings;
- delete netAM;
+ delete mfgNetAM;
+ delete modelNetAM;
+ delete remoteNetAM;
+}
+
+void SettingsDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
+{
+ nam->get(QNetworkRequest(QUrl(url)));
}
void SettingsDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
- QNetworkReply* reply = netAM->get(
- QNetworkRequest(
- QUrl(
- settings->value(
- "remoteUrl",
- "http://mercury.wipsl.com/irwi/remotes/"
- ).toString() + current->text() + ".txt"
- )
- )
- );
- connect(netAM, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(mfgListDownloadFinished(QNetworkReply*)));
+ QString url = settings->value("remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
+ + current->text() + ".txt";
+ beginDownload(url, mfgNetAM);
}
-#include <QDebug>
void SettingsDlg::mfgListDownloadFinished(QNetworkReply *reply)
{
mfgList->clear();
- QByteArray ba = reply->readAll();
- QBuffer buf(&ba, this);
- qDebug() << buf.canReadLine();
- while (buf.canReadLine())
- {
- QString str(buf.readLine());
- qDebug() << str;
- mfgList->addItem(str);
+ if (reply->error() == QNetworkReply::NoError) {
+ QByteArray ba = reply->readAll();
+ QBuffer buf(&ba, this);
+ buf.open(QIODevice::ReadOnly);
+ buf.seek(0);
+ while (buf.canReadLine())
+ {
+ QString str(buf.readLine());
+ str.chop(1);
+ mfgList->addItem(str);
+ }
+ } else {
+ //qDebug() << (int)reply->error();
}
+ reply->close();
reply->deleteLater();
}
void SettingsDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
+ if (mfgList->currentItem() != NULL) {
+ QString url = settings->value(
+ "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
+ + alphabetList->currentItem()->text()
+ + "/" + current->text() + ".txt";
+ beginDownload(url, modelNetAM);
+ }
+}
+
+void SettingsDlg::modelListDownloadFinished(QNetworkReply *reply)
+{
+ modelList->clear();
+ if (reply->error() == QNetworkReply::NoError) {
+ QByteArray ba = reply->readAll();
+ QBuffer buf(&ba, this);
+ buf.open(QIODevice::ReadOnly);
+ buf.seek(0);
+ while (buf.canReadLine())
+ {
+ QString str(buf.readLine());
+ str.chop(1);
+ modelList->addItem(str);
+ }
+ } else {
+ //qDebug() << (int)reply->error();
+ }
+ reply->close();
+ reply->deleteLater();
}
void SettingsDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
if (current)
{
- settings->setValue("remoteName", current->text());
- //TODO save remote from server to /etc/lircd.conf
- //maybe lirc needs restart after that?
+ if (!current->text().isEmpty()) {
+ QString url = settings->value(
+ "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
+ + alphabetList->currentItem()->text()
+ + "/" + mfgList->currentItem()->text()
+ + "/" + current->text();
+ beginDownload(url, remoteNetAM);
+ settings->setValue("remoteName", current->text());
+ }
}
}
+void SettingsDlg::remoteDownloadFinished(QNetworkReply *reply)
+{
+ if (reply->error() == QNetworkReply::NoError) {
+ QFile file("/etc/lircd.conf");
+ if(file.open(QIODevice::WriteOnly))
+ {
+ file.write(reply->readAll());
+ file.close();
+ }
+ }
+ reply->close();
+ reply->deleteLater();
+
+ system("lircctl restart");
+}
+