@@ -12,7 +12,7 @@ use crate::util::command::{capture_command, kill_tree};
1212use crate :: util:: errors:: {
1313 wrap, AnyError , ExtensionInstallFailed , MissingEntrypointError , WrappedError ,
1414} ;
15- use crate :: util:: http;
15+ use crate :: util:: http:: { self , SimpleHttp } ;
1616use crate :: util:: io:: SilentCopyProgress ;
1717use crate :: util:: machine:: process_exists;
1818use crate :: { debug, info, log, span, spanf, trace, warning} ;
@@ -170,14 +170,22 @@ impl ResolvedServerParams {
170170}
171171
172172impl 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 > {
174178 Ok ( ResolvedServerParams {
175- release : self . get_or_fetch_commit_id ( log) . await ?,
179+ release : self . get_or_fetch_commit_id ( log, http ) . await ?,
176180 code_server_args : self . code_server_args ,
177181 } )
178182 }
179183
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 > {
181189 let target = match self . headless {
182190 true => TargetKind :: Server ,
183191 false => TargetKind :: Web ,
@@ -193,7 +201,7 @@ impl ServerParamsRaw {
193201 } ) ;
194202 }
195203
196- UpdateService :: new ( log. clone ( ) , reqwest :: Client :: new ( ) )
204+ UpdateService :: new ( log. clone ( ) , http )
197205 . get_latest_commit ( self . platform , target, self . quality )
198206 . await
199207 }
@@ -285,6 +293,7 @@ async fn install_server_if_needed(
285293 log : & log:: Logger ,
286294 paths : & ServerPaths ,
287295 release : & Release ,
296+ http : impl SimpleHttp + Send + Sync + ' static ,
288297) -> Result < ( ) , AnyError > {
289298 if paths. executable . exists ( ) {
290299 info ! (
@@ -298,7 +307,7 @@ async fn install_server_if_needed(
298307 let tar_file_path = spanf ! (
299308 log,
300309 log. span( "server.download" ) ,
301- download_server( & paths. server_dir, release, log)
310+ download_server( & paths. server_dir, release, log, http )
302311 ) ?;
303312
304313 span ! (
@@ -314,28 +323,21 @@ async fn download_server(
314323 path : & Path ,
315324 release : & Release ,
316325 log : & log:: Logger ,
326+ http : impl SimpleHttp + Send + Sync + ' static ,
317327) -> Result < PathBuf , AnyError > {
318- let response = UpdateService :: new ( log. clone ( ) , reqwest :: Client :: new ( ) )
328+ let response = UpdateService :: new ( log. clone ( ) , http )
319329 . get_download_stream ( release)
320330 . await ?;
321331
322332 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" ) ;
330334
331335 info ! (
332336 log,
333- "Downloading VS Code server {} -> {}" ,
334- response. url( ) ,
337+ "Downloading VS Code server -> {}" ,
335338 save_path. display( )
336339 ) ;
337340
338- save_path. push ( fname) ;
339341 http:: download_into_file (
340342 & save_path,
341343 log. get_download_logger ( "server download progress:" ) ,
@@ -402,18 +404,20 @@ async fn do_extension_install_on_running_server(
402404 }
403405}
404406
405- pub struct ServerBuilder < ' a > {
407+ pub struct ServerBuilder < ' a , Http : SimpleHttp + Send + Sync + Clone > {
406408 logger : & ' a log:: Logger ,
407409 server_params : & ' a ResolvedServerParams ,
408410 last_used : LastUsedServers < ' a > ,
409411 server_paths : ServerPaths ,
412+ http : Http ,
410413}
411414
412- impl < ' a > ServerBuilder < ' a > {
415+ impl < ' a , Http : SimpleHttp + Send + Sync + Clone + ' static > ServerBuilder < ' a , Http > {
413416 pub fn new (
414417 logger : & ' a log:: Logger ,
415418 server_params : & ' a ResolvedServerParams ,
416419 launcher_paths : & ' a LauncherPaths ,
420+ http : Http ,
417421 ) -> Self {
418422 Self {
419423 logger,
@@ -422,6 +426,7 @@ impl<'a> ServerBuilder<'a> {
422426 server_paths : server_params
423427 . as_installed_server ( )
424428 . server_paths ( launcher_paths) ,
429+ http,
425430 }
426431 }
427432
@@ -476,8 +481,13 @@ impl<'a> ServerBuilder<'a> {
476481 pub async fn setup ( & self ) -> Result < ( ) , AnyError > {
477482 debug ! ( self . logger, "Installing and setting up VS Code Server..." ) ;
478483 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 ?;
481491 debug ! ( self . logger, "Server setup complete" ) ;
482492
483493 match self . last_used . add ( self . server_params . as_installed_server ( ) ) {
0 commit comments