Skip to content

Commit 72f083c

Browse files
committed
[rust] Refactor logic to execute commands in the shell
1 parent 49e8d43 commit 72f083c

File tree

10 files changed

+216
-224
lines changed

10 files changed

+216
-224
lines changed

rust/src/chrome.rs

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,9 @@ use crate::metadata::{
3434
create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata,
3535
};
3636
use crate::{
37-
create_browser_metadata, create_http_client, download_to_tmp_folder, format_one_arg,
38-
format_three_args, get_browser_version_from_metadata, uncompress, SeleniumManager, BETA,
39-
DASH_DASH_VERSION, DEV, DOUBLE_QUOTE, NIGHTLY, OFFLINE_REQUEST_ERR_MSG, REG_QUERY,
40-
SINGLE_QUOTE, STABLE, WMIC_COMMAND,
37+
create_browser_metadata, create_http_client, download_to_tmp_folder, format_three_args,
38+
get_browser_version_from_metadata, uncompress, SeleniumManager, BETA, DASH_DASH_VERSION, DEV,
39+
NIGHTLY, OFFLINE_REQUEST_ERR_MSG, REG_VERSION_ARG, STABLE,
4140
};
4241

4342
pub const CHROME_NAME: &str = "chrome";
@@ -389,37 +388,11 @@ impl SeleniumManager for ChromeManager {
389388
}
390389

391390
fn discover_browser_version(&mut self) -> Option<String> {
392-
let mut commands;
393-
let mut browser_path = self.get_browser_path().to_string();
394-
let escaped_browser_path;
395-
if browser_path.is_empty() {
396-
match self.detect_browser_path() {
397-
Some(path) => {
398-
browser_path = path_buf_to_string(path);
399-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
400-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
401-
if !self.is_browser_version_unstable() {
402-
commands.push(format_one_arg(
403-
REG_QUERY,
404-
r#"HKCU\Software\Google\Chrome\BLBeacon"#,
405-
));
406-
}
407-
}
408-
_ => return None,
409-
}
410-
} else {
411-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
412-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
413-
}
414-
if !WINDOWS.is(self.get_os()) {
415-
commands = vec![
416-
format_three_args(DASH_DASH_VERSION, "", &escaped_browser_path, ""),
417-
format_three_args(DASH_DASH_VERSION, DOUBLE_QUOTE, &browser_path, DOUBLE_QUOTE),
418-
format_three_args(DASH_DASH_VERSION, SINGLE_QUOTE, &browser_path, SINGLE_QUOTE),
419-
format_three_args(DASH_DASH_VERSION, "", &browser_path, ""),
420-
]
421-
}
422-
self.detect_browser_version(commands)
391+
self.discover_general_browser_version(
392+
r#"HKCU\Software\Google\Chrome\BLBeacon"#,
393+
REG_VERSION_ARG,
394+
DASH_DASH_VERSION,
395+
)
423396
}
424397

