summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2015-11-28 23:49:17 +0100
committerAndrew Branson <andrew.branson@cern.ch>2015-11-28 23:49:17 +0100
commit05011ecce5da659f36a0abea79f1a96d24703801 (patch)
treefe1d26aa5b4be45d13b2db5259d52ad590cfaa6b
parent625962e90a0646f48e13fff5e2f88f781c5dd9b5 (diff)
Support Pebble apps with workers
Separate upload for 'worker' binaries. Split binary upload type into firmware, application and worker, as the 'type' field states 'worker' for applications with worker binaries. Fixes #34
-rw-r--r--daemon/bankmanager.cpp19
-rw-r--r--daemon/bundle.cpp20
-rw-r--r--daemon/bundle.h4
-rw-r--r--daemon/manager.cpp6
-rw-r--r--daemon/uploadmanager.cpp5
-rw-r--r--daemon/uploadmanager.h1
6 files changed, 45 insertions, 10 deletions
diff --git a/daemon/bankmanager.cpp b/daemon/bankmanager.cpp
index ef74ef6..797d7e3 100644
--- a/daemon/bankmanager.cpp
+++ b/daemon/bankmanager.cpp
@@ -80,7 +80,7 @@ bool BankManager::uploadApp(const QUuid &uuid, int slot)
qCDebug(l) << "about to install app" << info.shortName() << "into slot" << slot;
- QSharedPointer<QIODevice> binaryFile(info.openFile(AppInfo::BINARY));
+ QSharedPointer<QIODevice> binaryFile(info.openFile(AppInfo::APPLICATION));
if (!binaryFile) {
qCWarning(l) << "failed to open" << info.shortName() << "AppInfo::BINARY";
return false;
@@ -93,11 +93,26 @@ bool BankManager::uploadApp(const QUuid &uuid, int slot)
_slots[slot].name.clear();
_slots[slot].uuid = QUuid();
- upload->uploadAppBinary(slot, binaryFile.data(), info.crcFile(AppInfo::BINARY),
+ upload->uploadAppBinary(slot, binaryFile.data(), info.crcFile(AppInfo::APPLICATION),
[this, info, binaryFile, slot]() {
qCDebug(l) << "app binary upload succesful";
binaryFile->close();
+ // Upload worker if present
+ if (info.type() == "worker") {
+ QSharedPointer<QIODevice> workerFile(info.openFile(AppInfo::WORKER));
+ if (workerFile) {
+ upload->uploadAppWorker(slot, workerFile.data(), info.crcFile(AppInfo::WORKER),
+ [this, workerFile, slot]() {
+ qCDebug(l) << "app worker upload succesful";
+ workerFile->close();
+ }, [this, workerFile](int code) {
+ workerFile->close();
+ qCWarning(l) << "app worker upload failed" << code;
+ });
+ }
+ }
+
// Proceed to upload the resource file
QSharedPointer<QIODevice> resourceFile(info.openFile(AppInfo::RESOURCES));
if (resourceFile) {
diff --git a/daemon/bundle.cpp b/daemon/bundle.cpp
index 63400b5..2b8de11 100644
--- a/daemon/bundle.cpp
+++ b/daemon/bundle.cpp
@@ -93,8 +93,14 @@ QIODevice *Bundle::openFile(enum Bundle::File file, QIODevice::OpenMode mode) co
case Bundle::APPJS:
fileName = "pebble-js-app.js";
break;
- case Bundle::BINARY:
- fileName = b->manifest.value(type()).toObject().value("name").toString();
+ case Bundle::FIRMWARE:
+ fileName = b->manifest.value("firmware").toObject().value("name").toString();
+ break;
+ case Bundle::APPLICATION:
+ fileName = b->manifest.value("application").toObject().value("name").toString();
+ break;
+ case Bundle::WORKER:
+ fileName = b->manifest.value("worker").toObject().value("name").toString();
break;
case Bundle::RESOURCES:
fileName = b->manifest.value("resources").toObject().value("name").toString();
@@ -133,12 +139,18 @@ quint32 Bundle::crcFile(enum Bundle::File file) const
quint32 ret = 0;
switch (file) {
- case Bundle::BINARY:
- ret = b->manifest.value(type()).toObject().value("crc").toDouble();
+ case Bundle::FIRMWARE:
+ ret = b->manifest.value("firmware").toObject().value("crc").toDouble();
break;
case Bundle::RESOURCES:
ret = b->manifest.value("resources").toObject().value("crc").toDouble();
break;
+ case Bundle::APPLICATION:
+ ret = b->manifest.value("application").toObject().value("crc").toDouble();
+ break;
+ case Bundle::WORKER:
+ ret = b->manifest.value("worker").toObject().value("crc").toDouble();
+ break;
default:
qCWarning(l) << "Unsupported CRC for" << file;
}
diff --git a/daemon/bundle.h b/daemon/bundle.h
index 1b77c94..cb47cbf 100644
--- a/daemon/bundle.h
+++ b/daemon/bundle.h
@@ -18,7 +18,9 @@ public:
enum File {
MANIFEST,
INFO,
- BINARY,
+ FIRMWARE,
+ APPLICATION,
+ WORKER,
RESOURCES,
APPJS
};
diff --git a/daemon/manager.cpp b/daemon/manager.cpp
index b02264e..37625e3 100644
--- a/daemon/manager.cpp
+++ b/daemon/manager.cpp
@@ -343,7 +343,7 @@ bool Manager::uploadFirmware(bool recovery, const QString &file)
return false;
}
- if (!bundle.fileExists(Bundle::BINARY) || !bundle.fileExists(Bundle::RESOURCES)) {
+ if (!bundle.fileExists(Bundle::FIRMWARE) || !bundle.fileExists(Bundle::RESOURCES)) {
qCWarning(l) << file << "is missing binary or resource";
return false;
}
@@ -364,9 +364,9 @@ bool Manager::uploadFirmware(bool recovery, const QString &file)
qCDebug(l) << "firmware resource upload succesful";
resourceFile->close();
// Proceed to upload the resource file
- QSharedPointer<QIODevice> binaryFile(bundle.openFile(Bundle::BINARY));
+ QSharedPointer<QIODevice> binaryFile(bundle.openFile(Bundle::FIRMWARE));
if (binaryFile) {
- upload->uploadFirmwareBinary(recovery, binaryFile.data(), bundle.crcFile(Bundle::BINARY),
+ upload->uploadFirmwareBinary(recovery, binaryFile.data(), bundle.crcFile(Bundle::FIRMWARE),
[this, binaryFile]() {
binaryFile->close();
qCDebug(l) << "firmware binary upload succesful";
diff --git a/daemon/uploadmanager.cpp b/daemon/uploadmanager.cpp
index 0751713..cfca8e5 100644
--- a/daemon/uploadmanager.cpp
+++ b/daemon/uploadmanager.cpp
@@ -67,6 +67,11 @@ uint UploadManager::uploadAppResources(int slot, QIODevice *device, quint32 crc,
return upload(WatchConnector::uploadRESOURCES, slot, QString(), device, -1, crc, successCallback, errorCallback, progressCallback);
}
+uint UploadManager::uploadAppWorker(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback)
+{
+ return upload(WatchConnector::uploadWORKER, slot, QString(), device, -1, crc, successCallback, errorCallback, progressCallback);
+}
+
uint UploadManager::uploadFile(const QString &filename, QIODevice *device, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback)
{
Q_ASSERT(!filename.isEmpty());
diff --git a/daemon/uploadmanager.h b/daemon/uploadmanager.h
index 316f55d..85c5b3b 100644
--- a/daemon/uploadmanager.h
+++ b/daemon/uploadmanager.h
@@ -22,6 +22,7 @@ public:
uint uploadAppBinary(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadAppResources(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
+ uint uploadAppWorker(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadFile(const QString &filename, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadFirmwareBinary(bool recovery, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadFirmwareResources(QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());