support macos
This commit is contained in:
@@ -3,6 +3,60 @@ use std::{env, path::PathBuf};
|
|||||||
use crate::models::BrowserDefinition;
|
use crate::models::BrowserDefinition;
|
||||||
|
|
||||||
pub fn browser_definitions() -> Vec<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![
|
vec![
|
||||||
BrowserDefinition {
|
BrowserDefinition {
|
||||||
id: "chrome",
|
id: "chrome",
|
||||||
@@ -131,6 +185,8 @@ fn resolve_executable_candidate(candidate: &ExecutableCandidate) -> Option<PathB
|
|||||||
ExecutableCandidate::LocalAppData(segments) => env::var_os("LOCALAPPDATA")
|
ExecutableCandidate::LocalAppData(segments) => env::var_os("LOCALAPPDATA")
|
||||||
.map(PathBuf::from)
|
.map(PathBuf::from)
|
||||||
.map(|root| join_segments(root, segments)),
|
.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]),
|
ProgramFiles(&'static [&'static str]),
|
||||||
ProgramFilesX86(&'static [&'static str]),
|
ProgramFilesX86(&'static [&'static str]),
|
||||||
LocalAppData(&'static [&'static str]),
|
LocalAppData(&'static [&'static str]),
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
Absolute(&'static str),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ use crate::{
|
|||||||
BrowserConfigEntry, BrowserConfigListResponse, BrowserConfigSource,
|
BrowserConfigEntry, BrowserConfigListResponse, BrowserConfigSource,
|
||||||
CreateCustomBrowserConfigInput, CustomBrowserConfigRecord, StoredBrowserConfigs,
|
CreateCustomBrowserConfigInput, CustomBrowserConfigRecord, StoredBrowserConfigs,
|
||||||
},
|
},
|
||||||
utils::local_app_data_dir,
|
utils::platform_user_data_root_dir,
|
||||||
};
|
};
|
||||||
|
|
||||||
const CONFIG_FILE_NAME: &str = "browser-configs.json";
|
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> {
|
fn default_browser_configs() -> Result<Vec<BrowserConfigEntry>, String> {
|
||||||
let local_app_data = local_app_data_dir().ok_or_else(|| {
|
let user_data_root = platform_user_data_root_dir().ok_or_else(|| {
|
||||||
"Unable to resolve the LOCALAPPDATA directory for the current user.".to_string()
|
"Unable to resolve the default browser data directory for the current user.".to_string()
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
Ok(browser_definitions()
|
Ok(browser_definitions()
|
||||||
@@ -123,7 +123,7 @@ fn default_browser_configs() -> Result<Vec<BrowserConfigEntry>, String> {
|
|||||||
let user_data_path = definition
|
let user_data_path = definition
|
||||||
.local_app_data_segments
|
.local_app_data_segments
|
||||||
.iter()
|
.iter()
|
||||||
.fold(local_app_data.clone(), |path, segment| path.join(segment));
|
.fold(user_data_root.clone(), |path, segment| path.join(segment));
|
||||||
|
|
||||||
BrowserConfigEntry {
|
BrowserConfigEntry {
|
||||||
id: definition.id.to_string(),
|
id: definition.id.to_string(),
|
||||||
|
|||||||
@@ -8,7 +8,14 @@ use std::{
|
|||||||
use base64::{engine::general_purpose::STANDARD, Engine as _};
|
use base64::{engine::general_purpose::STANDARD, Engine as _};
|
||||||
use serde_json::Value;
|
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("LOCALAPPDATA").map(PathBuf::from).or_else(|| {
|
||||||
env::var_os("USERPROFILE")
|
env::var_os("USERPROFILE")
|
||||||
.map(PathBuf::from)
|
.map(PathBuf::from)
|
||||||
|
|||||||
Reference in New Issue
Block a user