@@ -40,63 +40,81 @@ function downloadFile (uri, filePath, onProgress, onSuccess, onError) {
40
40
}
41
41
42
42
function parseVersion ( version ) {
43
- const matched = version . match ( / ^ v ? ( \d + \. \d + \. \d + ) ( .* ) $ / )
43
+ const matched = version . match ( / ^ v ? ( \d { 1 , 2 } \. \d { 1 , 2 } \. \d { 1 , 3 } (?: \. \d { 1 , 2 } ) ? ) ( .* ) $ / )
44
44
const versionArr = matched [ 1 ] . split ( '.' )
45
45
return {
46
- major : Number . parseInt ( versionArr [ 0 ] ) ,
47
- minor : Number . parseInt ( versionArr [ 1 ] ) ,
48
- patch : Number . parseInt ( versionArr [ 2 ] ) ,
49
- suffix : matched [ 2 ] ,
46
+ major : Number . parseInt ( versionArr [ 0 ] ) , // 大版本
47
+ minor : Number . parseInt ( versionArr [ 1 ] ) , // 中版本
48
+ patch : Number . parseInt ( versionArr [ 2 ] ) , // 小版本
49
+ temp : Number . parseInt ( versionArr [ 3 ] ) || 0 , // 临时版本
50
+ pre : matched [ 2 ] , // 预发布版本号
50
51
}
51
52
}
52
53
53
54
/**
54
55
* 比较版本号
55
56
*
56
- * @param version 线上版本号
57
- * @param curVersion 当前版本号
57
+ * @param onlineVersion 线上版本号
58
+ * @param currentVersion 当前版本号
58
59
* @returns {number } 比较线上版本号是否为更新版本,1=是|0=相等|-1=否|-99=出现异常,比较结果未知
59
60
*/
60
- function isNewVersion ( version , curVersion ) {
61
- if ( version === curVersion ) {
61
+ function isNewVersion ( onlineVersion , currentVersion ) {
62
+ if ( onlineVersion === currentVersion ) {
62
63
return 0
63
64
}
64
65
65
66
try {
66
- const versionObj = parseVersion ( version )
67
- const curVersionObj = parseVersion ( curVersion )
67
+ const versionObj = parseVersion ( onlineVersion )
68
+ const curVersionObj = parseVersion ( currentVersion )
69
+
70
+ // 大版本
68
71
if ( versionObj . major > curVersionObj . major ) {
69
- return 1 // 大版本号更大,为更新版本
72
+ return 1 // 大版本号更大,为新版本,需要更新
73
+ } else if ( versionObj . major < curVersionObj . major ) {
74
+ return - 1 // 大版本号更小,为旧版本,无需更新
70
75
}
71
76
72
- if ( curVersionObj . major === versionObj . major ) {
73
- if ( versionObj . minor > curVersionObj . minor ) {
74
- return 2 // 中版本号更大,为更新版本
75
- }
77
+ // 中版本
78
+ if ( versionObj . minor > curVersionObj . minor ) {
79
+ return 2 // 中版本号更大,为新版本,需要更新
80
+ } else if ( versionObj . minor < curVersionObj . minor ) {
81
+ return - 2 // 中版本号更小,为旧版本,无需更新
82
+ }
76
83
77
- if ( curVersionObj . minor === versionObj . minor ) {
78
- if ( versionObj . patch > curVersionObj . patch ) {
79
- return 3 // 小版本号更大,为更新版本
80
- }
84
+ // 小版本
85
+ if ( versionObj . patch > curVersionObj . patch ) {
86
+ return 3 // 小版本号更大,为新版本,需要更新
87
+ } else if ( versionObj . patch < curVersionObj . patch ) {
88
+ return - 3 // 小版本号更小,为旧版本,无需更新
89
+ }
81
90
82
- if ( versionObj . patch === curVersionObj . patch ) {
83
- if ( versionObj . suffix && curVersionObj . suffix ) {
84
- // 当两个后缀版本号都存在时,直接比较后缀版本号字符串的大小
85
- if ( versionObj . suffix > curVersionObj . suffix ) {
86
- return 41
87
- }
88
- } else if ( ! versionObj . suffix && curVersionObj . suffix ) {
89
- // 线上版本号没有后缀版本号,说明为正式版本,为更新版本
90
- return 42
91
- }
92
- }
91
+ // 临时版本号
92
+ if ( versionObj . temp > curVersionObj . temp ) {
93
+ return 4 // 临时版本号更大,为新版本,需要更新
94
+ } else if ( versionObj . temp < curVersionObj . temp ) {
95
+ return - 4 // 临时版本号更小,为旧版本,无需更新
96
+ }
97
+
98
+ // 预发布版本号
99
+ if ( versionObj . pre && curVersionObj . pre ) {
100
+ // 当两个后缀版本号都存在时,直接比较后缀版本号字符串的大小
101
+ if ( versionObj . pre > curVersionObj . pre ) {
102
+ return 51
103
+ } else if ( versionObj . pre < curVersionObj . pre ) {
104
+ return - 51
93
105
}
106
+ } else if ( ! versionObj . pre && curVersionObj . pre ) {
107
+ // 线上版本号没有后缀版本号,说明为正式版本,为新版本,需要更新
108
+ return 52
109
+ } else if ( versionObj . pre && ! curVersionObj . pre ) {
110
+ return - 52
111
+ } else {
112
+ return - 53 // 相同版本,无需更新(一般不会出现,除非例如 `2.0.0` 和 `2.0.0.0` 进行比较)
94
113
}
95
114
} catch ( e ) {
96
- log . error ( `比对版本失败,当前版本号:${ curVersion } ,比对版本号 :${ version } , error:` , e )
97
- return - 99
115
+ log . error ( `比对版本失败,当前版本号:${ currentVersion } ,线上版本号 :${ onlineVersion } , error:` , e )
116
+ return - 99 // 比对异常
98
117
}
99
- return - 1
100
118
}
101
119
102
120
/**
@@ -159,7 +177,7 @@ function updateHandle (app, api, win, beforeQuit, quit, log) {
159
177
let data
160
178
try {
161
179
data = JSON . parse ( body )
162
- } catch ( e ) {
180
+ } catch {
163
181
log . error ( '检查更新失败,github API返回数据格式不正确:' , body )
164
182
win . webContents . send ( 'update' , { key : 'error' , action : 'checkForUpdate' , error : '检查更新失败,github API返回数据格式不正确' } )
165
183
return
@@ -195,27 +213,27 @@ function updateHandle (app, api, win, beforeQuit, quit, log) {
195
213
log . info ( '最近正式版本:' , versionData . name )
196
214
197
215
// 获取版本号
198
- let version = versionData . name
199
- if ( version . indexOf ( 'v' ) === 0 ) {
200
- version = version . substring ( 1 )
216
+ let onlineVersion = versionData . name
217
+ if ( onlineVersion . indexOf ( 'v' ) === 0 ) {
218
+ onlineVersion = onlineVersion . substring ( 1 )
201
219
}
202
220
203
221
// 比对版本号,是否为新版本
204
- const isNew = isNewVersion ( version , curVersion )
205
- log . info ( `版本比对结果:isNewVersion('${ version } ', '${ curVersion } ') = ${ isNew } ` )
222
+ const isNew = isNewVersion ( onlineVersion , curVersion )
223
+ log . info ( `版本比对结果:isNewVersion('${ onlineVersion } ', '${ curVersion } ') = ${ isNew } ` )
206
224
if ( isNew > 0 ) {
207
- log . info ( `检查更新:发现新版本 '${ version } ',当前版本号为 '${ curVersion } '` )
225
+ log . info ( `检查更新:发现新版本 '${ onlineVersion } ',当前版本号为 '${ curVersion } '` )
208
226
win . webContents . send ( 'update' , {
209
227
key : 'available' ,
210
228
value : {
211
- version,
229
+ version : onlineVersion ,
212
230
releaseNotes : versionData . body
213
231
? ( versionData . body . replace ( / \r \n / g, '\n' ) . replace ( / h t t p s : \/ \/ g i t h u b .c o m \/ d o c m i r r o r \/ d e v - s i d e c a r / g, '' ) . replace ( / (?< = ( ^ | \n ) ) [ \t ] * (?: # [ # ] * ) ? # \s * / g, '' ) || '无' )
214
232
: '无' ,
215
233
} ,
216
234
} )
217
235
} else {
218
- log . info ( `检查更新:没有新版本,最近发布的版本号为 '${ version } ',而当前版本号为 '${ curVersion } '` )
236
+ log . info ( `检查更新:没有新版本,最近发布的版本号为 '${ onlineVersion } ',而当前版本号为 '${ curVersion } '` )
219
237
win . webContents . send ( 'update' , { key : 'notAvailable' } )
220
238
}
221
239
@@ -230,7 +248,7 @@ function updateHandle (app, api, win, beforeQuit, quit, log) {
230
248
let bodyObj
231
249
try {
232
250
bodyObj = JSON . parse ( body )
233
- } catch ( e ) {
251
+ } catch {
234
252
bodyObj = null
235
253
}
236
254
@@ -256,7 +274,7 @@ function updateHandle (app, api, win, beforeQuit, quit, log) {
256
274
log . info ( 'download dir:' , fileDir )
257
275
try {
258
276
fs . accessSync ( fileDir , fs . constants . F_OK )
259
- } catch ( e ) {
277
+ } catch {
260
278
fs . mkdirSync ( fileDir )
261
279
}
262
280
const filePath = path . join ( fileDir , `${ value . version } .zip` )
0 commit comments