asdf, more stuff to settings
[irwi] / src / settingsdlg.cpp
1 #include "settingsdlg.h"
2
3 #include <QDebug>
4 #include <QHBoxLayout>
5 #include <QLabel>
6 #include <QString>
7 #include <QListWidget>
8 #include <QListWidgetItem>
9 #include <QSettings>
10 #include <QtNetwork/QNetworkAccessManager>
11 #include <QtNetwork/QNetworkReply>
12 #include <QBuffer>
13 #include <QByteArray>
14 #include <QFile>
15
16 SettingsDlg::SettingsDlg(QWidget *parent)
17     : QDialog(parent)
18 {
19     this->setWindowTitle(tr("Settings"));
20
21     //TODO caching?
22     mfgNetAM = new QNetworkAccessManager(this);
23     connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)), 
24             this,  SLOT(mfgListDownloadFinished(QNetworkReply*)));
25
26     modelNetAM = new QNetworkAccessManager(this);
27     connect(modelNetAM, SIGNAL(finished(QNetworkReply*)), 
28             this,  SLOT(modelListDownloadFinished(QNetworkReply*)));
29
30     remoteNetAM = new QNetworkAccessManager(this);
31     connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)), 
32             this,  SLOT(remoteDownloadFinished(QNetworkReply*)));
33     
34     settings = new QSettings(this);
35
36     layout = new QHBoxLayout(this);
37
38     alphabetList = new QListWidget(this);
39     for (char c = 'a'; c <= 'z'; ++c)
40     {
41         alphabetList->addItem(QString(c));
42     }
43     layout->addWidget(alphabetList);
44     connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
45                 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
46     
47     mfgList = new QListWidget(this);
48     layout->addWidget(mfgList);
49     connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
50                 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
51
52     modelList = new QListWidget(this);
53     layout->addWidget(modelList);
54     connect(modelList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
55                 this, SLOT(modelItemChanged(QListWidgetItem*, QListWidgetItem*)));
56
57     this->setLayout(layout);
58 }
59
60 SettingsDlg::~SettingsDlg()
61 {
62     delete layout;
63     delete settings;
64     delete mfgNetAM;
65     delete modelNetAM;
66 }
67
68 void SettingsDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
69 {
70     mfgNetAM->get(
71         QNetworkRequest(
72             QUrl(
73                 settings->value(
74                     "remoteUrl",
75                     "http://mercury.wipsl.com/irwi/remotes/"
76                 ).toString() 
77                 + current->text() + ".txt"
78             )
79         )
80     );
81 }
82
83 void SettingsDlg::mfgListDownloadFinished(QNetworkReply *reply)
84 {
85     mfgList->clear();
86     if (reply->error() == QNetworkReply::NoError) {
87         QByteArray ba = reply->readAll();
88         QBuffer buf(&ba, this);
89         buf.open(QIODevice::ReadOnly);
90         buf.seek(0);
91         while (buf.canReadLine())
92         {
93             QString str(buf.readLine());
94             str.chop(1);
95             mfgList->addItem(str);
96         }
97     } else {
98         //qDebug() << (int)reply->error();
99     }
100     reply->close();
101     reply->deleteLater();
102 }
103
104 void SettingsDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
105 {
106     if (mfgList->currentItem() != NULL) {
107         modelNetAM->get(
108             QNetworkRequest(
109                 QUrl(
110                     settings->value(
111                         "remoteUrl",
112                         "http://mercury.wipsl.com/irwi/remotes/"
113                     ).toString() 
114                     + alphabetList->currentItem()->text()
115                     + "/" + current->text() + ".txt"
116                 )
117             )
118         );
119     }
120 }
121
122 void SettingsDlg::modelListDownloadFinished(QNetworkReply *reply)
123 {
124     modelList->clear();
125     if (reply->error() == QNetworkReply::NoError) {
126         QByteArray ba = reply->readAll();
127         QBuffer buf(&ba, this);
128         buf.open(QIODevice::ReadOnly);
129         buf.seek(0);
130         while (buf.canReadLine())
131         {
132             QString str(buf.readLine());
133             str.chop(1);
134             modelList->addItem(str);
135         }
136     } else {
137         //qDebug() << (int)reply->error();
138     }
139     reply->close();
140     reply->deleteLater();
141 }
142
143 void SettingsDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
144 {
145     if (current)
146     {
147         if (!current->text().isEmpty()) {
148              remoteNetAM->get(
149                 QNetworkRequest(
150                     QUrl(
151                         settings->value(
152                             "remoteUrl",
153                             "http://mercury.wipsl.com/irwi/remotes/"
154                         ).toString() 
155                         + alphabetList->currentItem()->text()
156                         + "/" + mfgList->currentItem->text()
157                         + "/" + current->text()
158                     )
159                 )
160             );
161             settings->setValue("remoteName", current->text());
162         }
163     }
164 }
165
166 void SettingsDlg::remoteDownloadFinished(QNetworkReply *reply)
167 {
168     if (reply->error() == QNetworkReply::NoError) {
169         QFile file("/etc/lircd.conf");
170         if(file.open(QIODevice::WriteOnly))
171         {
172             file.write(reply->readAll());
173             file.close();
174         }
175     }
176     reply->close();
177     reply->deleteLater();
178
179     system("lircctl restart");
180 }
181