From cbb0039fe542c0d8281601d25c04de487c84fa17 Mon Sep 17 00:00:00 2001 From: Tomasz Sterna Date: Tue, 7 Apr 2015 15:40:14 +0200 Subject: Implemented checking for latest firmware version --- app/pebblefirmware.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 app/pebblefirmware.cpp (limited to 'app/pebblefirmware.cpp') 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 +#include +#include +#include +#include + +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(); + } +} -- cgit v1.2.3