More implementation
[irwi] / src / remote.cpp
1 #include "remote.h"
2
3 #include <cstdlib>
4
5 #include <QString>
6 #include <QSettings>
7 #include <QFile>
8 #include <QNetworkAccessManager>
9 #include <QNetworkRequest>
10 #include <QNetworkReply>
11 #include <QUrl>
12
13 Remote::Remote(const Remote::QString &name)
14     : m_name(name)
15 {
16     init();
17     updateInfo();
18 }
19
20 Remote::Remote(const QString &name, const QString &mfg,
21         int rating, int voteCount)
22     : m_name(name), m_mfg(mfg),
23     m_rating(rating), m_voteCount(voteCount)
24 {
25     init();
26 }
27
28 void Remote::init()
29 {
30     connect(&m_remoteNAM, SIGNAL(finished(QNetworkReply*)),
31             this, SLOT(remoteDownloadFinished(QNetworkReply*)));
32     connect(&m_infoNAM, SIGNAL(finished(QNetworkReply*)),
33             this, SLOT(infoRequestFinished(QNetworkReply *reply)));
34 }
35
36 void Remote::saveToFile()
37 {
38     QSettings settings;
39     if (!m_name.isEmpty()) {
40         QString url = settings.value("remoteUrl", "http://mercury.wipsl.com/irwi/uploaded/").toString() + m_name;
41         m_remoteNAM.get(QNetworkRequest(QUrl(url)));
42         settings.setValue("remoteName", m_name);
43     }
44 }
45
46 void Remote::updateInfo()
47 {
48     QSettings settings;
49     if (!m_name.isEmpty()) {
50         QString url = settings.value("baseUrl", "http://mercury.wipsl.com/irwi/").toString() + "vote/get?name=" + m_name;
51         m_infoNAM.get(QNetworkRequest(QUrl(url)));
52     }
53 }
54
55 void Remote::sendRating(Rating::Rating r)
56 {
57     QSettings settings;
58     if (!m_name.isEmpty()) {
59         m_ratingNAM.get(QNetworkRequest(QUrl(
60               settings.value("baseUrl").toString() 
61                 + "vote/"
62                 + r == Rating::Up ? "up" : "down"
63                 + "?name=" 
64                 + m_name )));
65     }
66 }
67
68 void Remote::remoteDownloadFinished(QNetworkReply *reply)
69 {
70     if (reply->error() == QNetworkReply::NoError) {
71         QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
72         if(file.open(QIODevice::WriteOnly))
73         {
74             file.write(reply->readAll());
75             file.close();
76         }
77     }
78     reply->close();
79     reply->deleteLater();
80
81     std::system("sudo /etc/init.d/lirc reload");
82
83     //emit remoteDownloaded();
84 }
85
86 void Remote::infoRequestFinished(QNetworkReply *reply)
87 {
88     if (reply->error() == QNetworkReply::NoError) {
89         m_rating    = QString(reply->readline(20)).toInt();
90         m_voteCount = QString(reply->readline(20)).toInt();
91     }
92     reply->close();
93     reply->deleteLater();
94
95     emit infoUpdated();
96 }
97