1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#ifndef UPLOADMANAGER_H
#define UPLOADMANAGER_H
#include <functional>
#include <QQueue>
#include "watchconnection.h"
class UploadManager : public QObject
{
Q_OBJECT
public:
explicit UploadManager(WatchConnection *watch, QObject *parent = 0);
typedef std::function<void()> SuccessCallback;
typedef std::function<void(int)> ErrorCallback;
typedef std::function<void(qreal)> ProgressCallback;
uint upload(WatchConnection::UploadType type, int index, quint32 appInstallId, const QString &filename, int size = -1, quint32 crc = 0,
SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadAppBinary(quint32 appInstallId, const QString &filename, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadAppResources(quint32 appInstallId, const QString &filename, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadAppWorker(quint32 appInstallId, const QString &filename, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadFirmwareBinary(bool recovery, const QString &filename, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadFirmwareResources(const QString &filename, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
uint uploadFile(const QString &filename, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback());
void cancel(uint id, int code = 0);
signals:
private:
enum State {
StateNotStarted,
StateWaitForToken,
StateInProgress,
StateCommit,
StateComplete
};
struct PendingUpload {
uint id;
WatchConnection::UploadType type;
int index = -1;
QString filename;
quint32 appInstallId;
QIODevice *device;
int size;
int remaining;
quint32 crc;
SuccessCallback successCallback;
ErrorCallback errorCallback;
ProgressCallback progressCallback;
};
enum PutBytesCommand {
PutBytesCommandInit = 1,
PutBytesCommandSend = 2,
PutBytesCommandCommit = 3,
PutBytesCommandAbort = 4,
PutBytesCommandComplete = 5
};
void startNextUpload();
bool uploadNextChunk(PendingUpload &upload);
bool commit(PendingUpload &upload);
bool complete(PendingUpload &upload);
private slots:
void handlePutBytesMessage(const QByteArray &msg);
private:
WatchConnection *m_connection;
QQueue<PendingUpload> _pending;
uint _lastUploadId;
State _state;
quint32 _token;
};
#endif // UPLOADMANAGER_H
|