Added buffering
[irwi] / src / settingsdlg.cpp
1 #include "settingsdlg.h"
2
3 #include <QHBoxLayout>
4 #include <QLabel>
5 #include <QString>
6 #include <QListWidget>
7 #include <QListWidgetItem>
8 #include <QSettings>
9 #include <QtNetwork/QNetworkAccessManager>
10 #include <QtNetwork/QNetworkReply>
11 #include <QBuffer>
12
13 SettingsDlg::SettingsDlg(QWidget *parent)
14     : QDialog(parent)
15 {
16     this->setWindowTitle(tr("Settings"));
17
18     //TODO caching?
19     netAM = new QNetworkAccessManager(this);
20     
21     settings = new QSettings(this);
22
23     layout = new QHBoxLayout(this);
24
25     alphabetList = new QListWidget(this);
26     for (char c = 'a'; c <= 'z'; ++c)
27     {
28         alphabetList->addItem(QString(c));
29     }
30     layout->addWidget(alphabetList);
31     connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
32                 this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
33     
34     mfgList = new QListWidget(this);
35     layout->addWidget(mfgList);
36     connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
37                 this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
38
39     modelList = new QListWidget(this);
40     layout->addWidget(modelList);
41     connect(modelList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
42                 this, SLOT(modelItemChanged(QListWidgetItem*, QListWidgetItem*)));
43
44     this->setLayout(layout);
45 }
46
47 SettingsDlg::~SettingsDlg()
48 {
49     delete layout;
50     delete settings;
51     delete netAM;
52 }
53
54 void SettingsDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
55 {
56     QNetworkReply* reply = netAM->get(
57         QNetworkRequest(
58             QUrl(
59                 settings->value(
60                     "remoteUrl",
61                     "http://mercury.wipsl.com/irwi/remotes/"
62                 ).toString() + current->text() + ".txt"
63             )
64         )
65     );
66     connect(netAM, SIGNAL(finished(QNetworkReply*)), 
67             this,  SLOT(mfgListDownloadFinished(QNetworkReply*)));
68 }
69
70 void SettingsDlg::mfgListDownloadFinished(QNetworkReply *reply)
71 {
72     mfgList->clear();
73     QBuffer buf(reply->readAll());
74     while (buf->canReadLine())
75     {
76         mfgList->addItem(QString(buf->readLine()));
77     }
78     reply->deleteLater();
79 }
80
81 void SettingsDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
82 {
83 }
84
85 void SettingsDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
86 {
87     if (current)
88     {
89         settings->setValue("remoteName", current->text());
90         //TODO save remote from server to /etc/lircd.conf
91         //maybe lirc needs restart after that?
92     }
93 }
94