support macos
This commit is contained in:
@@ -3,6 +3,60 @@ use std::{env, path::PathBuf};
|
||||
use crate::models::BrowserDefinition;
|
||||
|
||||
pub fn browser_definitions() -> Vec<BrowserDefinition> {
|
||||
#[cfg(target_os = "macos")]
|
||||
{
|
||||
return vec![
|
||||
BrowserDefinition {
|
||||
id: "chrome",
|
||||
name: "Google Chrome",
|
||||
local_app_data_segments: &["Google", "Chrome"],
|
||||
executable_candidates: &[ExecutableCandidate::Absolute(
|
||||
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
||||
)],
|
||||
},
|
||||
BrowserDefinition {
|
||||
id: "edge",
|
||||
name: "Microsoft Edge",
|
||||
local_app_data_segments: &["Microsoft Edge"],
|
||||
executable_candidates: &[ExecutableCandidate::Absolute(
|
||||
"/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",
|
||||
)],
|
||||
},
|
||||
BrowserDefinition {
|
||||
id: "brave",
|
||||
name: "Brave",
|
||||
local_app_data_segments: &["BraveSoftware", "Brave-Browser"],
|
||||
executable_candidates: &[ExecutableCandidate::Absolute(
|
||||
"/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
|
||||
)],
|
||||
},
|
||||
BrowserDefinition {
|
||||
id: "vivaldi",
|
||||
name: "Vivaldi",
|
||||
local_app_data_segments: &["Vivaldi"],
|
||||
executable_candidates: &[ExecutableCandidate::Absolute(
|
||||
"/Applications/Vivaldi.app/Contents/MacOS/Vivaldi",
|
||||
)],
|
||||
},
|
||||
BrowserDefinition {
|
||||
id: "yandex",
|
||||
name: "Yandex Browser",
|
||||
local_app_data_segments: &["Yandex", "YandexBrowser"],
|
||||
executable_candidates: &[ExecutableCandidate::Absolute(
|
||||
"/Applications/Yandex.app/Contents/MacOS/Yandex",
|
||||
)],
|
||||
},
|
||||
BrowserDefinition {
|
||||
id: "chromium",
|
||||
name: "Chromium",
|
||||
local_app_data_segments: &["Chromium"],
|
||||
executable_candidates: &[ExecutableCandidate::Absolute(
|
||||
"/Applications/Chromium.app/Contents/MacOS/Chromium",
|
||||
)],
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
vec![
|
||||
BrowserDefinition {
|
||||
id: "chrome",
|
||||
@@ -131,6 +185,8 @@ fn resolve_executable_candidate(candidate: &ExecutableCandidate) -> Option<PathB
|
||||
ExecutableCandidate::LocalAppData(segments) => env::var_os("LOCALAPPDATA")
|
||||
.map(PathBuf::from)
|
||||
.map(|root| join_segments(root, segments)),
|
||||
#[cfg(target_os = "macos")]
|
||||
ExecutableCandidate::Absolute(path) => Some(PathBuf::from(path)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,4 +201,6 @@ pub enum ExecutableCandidate {
|
||||
ProgramFiles(&'static [&'static str]),
|
||||
ProgramFilesX86(&'static [&'static str]),
|
||||
LocalAppData(&'static [&'static str]),
|
||||
#[cfg(target_os = "macos")]
|
||||
Absolute(&'static str),
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ use crate::{
|
||||
BrowserConfigEntry, BrowserConfigListResponse, BrowserConfigSource,
|
||||
CreateCustomBrowserConfigInput, CustomBrowserConfigRecord, StoredBrowserConfigs,
|
||||
},
|
||||
utils::local_app_data_dir,
|
||||
utils::platform_user_data_root_dir,
|
||||
};
|
||||
|
||||
const CONFIG_FILE_NAME: &str = "browser-configs.json";
|
||||
@@ -113,8 +113,8 @@ pub fn find_browser_config(app: &AppHandle, config_id: &str) -> Result<BrowserCo
|
||||
}
|
||||
|
||||
fn default_browser_configs() -> Result<Vec<BrowserConfigEntry>, String> {
|
||||
let local_app_data = local_app_data_dir().ok_or_else(|| {
|
||||
"Unable to resolve the LOCALAPPDATA directory for the current user.".to_string()
|
||||
let user_data_root = platform_user_data_root_dir().ok_or_else(|| {
|
||||
"Unable to resolve the default browser data directory for the current user.".to_string()
|
||||
})?;
|
||||
|
||||
Ok(browser_definitions()
|
||||
@@ -123,7 +123,7 @@ fn default_browser_configs() -> Result<Vec<BrowserConfigEntry>, String> {
|
||||
let user_data_path = definition
|
||||
.local_app_data_segments
|
||||
.iter()
|
||||
.fold(local_app_data.clone(), |path, segment| path.join(segment));
|
||||
.fold(user_data_root.clone(), |path, segment| path.join(segment));
|
||||
|
||||
BrowserConfigEntry {
|
||||
id: definition.id.to_string(),
|
||||
|
||||
@@ -8,7 +8,14 @@ use std::{
|
||||
use base64::{engine::general_purpose::STANDARD, Engine as _};
|
||||
use serde_json::Value;
|
||||
|
||||
pub fn local_app_data_dir() -> Option<PathBuf> {
|
||||
pub fn platform_user_data_root_dir() -> Option<PathBuf> {
|
||||
#[cfg(target_os = "macos")]
|
||||
{
|
||||
return env::var_os("HOME")
|
||||
.map(PathBuf::from)
|
||||
.map(|path| path.join("Library").join("Application Support"));
|
||||
}
|
||||
|
||||
env::var_os("LOCALAPPDATA").map(PathBuf::from).or_else(|| {
|
||||
env::var_os("USERPROFILE")
|
||||
.map(PathBuf::from)
|
||||
|
||||
Reference in New Issue
Block a user