425398
fn get_driver_name(&self) -> &str {

rust/src/config.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use crate::config::OS::{LINUX, MACOS, WINDOWS};
1919
use crate::files::get_cache_folder;
2020
use crate::shell::run_shell_command_by_os;
21-
use crate::{format_one_arg, REQUEST_TIMEOUT_SEC, UNAME_COMMAND};
21+
use crate::{format_one_arg, Command, REQUEST_TIMEOUT_SEC, UNAME_COMMAND};
2222
use crate::{ARCH_AMD64, ARCH_ARM64, ARCH_X86, TTL_BROWSERS_SEC, TTL_DRIVERS_SEC, WMIC_COMMAND_OS};
2323
use std::env;
2424
use std::env::consts::OS;
@@ -50,8 +50,8 @@ impl ManagerConfig {
5050
pub fn default(browser_name: &str, driver_name: &str) -> ManagerConfig {
5151
let self_os = OS;
5252
let self_arch = if WINDOWS.is(self_os) {
53-
let wmic_output =
54-
run_shell_command_by_os(self_os, vec![WMIC_COMMAND_OS]).unwrap_or_default();
53+
let wmic_command = Command::new_single(WMIC_COMMAND_OS.to_string());
54+
let wmic_output = run_shell_command_by_os(self_os, wmic_command).unwrap_or_default();
5555
if wmic_output.contains("32") {
5656
ARCH_X86.to_string()
5757
} else if wmic_output.contains("ARM") {
@@ -60,16 +60,16 @@ impl ManagerConfig {
6060
ARCH_AMD64.to_string()
6161
}
6262
} else {
63-
let uname_a = format_one_arg(UNAME_COMMAND, "a");
64-
if run_shell_command_by_os(self_os, vec![&uname_a])
63+
let uname_a_command = Command::new_single(format_one_arg(UNAME_COMMAND, "a"));
64+
if run_shell_command_by_os(self_os, uname_a_command)
6565
.unwrap_or_default()
6666
.to_ascii_lowercase()
6767
.contains(ARCH_ARM64)
6868
{
6969
ARCH_ARM64.to_string()
7070
} else {
71-
let uname_m = format_one_arg(UNAME_COMMAND, "m");
72-
run_shell_command_by_os(self_os, vec![&uname_m]).unwrap_or_default()
71+
let uname_m_command = Command::new_single(format_one_arg(UNAME_COMMAND, "m"));
72+
run_shell_command_by_os(self_os, uname_m_command).unwrap_or_default()
7373
}
7474
};
7575

rust/src/edge.rs

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,13 @@ use std::path::PathBuf;
2424
use crate::config::ARCH::{ARM64, X32};
2525
use crate::config::OS::{LINUX, MACOS, WINDOWS};
2626
use crate::downloads::read_version_from_link;
27-
use crate::files::{compose_driver_path_in_cache, path_buf_to_string, BrowserPath};
27+
use crate::files::{compose_driver_path_in_cache, BrowserPath};
2828
use crate::metadata::{
2929
create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata,
3030
};
3131
use crate::{
32-
create_http_client, format_one_arg, format_three_args, Logger, SeleniumManager, BETA,
33-
DASH_DASH_VERSION, DEV, DOUBLE_QUOTE, NIGHTLY, OFFLINE_REQUEST_ERR_MSG, REG_QUERY,
34-
SINGLE_QUOTE, STABLE, WMIC_COMMAND,
32+
create_http_client, Logger, SeleniumManager, BETA, DASH_DASH_VERSION, DEV, NIGHTLY,
33+
OFFLINE_REQUEST_ERR_MSG, REG_VERSION_ARG, STABLE,
3534
};
3635

3736
pub const EDGE_NAMES: &[&str] = &["edge", "msedge", "microsoftedge"];
@@ -122,37 +121,11 @@ impl SeleniumManager for EdgeManager {
122121
}
123122

124123
fn discover_browser_version(&mut self) -> Option<String> {
125-
let mut commands;
126-
let mut browser_path = self.get_browser_path().to_string();
127-
let escaped_browser_path;
128-
if browser_path.is_empty() {
129-
match self.detect_browser_path() {
130-
Some(path) => {
131-
browser_path = path_buf_to_string(path);
132-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
133-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
134-
if !self.is_browser_version_unstable() {
135-
commands.push(format_one_arg(
136-
REG_QUERY,
137-
r#"HKCU\Software\Microsoft\Edge\BLBeacon"#,
138-
));
139-
}
140-
}
141-
_ => return None,
142-
}
143-
} else {
144-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
145-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
146-
}
147-
if !WINDOWS.is(self.get_os()) {
148-
commands = vec![
149-
format_three_args(DASH_DASH_VERSION, "", &escaped_browser_path, ""),
150-
format_three_args(DASH_DASH_VERSION, DOUBLE_QUOTE, &browser_path, DOUBLE_QUOTE),
151-
format_three_args(DASH_DASH_VERSION, SINGLE_QUOTE, &browser_path, SINGLE_QUOTE),
152-
format_three_args(DASH_DASH_VERSION, "", &browser_path, ""),
153-
]
154-
}
155-
self.detect_browser_version(commands)
124+
self.discover_general_browser_version(
125+
r#"HKCU\Software\Microsoft\Edge\BLBeacon"#,
126+
REG_VERSION_ARG,
127+
DASH_DASH_VERSION,
128+
)
156129
}
157130

158131
fn get_driver_name(&self) -> &str {

rust/src/firefox.rs

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,13 @@ use std::path::PathBuf;
2424
use crate::config::ARCH::{ARM64, X32};
2525
use crate::config::OS::{LINUX, MACOS, WINDOWS};
2626
use crate::downloads::read_redirect_from_link;
27-
use crate::files::{compose_driver_path_in_cache, path_buf_to_string, BrowserPath};
27+
use crate::files::{compose_driver_path_in_cache, BrowserPath};
2828
use crate::metadata::{
2929
create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata,
3030
};
3131
use crate::{
32-
create_http_client, format_one_arg, format_three_args, format_two_args, Logger,
33-
SeleniumManager, BETA, DASH_VERSION, DEV, DOUBLE_QUOTE, NIGHTLY, OFFLINE_REQUEST_ERR_MSG,
34-
REG_QUERY_FIND, SINGLE_QUOTE, STABLE, WMIC_COMMAND,
32+
create_http_client, Logger, SeleniumManager, BETA, DASH_VERSION, DEV, NIGHTLY,
33+
OFFLINE_REQUEST_ERR_MSG, REG_CURRENT_VERSION_ARG, STABLE,
3534
};
3635

3736
pub const FIREFOX_NAME: &str = "firefox";
@@ -119,38 +118,11 @@ impl SeleniumManager for FirefoxManager {
119118
}
120119

121120
fn discover_browser_version(&mut self) -> Option<String> {
122-
let mut commands;
123-
let mut browser_path = self.get_browser_path().to_string();
124-
let escaped_browser_path;
125-
if browser_path.is_empty() {
126-
match self.detect_browser_path() {
127-
Some(path) => {
128-
browser_path = path_buf_to_string(path);
129-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
130-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
131-
if !self.is_browser_version_unstable() {
132-
commands.push(format_two_args(
133-
REG_QUERY_FIND,
134-
r#"HKCU\Software\Mozilla"#,
135-
self.browser_name,
136-
));
137-
}
138-
}
139-
_ => return None,
140-
}
141-
} else {
142-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
143-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
144-
}
145-
if !WINDOWS.is(self.get_os()) {
146-
commands = vec![
147-
format_three_args(DASH_VERSION, "", &escaped_browser_path, ""),
148-
format_three_args(DASH_VERSION, DOUBLE_QUOTE, &browser_path, DOUBLE_QUOTE),
149-
format_three_args(DASH_VERSION, SINGLE_QUOTE, &browser_path, SINGLE_QUOTE),
150-
format_three_args(DASH_VERSION, "", &browser_path, ""),
151-
]
152-
}
153-
self.detect_browser_version(commands)
121+
self.discover_general_browser_version(
122+
r#"HKCU\Software\Mozilla\Mozilla Firefox"#,
123+
REG_CURRENT_VERSION_ARG,
124+
DASH_VERSION,
125+
)
154126
}
155127

156128
fn get_driver_name(&self) -> &str {

rust/src/iexplorer.rs

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ use std::collections::HashMap;
2121
use std::error::Error;
2222
use std::path::PathBuf;
2323

24-
use crate::files::{compose_driver_path_in_cache, path_buf_to_string, BrowserPath};
24+
use crate::files::{compose_driver_path_in_cache, BrowserPath};
2525

2626
use crate::downloads::parse_json_from_url;
2727
use crate::{
28-
create_http_client, format_one_arg, parse_version, Logger, SeleniumManager,
29-
OFFLINE_REQUEST_ERR_MSG, REG_QUERY, STABLE, WINDOWS, WMIC_COMMAND,
28+
create_http_client, parse_version, Logger, SeleniumManager, OFFLINE_REQUEST_ERR_MSG,
29+
REG_VERSION_ARG, STABLE, WINDOWS,
3030
};
3131

3232
use crate::metadata::{
@@ -95,30 +95,11 @@ impl SeleniumManager for IExplorerManager {
9595
}
9696

9797
fn discover_browser_version(&mut self) -> Option<String> {
98-
let commands;
99-
let mut browser_path = self.get_browser_path().to_string();
100-
let escaped_browser_path;
101-
if browser_path.is_empty() {
102-
match self.detect_browser_path() {
103-
Some(path) => {
104-
browser_path = path_buf_to_string(path);
105-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
106-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
107-
}
108-
None => {
109-
commands = vec![
110-
(format_one_arg(
111-
REG_QUERY,
112-
r#"HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer"#,
113-
)),
114-
];
115-
}
116-
}
117-
} else {
118-
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
119-
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
120-
}
121-
self.detect_browser_version(commands)
98+
self.discover_general_browser_version(
99+
r#"HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer"#,
100+
REG_VERSION_ARG,
101+
"",
102+
)
122103
}
123104

124105
fn get_driver_name(&self) -> &str {

0 commit comments

Comments
 (0)