From ed61fdee3edf4aa3750a9cb293987171aac49d47 Mon Sep 17 00:00:00 2001 From: garethgeorge Date: Tue, 5 Jul 2022 14:34:04 -0700 Subject: [PATCH] Expand libium's heuristic for github to use release name if only one jar is associated with the release --- src/upgrade/check.rs | 66 +++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 16 deletions(-) diff --git a/src/upgrade/check.rs b/src/upgrade/check.rs index 03f7411..d6a59af 100644 --- a/src/upgrade/check.rs +++ b/src/upgrade/check.rs @@ -68,25 +68,59 @@ pub fn github<'a>( should_check_mod_loader: Option, ) -> Option<&'a Asset> { for release in releases { - for asset in &release.assets { - if asset.name.contains("jar") - // Sources JARs should not be used with the regular game - && !asset.name.contains("sources") - && (Some(false) == should_check_game_version - || asset.name.contains(game_version_to_check)) - && (Some(false) == should_check_mod_loader - || check_mod_loader( - &asset - .name - .split('-') - .map(str::to_string) - .collect::>(), - mod_loader_to_check, - )) - { + let candidate_assets: Vec<&Asset> = release + .assets + .iter() + .filter(|asset| asset.name.contains("jar") && !asset.name.contains("sources")) + .collect(); + + if let Some(asset) = candidate_assets + .iter() + .filter(|asset| { + github_name_check_heuristic( + &asset.name, + game_version_to_check, + mod_loader_to_check, + should_check_game_version, + should_check_mod_loader, + ) + }) + .next() + { + return Some(asset); + } + + if let &[asset] = candidate_assets.as_slice() { + if github_name_check_heuristic( + release + .name + .as_ref() + .unwrap_or(&"".to_string()) + .to_lowercase() + .as_str(), + game_version_to_check, + mod_loader_to_check, + should_check_game_version, + should_check_mod_loader, + ) { return Some(asset); } } } None } + +fn github_name_check_heuristic<'a>( + name: &str, + game_version_to_check: &str, + mod_loader_to_check: &ModLoader, + should_check_game_version: Option, + should_check_mod_loader: Option, +) -> bool { + return (Some(false) == should_check_game_version || name.contains(game_version_to_check)) + && (Some(false) == should_check_mod_loader + || check_mod_loader( + &name.split('-').map(str::to_string).collect::>(), + mod_loader_to_check, + )); +}