Fix v0.4.0 process handler, add override menu (#430)
* Fix Windows and Linux launch * Add process handler selector, pin Prisma * Regenerate lcofkiel * Fix torrential inclusion in image * Fix layouting * Implement tree kill for Windows * Fix server lint
This commit is contained in:
@@ -8,8 +8,17 @@
|
||||
#![deny(clippy::all)]
|
||||
|
||||
use std::{
|
||||
env, fs::File, io::Write, panic::PanicHookInfo, path::Path, str::FromStr,
|
||||
sync::nonpoison::Mutex, time::SystemTime,
|
||||
env,
|
||||
fs::File,
|
||||
io::Write,
|
||||
panic::PanicHookInfo,
|
||||
path::Path,
|
||||
str::FromStr,
|
||||
sync::{
|
||||
atomic::{AtomicBool, Ordering},
|
||||
nonpoison::Mutex,
|
||||
},
|
||||
time::SystemTime,
|
||||
};
|
||||
|
||||
use ::client::{
|
||||
@@ -260,6 +269,7 @@ pub fn run() {
|
||||
get_autostart_enabled,
|
||||
open_process_logs,
|
||||
get_launch_options,
|
||||
get_process_handlers,
|
||||
#[cfg(target_os = "linux")]
|
||||
::process::compat::fetch_proton_paths,
|
||||
#[cfg(target_os = "linux")]
|
||||
@@ -359,8 +369,17 @@ pub fn run() {
|
||||
)
|
||||
.expect("Failed to generate menu");
|
||||
|
||||
if env::var("NO_TRAY_ICON").is_ok_and(|value| value.to_lowercase() == "true") {
|
||||
TRAY_DISABLED.store(true, Ordering::Relaxed);
|
||||
} else if !tray_icon_supported() {
|
||||
warn!(
|
||||
"appindicator library not available at runtime, disabling system tray icon"
|
||||
);
|
||||
TRAY_DISABLED.store(true, Ordering::Relaxed);
|
||||
}
|
||||
|
||||
run_on_tray(|| {
|
||||
TrayIconBuilder::new()
|
||||
let tray = TrayIconBuilder::new()
|
||||
.icon(
|
||||
app.default_window_icon()
|
||||
.expect("Failed to get default window icon")
|
||||
@@ -383,8 +402,12 @@ pub fn run() {
|
||||
warn!("menu event not handled: {:?}", event.id);
|
||||
}
|
||||
})
|
||||
.build(app)
|
||||
.expect("error while setting up tray menu");
|
||||
.build(app);
|
||||
|
||||
if let Err(e) = tray {
|
||||
warn!("failed to set up system tray icon, disabling tray: {e}");
|
||||
TRAY_DISABLED.store(true, Ordering::Relaxed);
|
||||
}
|
||||
});
|
||||
|
||||
{
|
||||
@@ -445,13 +468,30 @@ pub fn run() {
|
||||
});
|
||||
}
|
||||
|
||||
static TRAY_DISABLED: AtomicBool = AtomicBool::new(false);
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
fn tray_icon_supported() -> bool {
|
||||
[
|
||||
"libayatana-appindicator3.so.1",
|
||||
"libappindicator3.so.1",
|
||||
"libayatana-appindicator3.so",
|
||||
"libappindicator3.so",
|
||||
]
|
||||
.iter()
|
||||
.any(|name| unsafe { libloading::Library::new(name) }.is_ok())
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
fn tray_icon_supported() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
fn run_on_tray<T: FnOnce()>(f: T) {
|
||||
if match std::env::var("NO_TRAY_ICON") {
|
||||
Ok(s) => s.to_lowercase() != "true",
|
||||
Err(_) => true,
|
||||
} {
|
||||
(f)();
|
||||
if TRAY_DISABLED.load(Ordering::Relaxed) {
|
||||
return;
|
||||
}
|
||||
(f)();
|
||||
}
|
||||
|
||||
// TODO: Refactor
|
||||
|
||||
@@ -3,7 +3,7 @@ use std::sync::Arc;
|
||||
use process::{
|
||||
PROCESS_MANAGER,
|
||||
error::ProcessError,
|
||||
process_manager::{LaunchOption, ProcessManager},
|
||||
process_manager::{LaunchOption, ProcessHandlerOption, ProcessManager},
|
||||
};
|
||||
use serde::Serialize;
|
||||
use tauri::AppHandle;
|
||||
@@ -16,6 +16,11 @@ pub fn get_launch_options(id: String) -> Result<Vec<LaunchOption>, ProcessError>
|
||||
Ok(launch_options)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn get_process_handlers(id: String) -> Result<Vec<ProcessHandlerOption>, ProcessError> {
|
||||
PROCESS_MANAGER.lock().get_process_handlers(id)
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
#[serde(tag = "result", content = "data")]
|
||||
pub enum LaunchResult {
|
||||
|
||||
Reference in New Issue
Block a user