Refactor: Use dedicated functions for constructing Windows browser paths

This commit is contained in:
2026-05-08 02:10:19 +02:00
parent 4f8aea39d7
commit 9fc00f8add

View File

@@ -384,52 +384,102 @@ fn windows_browser_paths(id: &str) -> Vec<PathBuf> {
let local_app_data = env::var("LocalAppData").ok().map(PathBuf::from);
let mut paths = Vec::new();
let mut add_under_program_files = |relative: &str| {
if let Some(root) = &program_files {
paths.push(root.join(relative));
}
if let Some(root) = &program_files_x86 {
paths.push(root.join(relative));
}
};
let mut add_under_local_app_data = |relative: &str| {
if let Some(root) = &local_app_data {
paths.push(root.join(relative));
}
};
match id {
"brave" => {
add_under_program_files("BraveSoftware/Brave-Browser/Application/brave.exe");
add_under_local_app_data("BraveSoftware/Brave-Browser/Application/brave.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"BraveSoftware/Brave-Browser/Application/brave.exe",
);
push_windows_local_path(
&mut paths,
&local_app_data,
"BraveSoftware/Brave-Browser/Application/brave.exe",
);
}
"chrome" => {
add_under_program_files("Google/Chrome/Application/chrome.exe");
add_under_local_app_data("Google/Chrome/Application/chrome.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"Google/Chrome/Application/chrome.exe",
);
push_windows_local_path(
&mut paths,
&local_app_data,
"Google/Chrome/Application/chrome.exe",
);
}
"chromium" => {
add_under_program_files("Chromium/Application/chrome.exe");
add_under_local_app_data("Chromium/Application/chrome.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"Chromium/Application/chrome.exe",
);
push_windows_local_path(
&mut paths,
&local_app_data,
"Chromium/Application/chrome.exe",
);
}
"edge" => {
add_under_program_files("Microsoft/Edge/Application/msedge.exe");
add_under_local_app_data("Microsoft/Edge/Application/msedge.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"Microsoft/Edge/Application/msedge.exe",
);
push_windows_local_path(
&mut paths,
&local_app_data,
"Microsoft/Edge/Application/msedge.exe",
);
}
"firefox" => {
add_under_program_files("Mozilla Firefox/firefox.exe");
add_under_local_app_data("Mozilla Firefox/firefox.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"Mozilla Firefox/firefox.exe",
);
push_windows_local_path(&mut paths, &local_app_data, "Mozilla Firefox/firefox.exe");
}
"opera" => {
add_under_local_app_data("Programs/Opera/opera.exe");
add_under_program_files("Opera/opera.exe");
push_windows_local_path(&mut paths, &local_app_data, "Programs/Opera/opera.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"Opera/opera.exe",
);
}
"vivaldi" => {
add_under_program_files("Vivaldi/Application/vivaldi.exe");
add_under_local_app_data("Vivaldi/Application/vivaldi.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"Vivaldi/Application/vivaldi.exe",
);
push_windows_local_path(
&mut paths,
&local_app_data,
"Vivaldi/Application/vivaldi.exe",
);
}
"whale" => {
add_under_program_files("Naver/Naver Whale/Application/whale.exe");
add_under_local_app_data("Naver/Naver Whale/Application/whale.exe");
push_windows_program_paths(
&mut paths,
&program_files,
&program_files_x86,
"Naver/Naver Whale/Application/whale.exe",
);
push_windows_local_path(
&mut paths,
&local_app_data,
"Naver/Naver Whale/Application/whale.exe",
);
}
_ => {}
}
@@ -437,6 +487,28 @@ fn windows_browser_paths(id: &str) -> Vec<PathBuf> {
paths
}
#[cfg(target_os = "windows")]
fn push_windows_program_paths(
paths: &mut Vec<PathBuf>,
program_files: &Option<PathBuf>,
program_files_x86: &Option<PathBuf>,
relative: &str,
) {
if let Some(root) = program_files {
paths.push(root.join(relative));
}
if let Some(root) = program_files_x86 {
paths.push(root.join(relative));
}
}
#[cfg(target_os = "windows")]
fn push_windows_local_path(paths: &mut Vec<PathBuf>, local_app_data: &Option<PathBuf>, relative: &str) {
if let Some(root) = local_app_data {
paths.push(root.join(relative));
}
}
#[cfg(target_os = "linux")]
fn browser_is_available(id: &str) -> bool {
let commands: &[&str] = match id {