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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#pragma once
#include <QByteArray>
#include <net/NetJob.h>
namespace GoUpdate
{
/**
* A temporary object exchanged between updated checker and the actual update task
*/
struct Status
{
bool updateAvailable = false;
int newVersionId = -1;
QString newRepoUrl;
int currentVersionId = -1;
QString currentRepoUrl;
// path to the root of the application
QString rootPath;
};
/**
* Struct that describes an entry in a VersionFileEntry's `Sources` list.
*/
struct FileSource
{
FileSource(QString type, QString url, QString compression="")
{
this->type = type;
this->url = url;
this->compressionType = compression;
}
bool operator==(const FileSource &f2) const
{
return type == f2.type && url == f2.url && compressionType == f2.compressionType;
}
QString type;
QString url;
QString compressionType;
};
typedef QList<FileSource> FileSourceList;
/**
* Structure that describes an entry in a GoUpdate version's `Files` list.
*/
struct VersionFileEntry
{
QString path;
int mode;
FileSourceList sources;
QString md5;
bool operator==(const VersionFileEntry &v2) const
{
return path == v2.path && mode == v2.mode && sources == v2.sources && md5 == v2.md5;
}
};
typedef QList<VersionFileEntry> VersionFileList;
/**
* Structure that describes an operation to perform when installing updates.
*/
struct Operation
{
static Operation CopyOp(QString from, QString to, int fmode=0644)
{
return Operation{OP_REPLACE, from, to, fmode};
}
static Operation DeleteOp(QString file)
{
return Operation{OP_DELETE, QString(), file, 0644};
}
// FIXME: for some types, some of the other fields are irrelevant!
bool operator==(const Operation &u2) const
{
return type == u2.type &&
source == u2.source &&
destination == u2.destination &&
destinationMode == u2.destinationMode;
}
//! Specifies the type of operation that this is.
enum Type
{
OP_REPLACE,
OP_DELETE,
} type;
//! The source file, if any
QString source;
//! The destination file.
QString destination;
//! The mode to change the destination file to.
int destinationMode;
};
typedef QList<Operation> OperationList;
/**
* Loads the file list from the given version info JSON object into the given list.
*/
bool parseVersionInfo(const QByteArray &data, VersionFileList& list, QString &error);
/*!
* Takes a list of file entries for the current version's files and the new version's files
* and populates the downloadList and operationList with information about how to download and install the update.
*/
bool processFileLists
(
const VersionFileList ¤tVersion,
const VersionFileList &newVersion,
const QString &rootPath,
const QString &tempPath,
NetJob::Ptr job,
OperationList &ops
);
}
Q_DECLARE_METATYPE(GoUpdate::Status)
|