summaryrefslogtreecommitdiff
path: root/app/pebblefirmware.cpp
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2015-04-07 15:40:14 +0200
committerTomasz Sterna <tomek@xiaoka.com>2015-04-07 15:41:31 +0200
commitcbb0039fe542c0d8281601d25c04de487c84fa17 (patch)
tree73462a423ef875e77be3ca97b2939ad06b199854 /app/pebblefirmware.cpp
parent01dca8bb1697fce6a05ab6a613e8ceaca9d4bfec (diff)
Implemented checking for latest firmware version
Diffstat (limited to 'app/pebblefirmware.cpp')
-rw-r--r--app/pebblefirmware.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/app/pebblefirmware.cpp b/app/pebblefirmware.cpp
new file mode 100644
index 0000000..95294f7
--- /dev/null
+++ b/app/pebblefirmware.cpp
@@ -0,0 +1,59 @@
+#include "pebblefirmware.h"
+#include <QJsonDocument>
+#include <QStandardPaths>
+#include <QDir>
+#include <QFile>
+#include <QFileInfo>
+
+const QString PebbleFirmware::firmwareURL("http://pebblefw.s3.amazonaws.com/pebble/%1/%2/latest.json");
+
+PebbleFirmware::PebbleFirmware(QObject *parent) :
+ QObject(parent), nm(new QNetworkAccessManager(this))
+{
+ connect(nm, SIGNAL(finished(QNetworkReply*)), SLOT(onNetworkReplyFinished(QNetworkReply*)));
+}
+
+void PebbleFirmware::updateLatest(QString hw)
+{
+ QNetworkRequest req;
+ req.setUrl(firmwareURL.arg(hw).arg("release-v2"));
+ req.setRawHeader("Cache-Control", "no-cache");
+ nm->get(req);
+}
+
+void PebbleFirmware::fetchFirmware(QString type)
+{
+ QNetworkRequest req;
+ req.setUrl(_latest.value(type).toObject().value("url").toString());
+ req.setRawHeader("Cache-Control", "no-cache");
+ nm->get(req);
+}
+
+void PebbleFirmware::onNetworkReplyFinished(QNetworkReply* rep)
+{
+ qDebug() << "Download finished" << rep->url();
+
+ if (rep->request().url().toString().endsWith("/latest.json")) {
+ QJsonDocument jsonResponse = QJsonDocument::fromJson(rep->readAll());
+ QJsonObject jsonObject = jsonResponse.object();
+ if (!jsonObject.isEmpty()) {
+ qDebug() << "Latest firmware" << jsonObject;
+ _latest = jsonObject.value("normal").toObject();
+ emit latestChanged();
+ }
+ } else if (rep->url().toString().endsWith(".pbz")) {
+ QDir downDir(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation));
+ QFileInfo name(rep->url().toLocalFile());
+ QFile file(downDir.absoluteFilePath(name.fileName()));
+ file.open(QIODevice::WriteOnly|QIODevice::Truncate);
+ if (file.write(rep->readAll()) == -1) {
+ qWarning() << "Error writing" << file.fileName() << file.errorString();
+ } else {
+ file.close();
+ qDebug() << "Downloaded" << file.fileName();
+ emit firmwareFetched(file.fileName());
+ }
+ } else {
+ qWarning() << "Unrequested download" << rep->request().url();
+ }
+}