1
1
import { BehaviorSubject } from 'rxjs' ;
2
2
import { browser } from 'webextension-polyfill-ts' ;
3
3
4
- import { DownloadStatus , ReleaseCheckData } from '../interface' ;
4
+ import { DownloadStatus , ReleaseCheckData , GithubRelease } from '../interface' ;
5
5
import { badgeLoading } from '../tool/badge-loading' ;
6
6
import { chromeMessage } from '../tool/chrome-message' ;
7
7
import { logger } from '../tool/log' ;
@@ -46,7 +46,7 @@ class Updater {
46
46
this . initDownloadStatus ( ) ;
47
47
try {
48
48
const data = await this . download ( ) ;
49
- tagDatabase . update ( data . db , data . release . html_url ) ;
49
+ tagDatabase . update ( data . content , data . filename . endsWith ( '.gz' ) , data . release . html_url ) ;
50
50
51
51
badgeLoading . set ( 'OK' , '#00C801' ) ;
52
52
this . pushDownloadStatus ( { run : true , info : '更新完成' , progress : 100 , complete : true } ) ;
@@ -90,9 +90,9 @@ class Updater {
90
90
91
91
const { sha, releaseLink } = await browser . storage . local . get ( [ 'sha' , 'releaseLink' ] ) ;
92
92
const githubDownloadUrl = 'https://api.github.com/repos/ehtagtranslation/Database/releases/latest' ;
93
- const info = await ( await fetch ( githubDownloadUrl ) ) . json ( ) ;
93
+ const info = await ( await fetch ( githubDownloadUrl ) ) . json ( ) as GithubRelease ;
94
94
95
- if ( ! ( info && info . target_commitish ) ) {
95
+ if ( ! info ? .target_commitish ) {
96
96
return null ;
97
97
}
98
98
this . lastCheckData . next ( {
@@ -106,7 +106,7 @@ class Updater {
106
106
return this . lastCheckData . value ;
107
107
}
108
108
109
- private download ( ) : Promise < { release : any , db : ArrayBuffer } > {
109
+ private download ( ) : Promise < { release : GithubRelease , filename : string , content : ArrayBuffer } > {
110
110
return new Promise ( async ( resolve , reject ) => {
111
111
if ( this . loadLock ) {
112
112
reject ( '已经正在下载' ) ;
@@ -116,38 +116,43 @@ class Updater {
116
116
badgeLoading . set ( '' , '#4A90E2' , 2 ) ;
117
117
this . pushDownloadStatus ( { run : true , info : '加载中' } ) ;
118
118
const checkData = await this . checkVersion ( ) ;
119
- if ( ! ( checkData && checkData . githubRelease && checkData . githubRelease . assets ) ) {
119
+ if ( ! checkData ?. githubRelease ?. assets ) {
120
+ logger . debug ( 'checkData' , checkData ) ;
120
121
reject ( new Error ( '无法获取版本信息' ) ) ;
121
122
this . loadLock = false ;
122
123
return ;
123
124
}
124
125
const info = checkData . githubRelease ;
125
- const asset = info . assets . find ( ( i : any ) => i . name === 'db.html.json.gz' ) ;
126
- const url = asset && asset . browser_download_url || '' ;
126
+ const asset = info . assets . find ( i => i . name === 'db.html.json.gz' ) ?? info . assets . find ( i => i . name === 'db.html.json ') ;
127
+ const url = asset ? .browser_download_url ;
127
128
if ( ! url ) {
129
+ logger . debug ( 'assets' , info . assets ) ;
128
130
reject ( new Error ( '无法获取下载地址' ) ) ;
129
131
this . loadLock = false ;
130
132
return ;
131
133
}
132
134
135
+ const timer = logger . time ( `开始下载 ${ url } ` ) ;
133
136
const xhr = new XMLHttpRequest ( ) ;
134
137
xhr . open ( 'GET' , url ) ;
135
138
xhr . responseType = 'arraybuffer' ;
136
139
xhr . onload = ( ) => {
137
140
try {
138
- resolve ( { release : info , db : xhr . response as ArrayBuffer } ) ;
141
+ resolve ( { release : info , filename : asset . name , content : xhr . response as ArrayBuffer } ) ;
139
142
this . pushDownloadStatus ( { info : '下载完成' , progress : 100 } ) ;
140
143
badgeLoading . set ( '100' , '#4A90E2' , 1 ) ;
141
144
} catch ( e ) {
142
145
reject ( new Error ( '数据无法解析' ) ) ;
143
146
badgeLoading . set ( 'ERR' , '#C80000' ) ;
144
147
} finally {
148
+ timer . end ( ) ;
145
149
this . loadLock = false ;
146
150
}
147
151
} ;
148
152
xhr . onerror = ( e ) => {
149
153
this . loadLock = false ;
150
154
badgeLoading . set ( 'ERR' , '#C80000' ) ;
155
+ timer . end ( ) ;
151
156
reject ( e ) ;
152
157
} ;
153
158
xhr . onprogress = ( event ) => {
0 commit comments