summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--daemon/bankmanager.cpp24
-rw-r--r--daemon/packer.cpp6
-rw-r--r--daemon/packer.h2
-rw-r--r--daemon/uploadmanager.cpp26
-rw-r--r--daemon/uploadmanager.h14
-rw-r--r--log4qt-debug.conf2
6 files changed, 65 insertions, 9 deletions
diff --git a/daemon/bankmanager.cpp b/daemon/bankmanager.cpp
index 331dd6a..dd278af 100644
--- a/daemon/bankmanager.cpp
+++ b/daemon/bankmanager.cpp
@@ -4,6 +4,26 @@
#include "packer.h"
#include "bankmanager.h"
+#if 0
+// TODO -- This is how language files seems to be installed.
+if (slot == -4) {
+ logger()->debug() << "starting lang install";
+ QFile *pbl = new QFile(QDir::home().absoluteFilePath("es.pbl"));
+ if (!pbl->open(QIODevice::ReadOnly)) {
+ logger()->warn() << "Failed to open pbl";
+ return false;
+ }
+
+ upload->uploadFile("lang", pbl, [this]() {
+ logger()->debug() << "success";
+ }, [this](int code) {
+ logger()->warn() << "Some error" << code;
+ });
+
+ return true;
+}
+#endif
+
BankManager::BankManager(WatchConnector *watch, UploadManager *upload, AppManager *apps, QObject *parent) :
QObject(parent), watch(watch), upload(upload), apps(apps), _refresh(new QTimer(this))
{
@@ -82,14 +102,14 @@ bool BankManager::uploadApp(const QUuid &uuid, int slot)
_slots[slot].name.clear();
_slots[slot].uuid = QUuid();
- upload->upload(WatchConnector::uploadBINARY, slot, binaryFile, -1,
+ upload->uploadAppBinary(slot, binaryFile,
[this, binaryFile, resourceFile, slot]() {
logger()->debug() << "app binary upload succesful";
delete binaryFile;
// Proceed to upload the resource file
if (resourceFile) {
- upload->upload(WatchConnector::uploadRESOURCES, slot, resourceFile, -1,
+ upload->uploadAppResources(slot, resourceFile,
[this, resourceFile, slot]() {
logger()->debug() << "app resources upload succesful";
delete resourceFile;
diff --git a/daemon/packer.cpp b/daemon/packer.cpp
index 0cc71f6..00d5383 100644
--- a/daemon/packer.cpp
+++ b/daemon/packer.cpp
@@ -14,6 +14,12 @@ void Packer::writeBytes(int n, const QByteArray &b)
}
}
+void Packer::writeCString(const QString &s)
+{
+ _buf->append(s.toUtf8());
+ _buf->append('\0');
+}
+
void Packer::writeUuid(const QUuid &uuid)
{
writeBytes(16, uuid.toRfc4122());
diff --git a/daemon/packer.h b/daemon/packer.h
index d22072c..ceb6593 100644
--- a/daemon/packer.h
+++ b/daemon/packer.h
@@ -25,6 +25,8 @@ public:
void writeFixedString(int n, const QString &s);
+ void writeCString(const QString &s);
+
void writeUuid(const QUuid &uuid);
void writeDict(const QMap<int, QVariant> &d);
diff --git a/daemon/uploadmanager.cpp b/daemon/uploadmanager.cpp
index ccbf12a..29c436e 100644
--- a/daemon/uploadmanager.cpp
+++ b/daemon/uploadmanager.cpp
@@ -20,13 +20,14 @@ UploadManager::UploadManager(WatchConnector *watch, QObject *parent) :
});
}
-uint UploadManager::upload(WatchConnector::UploadType type, int index, QIODevice *device, int size,
- function<void()> successCallback, function<void(int)> errorCallback)
+uint UploadManager::upload(WatchConnector::UploadType type, int index, const QString &filename, QIODevice *device, int size,
+ SuccessCallback successCallback, ErrorCallback errorCallback)
{
PendingUpload upload;
upload.id = ++_lastUploadId;
upload.type = type;
upload.index = index;
+ upload.filename = filename;
upload.device = device;
if (size < 0) {
upload.remaining = device->size();
@@ -53,6 +54,22 @@ uint UploadManager::upload(WatchConnector::UploadType type, int index, QIODevice
return upload.id;
}
+uint UploadManager::uploadAppBinary(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback)
+{
+ return upload(WatchConnector::uploadBINARY, slot, QString(), device, -1, successCallback, errorCallback);
+}
+
+uint UploadManager::uploadAppResources(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback)
+{
+ return upload(WatchConnector::uploadRESOURCES, slot, QString(), device, -1, successCallback, errorCallback);
+}
+
+uint UploadManager::uploadFile(const QString &filename, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback)
+{
+ Q_ASSERT(!filename.isEmpty());
+ return upload(WatchConnector::uploadFILE, 0, filename, device, -1, successCallback, errorCallback);
+}
+
void UploadManager::cancel(uint id, int code)
{
if (_pending.empty()) {
@@ -112,6 +129,11 @@ void UploadManager::startNextUpload()
p.write<quint32>(upload.remaining);
p.write<quint8>(upload.type);
p.write<quint8>(upload.index);
+ if (!upload.filename.isEmpty()) {
+ p.writeCString(upload.filename);
+ }
+
+ logger()->debug() << "starting new upload, size:" << upload.remaining << ", type:" << upload.type << ", slot:" << upload.index;
_state = StateWaitForToken;
watch->sendMessage(WatchConnector::watchPUTBYTES, msg);
diff --git a/daemon/uploadmanager.h b/daemon/uploadmanager.h
index 1d42237..b4e951a 100644
--- a/daemon/uploadmanager.h
+++ b/daemon/uploadmanager.h
@@ -14,11 +14,16 @@ class UploadManager : public QObject
public:
explicit UploadManager(WatchConnector *watch, QObject *parent = 0);
- typedef std::function<void()> Callback;
+ typedef std::function<void()> SuccessCallback;
+ typedef std::function<void(int)> ErrorCallback;
+
+ uint upload(WatchConnector::UploadType type, int index, const QString &filename, QIODevice *device, int size = -1,
+ SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback());
+
+ uint uploadAppBinary(int slot, QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback());
+ uint uploadAppResources(int slot, QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback());
+ uint uploadFile(const QString &filename, QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback());
- uint upload(WatchConnector::UploadType type, int index, QIODevice *device, int size = -1,
- std::function<void()> successCallback = std::function<void()>(),
- std::function<void(int)> errorCallback = std::function<void(int)>());
void cancel(uint id, int code = 0);
signals:
@@ -40,6 +45,7 @@ private:
WatchConnector::UploadType type;
int index;
+ QString filename;
QIODevice *device;
int remaining;
Stm32Crc crc;
diff --git a/log4qt-debug.conf b/log4qt-debug.conf
index 2d55cdc..1baed5d 100644
--- a/log4qt-debug.conf
+++ b/log4qt-debug.conf
@@ -1,4 +1,4 @@
-log4j.rootLogger=DEBUG, consolelog, syslog
+log4j.rootLogger=TRACE, consolelog, syslog
log4j.appender.consolelog=org.apache.log4j.ColorConsoleAppender
log4j.appender.consolelog.layout=org.apache.log4j.SimpleTimeLayout