refactored download code
[irwi] / src / settingsdlg.cpp
index ea5cd29..ca5ef1d 100644 (file)
@@ -1,5 +1,6 @@
 #include "settingsdlg.h"
 
+#include <QDebug>
 #include <QHBoxLayout>
 #include <QLabel>
 #include <QString>
@@ -10,6 +11,7 @@
 #include <QtNetwork/QNetworkReply>
 #include <QBuffer>
 #include <QByteArray>
+#include <QFile>
 
 SettingsDlg::SettingsDlg(QWidget *parent)
     : QDialog(parent)
@@ -17,7 +19,17 @@ SettingsDlg::SettingsDlg(QWidget *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);
 
@@ -49,52 +61,105 @@ SettingsDlg::~SettingsDlg()
 {
     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");
+}
+