@@ -12,7 +12,7 @@ use crate::util::command::{capture_command, kill_tree};
12
12
use crate :: util:: errors:: {
13
13
wrap, AnyError , ExtensionInstallFailed , MissingEntrypointError , WrappedError ,
14
14
} ;
15
- use crate :: util:: http;
15
+ use crate :: util:: http:: { self , SimpleHttp } ;
16
16
use crate :: util:: io:: SilentCopyProgress ;
17
17
use crate :: util:: machine:: process_exists;
18
18
use crate :: { debug, info, log, span, spanf, trace, warning} ;
@@ -170,14 +170,22 @@ impl ResolvedServerParams {
170
170
}
171
171
172
172
impl ServerParamsRaw {
173
- pub async fn resolve ( self , log : & log:: Logger ) -> Result < ResolvedServerParams , AnyError > {
173
+ pub async fn resolve (
174
+ self ,
175
+ log : & log:: Logger ,
176
+ http : impl SimpleHttp + Send + Sync + ' static ,
177
+ ) -> Result < ResolvedServerParams , AnyError > {
174
178
Ok ( ResolvedServerParams {
175
- release : self . get_or_fetch_commit_id ( log) . await ?,
179
+ release : self . get_or_fetch_commit_id ( log, http ) . await ?,
176
180
code_server_args : self . code_server_args ,
177
181
} )
178
182
}
179
183
180
- async fn get_or_fetch_commit_id ( & self , log : & log:: Logger ) -> Result < Release , AnyError > {
184
+ async fn get_or_fetch_commit_id (
185
+ & self ,
186
+ log : & log:: Logger ,
187
+ http : impl SimpleHttp + Send + Sync + ' static ,
188
+ ) -> Result < Release , AnyError > {
181
189
let target = match self . headless {
182
190
true => TargetKind :: Server ,
183
191
false => TargetKind :: Web ,
@@ -193,7 +201,7 @@ impl ServerParamsRaw {
193
201
} ) ;
194
202
}
195
203
196
- UpdateService :: new ( log. clone ( ) , reqwest :: Client :: new ( ) )
204
+ UpdateService :: new ( log. clone ( ) , http )
197
205
. get_latest_commit ( self . platform , target, self . quality )
198
206
. await
199
207
}
@@ -285,6 +293,7 @@ async fn install_server_if_needed(
285
293
log : & log:: Logger ,
286
294
paths : & ServerPaths ,
287
295
release : & Release ,
296
+ http : impl SimpleHttp + Send + Sync + ' static ,
288
297
) -> Result < ( ) , AnyError > {
289
298
if paths. executable . exists ( ) {
290
299
info ! (
@@ -298,7 +307,7 @@ async fn install_server_if_needed(
298
307
let tar_file_path = spanf ! (
299
308
log,
300
309
log. span( "server.download" ) ,
301
- download_server( & paths. server_dir, release, log)
310
+ download_server( & paths. server_dir, release, log, http )
302
311
) ?;
303
312
304
313
span ! (
@@ -314,28 +323,21 @@ async fn download_server(
314
323
path : & Path ,
315
324
release : & Release ,
316
325
log : & log:: Logger ,
326
+ http : impl SimpleHttp + Send + Sync + ' static ,
317
327
) -> Result < PathBuf , AnyError > {
318
- let response = UpdateService :: new ( log. clone ( ) , reqwest :: Client :: new ( ) )
328
+ let response = UpdateService :: new ( log. clone ( ) , http )
319
329
. get_download_stream ( release)
320
330
. await ?;
321
331
322
332
let mut save_path = path. to_owned ( ) ;
323
-
324
- let fname = response
325
- . url ( )
326
- . path_segments ( )
327
- . and_then ( |segments| segments. last ( ) )
328
- . and_then ( |name| if name. is_empty ( ) { None } else { Some ( name) } )
329
- . unwrap_or ( "tmp.zip" ) ;
333
+ save_path. push ( "archive" ) ;
330
334
331
335
info ! (
332
336
log,
333
- "Downloading VS Code server {} -> {}" ,
334
- response. url( ) ,
337
+ "Downloading VS Code server -> {}" ,
335
338
save_path. display( )
336
339
) ;
337
340
338
- save_path. push ( fname) ;
339
341
http:: download_into_file (
340
342
& save_path,
341
343
log. get_download_logger ( "server download progress:" ) ,
@@ -402,18 +404,20 @@ async fn do_extension_install_on_running_server(
402
404
}
403
405
}
404
406
405
- pub struct ServerBuilder < ' a > {
407
+ pub struct ServerBuilder < ' a , Http : SimpleHttp + Send + Sync + Clone > {
406
408
logger : & ' a log:: Logger ,
407
409
server_params : & ' a ResolvedServerParams ,
408
410
last_used : LastUsedServers < ' a > ,
409
411
server_paths : ServerPaths ,
412
+ http : Http ,
410
413
}
411
414
412
- impl < ' a > ServerBuilder < ' a > {
415
+ impl < ' a , Http : SimpleHttp + Send + Sync + Clone + ' static > ServerBuilder < ' a , Http > {
413
416
pub fn new (
414
417
logger : & ' a log:: Logger ,
415
418
server_params : & ' a ResolvedServerParams ,
416
419
launcher_paths : & ' a LauncherPaths ,
420
+ http : Http ,
417
421
) -> Self {
418
422
Self {
419
423
logger,
@@ -422,6 +426,7 @@ impl<'a> ServerBuilder<'a> {
422
426
server_paths : server_params
423
427
. as_installed_server ( )
424
428
. server_paths ( launcher_paths) ,
429
+ http,
425
430
}
426
431
}
427
432
@@ -476,8 +481,13 @@ impl<'a> ServerBuilder<'a> {
476
481
pub async fn setup ( & self ) -> Result < ( ) , AnyError > {
477
482
debug ! ( self . logger, "Installing and setting up VS Code Server..." ) ;
478
483
check_and_create_dir ( & self . server_paths . server_dir ) . await ?;
479
- install_server_if_needed ( self . logger , & self . server_paths , & self . server_params . release )
480
- . await ?;
484
+ install_server_if_needed (
485
+ self . logger ,
486
+ & self . server_paths ,
487
+ & self . server_params . release ,
488
+ self . http . clone ( ) ,
489
+ )
490
+ . await ?;
481
491
debug ! ( self . logger, "Server setup complete" ) ;
482
492
483
493
match self . last_used . add ( self . server_params . as_installed_server ( ) ) {
0 commit comments