From 685219ea6252954671e1b02cd55e97e94e2ac1e0 Mon Sep 17 00:00:00 2001 From: Sergio <77530549+sergi0g@users.noreply.github.com> Date: Fri, 21 Feb 2025 17:05:32 +0200 Subject: [PATCH] Add option to refresh all servers --- src/check.rs | 39 ++++++++++++++++++++++++++++++--------- src/main.rs | 6 ++++-- src/server.rs | 2 +- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/check.rs b/src/check.rs index 2e4cb4e..fc02112 100644 --- a/src/check.rs +++ b/src/check.rs @@ -12,21 +12,38 @@ use crate::{ }; /// Fetches image data from other Cup instances -async fn get_remote_updates(ctx: &Context, client: &Client) -> Vec { +async fn get_remote_updates(ctx: &Context, client: &Client, refresh: bool) -> Vec { let mut remote_images = Vec::new(); let handles: Vec<_> = ctx.config.servers .iter() .map(|(name, url)| async { - let url = if url.starts_with("http://") || url.starts_with("https://") { - format!("{}/api/v3/json", url.trim_end_matches('/')) + let base_url = if url.starts_with("http://") || url.starts_with("https://") { + format!("{}/api/v3/", url.trim_end_matches('/')) } else { - format!("https://{}/api/v3/json", url.trim_end_matches('/')) + format!("https://{}/api/v3/", url.trim_end_matches('/')) }; - match client.get(&url, vec![], false).await { + let json_url = base_url.clone() + "json"; + if refresh { + let refresh_url = base_url + "refresh"; + match client.get(&(&refresh_url), vec![], false).await { + Ok(response) => { + if response.status() != 200 { + ctx.logger.warn(format!("GET {}: Failed to refresh server. Server returned invalid response code: {}",refresh_url,response.status())); + return Vec::new(); + } + }, + Err(e) => { + ctx.logger.warn(format!("GET {}: Failed to refresh server. {}", refresh_url, e)); + return Vec::new(); + }, + } + + } + match client.get(&json_url, vec![], false).await { Ok(response) => { if response.status() != 200 { - ctx.logger.warn(format!("GET {}: Failed to fetch updates from server. Server returned invalid response code: {}",url,response.status())); + ctx.logger.warn(format!("GET {}: Failed to fetch updates from server. Server returned invalid response code: {}",json_url,response.status())); return Vec::new(); } let json = parse_json(&get_response_body(response).await); @@ -46,7 +63,7 @@ async fn get_remote_updates(ctx: &Context, client: &Client) -> Vec { Vec::new() } Err(e) => { - ctx.logger.warn(format!("Failed to fetch updates from server. {}", e)); + ctx.logger.warn(format!("GET {}: Failed to fetch updates from server. {}", json_url, e)); Vec::new() }, } @@ -61,7 +78,11 @@ async fn get_remote_updates(ctx: &Context, client: &Client) -> Vec { } /// Returns a list of updates for all images passed in. -pub async fn get_updates(references: &Option>, ctx: &Context) -> Vec { +pub async fn get_updates( + references: &Option>, + refresh: bool, + ctx: &Context, +) -> Vec { let client = Client::new(ctx); // Get local images @@ -82,7 +103,7 @@ pub async fn get_updates(references: &Option>, ctx: &Context) -> Vec // Get remote images from other servers let remote_updates = if !ctx.config.servers.is_empty() { ctx.logger.debug("Fetching updates from remote servers"); - get_remote_updates(ctx, &client).await + get_remote_updates(ctx, &client, refresh).await } else { Vec::new() }; diff --git a/src/main.rs b/src/main.rs index f79453a..5bc4dc6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,6 +34,8 @@ struct Cli { command: Option, #[arg(short, long)] debug: bool, + #[arg(long)] + refresh: bool, } #[derive(Subcommand)] @@ -98,12 +100,12 @@ async fn main() { } match *raw || cli.debug { true => { - let updates = get_updates(references, &ctx).await; + let updates = get_updates(references, cli.refresh, &ctx).await; print_raw_updates(&updates); } false => { let spinner = Spinner::new(); - let updates = get_updates(references, &ctx).await; + let updates = get_updates(references, cli.refresh, &ctx).await; spinner.succeed(); print_updates(&updates, icons); ctx.logger.info(format!("✨ Checked {} images in {}ms", updates.len(), start.elapsed().unwrap().as_millis())); diff --git a/src/server.rs b/src/server.rs index 633de3f..8df3694 100644 --- a/src/server.rs +++ b/src/server.rs @@ -173,7 +173,7 @@ impl ServerData { if !self.raw_updates.is_empty() { self.ctx.logger.info("Refreshing data"); } - let updates = sort_update_vec(&get_updates(&None, &self.ctx).await); + let updates = sort_update_vec(&get_updates(&None, true, &self.ctx).await); self.ctx.logger.info(format!( "✨ Checked {} images in {}ms", updates.len(),