chore: try to fix service not started on linux

This commit is contained in:
huzibaca
2024-10-18 22:30:29 +08:00
parent 770f031b8b
commit ee78b7898b
12 changed files with 396 additions and 54 deletions

View File

@@ -47,11 +47,9 @@ pub fn app_home_dir() -> Result<PathBuf> {
let app_handle = handle::Handle::global().app_handle().unwrap();
match app_handle.path().data_dir() {
Ok(dir) => {
Ok(dir.join(APP_ID))
}
Ok(dir) => Ok(dir.join(APP_ID)),
Err(e) => {
log::error!("Failed to get the app home directory: {}", e);
log::error!(target:"app", "Failed to get the app home directory: {}", e);
Err(anyhow::anyhow!("Failed to get the app homedirectory"))
}
}
@@ -61,11 +59,9 @@ pub fn app_home_dir() -> Result<PathBuf> {
pub fn app_resources_dir() -> Result<PathBuf> {
let app_handle = handle::Handle::global().app_handle().unwrap();
match app_handle.path().resource_dir() {
Ok(dir) => {
Ok(dir.join("resources"))
}
Ok(dir) => Ok(dir.join("resources")),
Err(e) => {
log::error!("Failed to get the resource directory: {}", e);
log::error!(target:"app", "Failed to get the resource directory: {}", e);
Err(anyhow::anyhow!("Failed to get the resource directory"))
}
}

View File

@@ -105,6 +105,26 @@ pub fn open_file(app: tauri::AppHandle, path: PathBuf) -> Result<()> {
Ok(())
}
#[cfg(target_os = "linux")]
pub fn linux_elevator() -> String {
use std::process::Command;
match Command::new("which").arg("sudo").output() {
Ok(output) => {
if !output.stdout.is_empty() {
// Convert the output to a string slice
if let Ok(path) = std::str::from_utf8(&output.stdout) {
path.trim().to_string()
} else {
"sudo".to_string()
}
} else {
"sudo".to_string()
}
}
Err(_) => "sudo".to_string(),
}
}
#[macro_export]
macro_rules! error {
($result: expr) => {

View File

@@ -195,8 +195,10 @@ pub fn init_resources() -> Result<()> {
#[cfg(target_os = "windows")]
let file_list = ["Country.mmdb", "geoip.dat", "geosite.dat"];
#[cfg(not(target_os = "windows"))]
#[cfg(target_os = "macos")]
let file_list = ["Country.mmdb", "geoip.dat", "geosite.dat"];
#[cfg(target_os = "linux")]
let file_list: [&str; 0] = [];
// copy the resource file
// if the source file is newer than the destination file, copy it over
@@ -204,12 +206,13 @@ pub fn init_resources() -> Result<()> {
let src_path = res_dir.join(file);
let dest_path = app_dir.join(file);
let test_dest_path = test_dir.join(file);
log::info!(target: "app", "src_path: {src_path:?}, dest_path: {dest_path:?}");
let handle_copy = |dest: &PathBuf| {
match fs::copy(&src_path, dest) {
Ok(_) => log::debug!(target: "app", "resources copied '{file}'"),
Err(err) => {
log::error!(target: "app", "failed to copy resources '{file}', {err}")
log::error!(target: "app", "failed to copy resources '{file}' to '{dest:?}', {err}")
}
};
};

View File

@@ -43,12 +43,6 @@ pub async fn resolve_setup(app: &mut App) {
handle::Handle::global().init(app.app_handle());
VERSION.get_or_init(|| version.clone());
if service::check_service().await.is_err() {
log_err!(service::reinstall_service().await);
//延迟启动,避免闪屏
std::thread::sleep(std::time::Duration::from_millis(1000));
}
log_err!(init::init_config());
log_err!(init::init_resources());
log_err!(init::init_scheme());
@@ -56,18 +50,22 @@ pub async fn resolve_setup(app: &mut App) {
// 处理随机端口
log_err!(resolve_random_port_config());
// 启动核心
log::trace!("init config");
log::trace!(target:"app", "init config");
log_err!(Config::init_config().await);
log::trace!("launch core");
if service::check_service().await.is_err() {
log_err!(service::reinstall_service().await);
std::thread::sleep(std::time::Duration::from_millis(1000));
}
log::trace!(target: "app", "launch core");
log_err!(CoreManager::global().init().await);
// setup a simple http server for singleton
log::trace!("launch embed server");
log::trace!(target: "app", "launch embed server");
server::embed_server();
log::trace!("init system tray");
log::trace!(target: "app", "init system tray");
log_err!(tray::Tray::create_systray());
let silent_start = { Config::verge().data().enable_silent_start };
@@ -160,7 +158,7 @@ pub fn create_window() {
.latest()
.window_is_maximized
.unwrap_or(false);
log::trace!("try to calculate the monitor size");
log::trace!(target:"app", "try to calculate the monitor size");
let center = (|| -> Result<bool> {
let mut center = false;
let monitor = win.current_monitor()?.ok_or(anyhow::anyhow!(""))?;
@@ -220,7 +218,7 @@ pub fn save_window_size_position(save_to_file: bool) -> Result<()> {
}
pub async fn resolve_scheme(param: String) -> Result<()> {
log::info!("received deep link: {}", param);
log::info!(target:"app", "received deep link: {}", param);
let app_handle = handle::Handle::global().app_handle().unwrap();