diff options
| author | Javier <dev.git@javispedro.com> | 2014-12-07 23:39:29 +0100 |
|---|---|---|
| committer | Javier <dev.git@javispedro.com> | 2014-12-07 23:39:29 +0100 |
| commit | a60c1cb3c4afd6dfd305115ec4c52e993172fa7d (patch) | |
| tree | 1a12cfaed45b923ed511de388d556ccc705c9e6a /daemon/uploadmanager.h | |
| parent | 49c20eb7e2933ae6e9e4337fc0fe9b49a39efde8 (diff) | |
ability to upload apps
Diffstat (limited to 'daemon/uploadmanager.h')
| -rw-r--r-- | daemon/uploadmanager.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/daemon/uploadmanager.h b/daemon/uploadmanager.h new file mode 100644 index 0000000..1d42237 --- /dev/null +++ b/daemon/uploadmanager.h @@ -0,0 +1,65 @@ +#ifndef UPLOADMANAGER_H +#define UPLOADMANAGER_H + +#include <functional> +#include <QQueue> +#include "watchconnector.h" +#include "stm32crc.h" + +class UploadManager : public QObject +{ + Q_OBJECT + LOG4QT_DECLARE_QCLASS_LOGGER + +public: + explicit UploadManager(WatchConnector *watch, QObject *parent = 0); + + typedef std::function<void()> Callback; + + 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: + +public slots: + + +private: + enum State { + StateNotStarted, + StateWaitForToken, + StateInProgress, + StateCommit, + StateComplete + }; + + struct PendingUpload { + uint id; + + WatchConnector::UploadType type; + int index; + QIODevice *device; + int remaining; + Stm32Crc crc; + + std::function<void()> successCallback; + std::function<void(int)> errorCallback; + }; + + void startNextUpload(); + void handleMessage(const QByteArray &msg); + bool uploadNextChunk(PendingUpload &upload); + bool commit(PendingUpload &upload); + bool complete(PendingUpload &upload); + +private: + WatchConnector *watch; + QQueue<PendingUpload> _pending; + uint _lastUploadId; + State _state; + quint32 _token; +}; + +#endif // UPLOADMANAGER_H |
