@@ -60,9 +60,35 @@ export class SystemManager extends Manager {
6060 if ( details . reason === "install" ) {
6161 chrome . tabs . create ( { url : "https://docs.scriptcat.org/" } ) ;
6262 } else if ( details . reason === "update" ) {
63- chrome . tabs . create ( {
64- url : `https://docs.scriptcat.org/docs/change/#${ ExtVersion } ` ,
65- } ) ;
63+ let nid : string ;
64+ chrome . notifications . create (
65+ {
66+ type : "basic" ,
67+ iconUrl : chrome . runtime . getURL ( "assets/logo.png" ) ,
68+ title : `ScriptCat 更新到 ${ ExtVersion } ` ,
69+ message : "ScriptCat已更新,点击查看更新日志" ,
70+ } ,
71+ ( notificationId ) => {
72+ nid = notificationId ;
73+ }
74+ ) ;
75+ // eslint-disable-next-line no-undef
76+ let tm : NodeJS . Timeout ;
77+ const onClicked = ( id : string ) => {
78+ if ( nid !== id ) {
79+ return ;
80+ }
81+ chrome . notifications . onClicked . removeListener ( onClicked ) ;
82+ chrome . tabs . create ( {
83+ url : `https://docs.scriptcat.org/docs/change/#${ ExtVersion } ` ,
84+ } ) ;
85+ clearTimeout ( tm ) ;
86+ } ;
87+ tm = setTimeout ( ( ) => {
88+ chrome . notifications . clear ( nid ) ;
89+ chrome . notifications . onClicked . removeListener ( onClicked ) ;
90+ } , 60 * 3000 ) ;
91+ chrome . notifications . onClicked . addListener ( onClicked ) ;
6692 }
6793 } ) ;
6894 }
@@ -99,7 +125,9 @@ export class SystemManager extends Manager {
99125 ) ;
100126 this . listenEvent ( "connectVSCode" , this . connectVSCode . bind ( this ) ) ;
101127
102- this . reconnectVSCode ( ) ;
128+ this . systemConfig . awaitLoad ( ) . then ( ( ) => {
129+ this . reconnectVSCode ( ) ;
130+ } ) ;
103131
104132 // 定时清理日志
105133 this . clearLogger ( ) ;
@@ -133,47 +161,56 @@ export class SystemManager extends Manager {
133161 }
134162
135163 connectVSCode ( ) {
136- // 与vsc扩展建立连接
137- if ( this . wsVscode ) {
138- this . wsVscode . close ( ) ;
139- }
140- try {
141- this . wsVscode = new WebSocket ( this . systemConfig . vscodeUrl ) ;
142- } catch ( e : any ) {
143- this . logger . debug ( "vscode连接失败" , Logger . E ( e ) ) ;
144- return ;
145- }
146- this . wsVscode . addEventListener ( "open" , ( ) => {
147- this . wsVscode ! . send ( '{"action":"hello"}' ) ;
148- } ) ;
149- this . wsVscode . addEventListener ( "message" , async ( ev ) => {
150- const data = JSON . parse ( ev . data ) ;
151- switch ( data . action ) {
152- case "onchange" : {
153- const code = data . data . script ;
154- const prepareScript = await prepareScriptByCode (
155- code ,
156- "" ,
157- uuidv5 ( data . data . uri , uuidv5 . URL )
158- ) ;
159- this . scriptManager . event . upsertHandler (
160- prepareScript . script ,
161- "vscode"
162- ) ;
163- break ;
164- }
165- default :
164+ return new Promise < void > ( ( resolve , reject ) => {
165+ // 与vsc扩展建立连接
166+ if ( this . wsVscode ) {
167+ this . wsVscode . close ( ) ;
166168 }
167- } ) ;
169+ try {
170+ this . wsVscode = new WebSocket ( this . systemConfig . vscodeUrl ) ;
171+ } catch ( e : any ) {
172+ this . logger . debug ( "connect vscode faild" , Logger . E ( e ) ) ;
173+ reject ( e ) ;
174+ return ;
175+ }
176+ let ok = false ;
177+ this . wsVscode . addEventListener ( "open" , ( ) => {
178+ this . wsVscode ! . send ( '{"action":"hello"}' ) ;
179+ ok = true ;
180+ resolve ( ) ;
181+ } ) ;
182+ this . wsVscode . addEventListener ( "message" , async ( ev ) => {
183+ const data = JSON . parse ( ev . data ) ;
184+ switch ( data . action ) {
185+ case "onchange" : {
186+ const code = data . data . script ;
187+ const prepareScript = await prepareScriptByCode (
188+ code ,
189+ "" ,
190+ uuidv5 ( data . data . uri , uuidv5 . URL )
191+ ) ;
192+ this . scriptManager . event . upsertHandler (
193+ prepareScript . script ,
194+ "vscode"
195+ ) ;
196+ break ;
197+ }
198+ default :
199+ }
200+ } ) ;
168201
169- this . wsVscode . addEventListener ( "error" , ( e ) => {
170- this . wsVscode = undefined ;
171- this . logger . debug ( "vscode连接失败" , Logger . E ( e ) ) ;
172- } ) ;
202+ this . wsVscode . addEventListener ( "error" , ( e ) => {
203+ this . wsVscode = undefined ;
204+ this . logger . debug ( "connect vscode faild" , Logger . E ( e ) ) ;
205+ if ( ! ok ) {
206+ reject ( new Error ( "connect fail" ) ) ;
207+ }
208+ } ) ;
173209
174- this . wsVscode . addEventListener ( "close" , ( ) => {
175- this . wsVscode = undefined ;
176- this . logger . debug ( "vscode连接关闭" ) ;
210+ this . wsVscode . addEventListener ( "close" , ( ) => {
211+ this . wsVscode = undefined ;
212+ this . logger . debug ( "vscode connection closed" ) ;
213+ } ) ;
177214 } ) ;
178215 }
179216
0 commit comments