2022-05-25 14:06:06 +03:00
|
|
|
use crate::{core::Core, utils::init, utils::server};
|
2021-12-26 21:29:28 +03:00
|
|
|
use tauri::{App, AppHandle, Manager};
|
|
|
|
|
|
|
|
/// handle something when start app
|
|
|
|
pub fn resolve_setup(app: &App) {
|
|
|
|
// init app config
|
|
|
|
init::init_app(app.package_info());
|
|
|
|
|
2022-07-06 10:14:33 +03:00
|
|
|
// init core
|
|
|
|
// should be initialized after init_app fix #122
|
|
|
|
let core = Core::new();
|
2021-12-26 21:29:28 +03:00
|
|
|
|
2022-09-05 19:45:01 +03:00
|
|
|
{
|
|
|
|
let verge = core.verge.lock();
|
|
|
|
let singleton = verge.app_singleton_port.clone();
|
|
|
|
|
|
|
|
// setup a simple http server for singleton
|
|
|
|
server::embed_server(&app.handle(), singleton);
|
|
|
|
}
|
|
|
|
|
2022-04-18 20:41:20 +03:00
|
|
|
core.set_win(app.get_window("main"));
|
2022-04-19 09:38:59 +03:00
|
|
|
core.init(app.app_handle());
|
2021-12-26 21:29:28 +03:00
|
|
|
|
2022-07-06 10:14:33 +03:00
|
|
|
// fix #122
|
|
|
|
app.manage(core);
|
|
|
|
|
2022-04-19 09:38:59 +03:00
|
|
|
resolve_window(app);
|
2021-12-26 21:29:28 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/// reset system proxy
|
|
|
|
pub fn resolve_reset(app_handle: &AppHandle) {
|
2022-04-18 20:41:20 +03:00
|
|
|
let core = app_handle.state::<Core>();
|
2022-04-19 20:44:47 +03:00
|
|
|
let mut sysopt = core.sysopt.lock();
|
|
|
|
sysopt.reset_sysproxy();
|
2022-04-25 15:00:11 +03:00
|
|
|
drop(sysopt);
|
|
|
|
|
|
|
|
let mut service = core.service.lock();
|
|
|
|
crate::log_if_err!(service.stop());
|
2021-12-26 21:29:28 +03:00
|
|
|
}
|
2022-02-20 18:46:13 +03:00
|
|
|
|
|
|
|
/// customize the window theme
|
2022-04-19 09:38:59 +03:00
|
|
|
fn resolve_window(app: &App) {
|
2022-02-20 18:46:13 +03:00
|
|
|
let window = app.get_window("main").unwrap();
|
|
|
|
|
|
|
|
#[cfg(target_os = "windows")]
|
|
|
|
{
|
2022-05-09 09:41:26 +03:00
|
|
|
use crate::utils::winhelp;
|
2022-03-03 15:37:06 +03:00
|
|
|
use window_shadows::set_shadow;
|
|
|
|
use window_vibrancy::apply_blur;
|
2022-02-20 18:46:13 +03:00
|
|
|
|
2022-05-09 09:01:14 +03:00
|
|
|
let _ = window.set_decorations(false);
|
|
|
|
let _ = set_shadow(&window, true);
|
2022-05-09 09:41:26 +03:00
|
|
|
|
|
|
|
// todo
|
|
|
|
// win11 disable this feature temporarily due to lag
|
|
|
|
if !winhelp::is_win11() {
|
|
|
|
let _ = apply_blur(&window, None);
|
|
|
|
}
|
2022-02-20 18:46:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(target_os = "macos")]
|
|
|
|
{
|
|
|
|
use tauri::LogicalSize;
|
|
|
|
use tauri::Size::Logical;
|
2022-05-09 09:01:14 +03:00
|
|
|
|
|
|
|
let _ = window.set_decorations(true);
|
|
|
|
let _ = window.set_size(Logical(LogicalSize {
|
|
|
|
width: 800.0,
|
|
|
|
height: 620.0,
|
|
|
|
}));
|
2022-02-20 18:46:13 +03:00
|
|
|
}
|
|
|
|
}
|
2022-05-25 11:45:18 +03:00
|
|
|
|
|
|
|
/// create main window
|
|
|
|
pub fn create_window(app_handle: &AppHandle) {
|
|
|
|
if let Some(window) = app_handle.get_window("main") {
|
|
|
|
let _ = window.unminimize();
|
|
|
|
let _ = window.show();
|
|
|
|
let _ = window.set_focus();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let builder = tauri::window::WindowBuilder::new(
|
|
|
|
app_handle,
|
|
|
|
"main".to_string(),
|
|
|
|
tauri::WindowUrl::App("index.html".into()),
|
|
|
|
)
|
|
|
|
.title("Clash Verge")
|
|
|
|
.center()
|
|
|
|
.fullscreen(false)
|
|
|
|
.min_inner_size(600.0, 520.0);
|
|
|
|
|
|
|
|
#[cfg(target_os = "windows")]
|
|
|
|
{
|
|
|
|
use crate::utils::winhelp;
|
2022-08-14 20:37:26 +03:00
|
|
|
use std::time::Duration;
|
|
|
|
use tokio::time::sleep;
|
2022-05-25 11:45:18 +03:00
|
|
|
use window_shadows::set_shadow;
|
|
|
|
use window_vibrancy::apply_blur;
|
|
|
|
|
2022-05-31 20:04:46 +03:00
|
|
|
match builder
|
|
|
|
.decorations(false)
|
|
|
|
.transparent(true)
|
|
|
|
.inner_size(800.0, 636.0)
|
|
|
|
.build()
|
|
|
|
{
|
2022-05-25 14:06:06 +03:00
|
|
|
Ok(_) => {
|
|
|
|
let app_handle = app_handle.clone();
|
|
|
|
|
|
|
|
tauri::async_runtime::spawn(async move {
|
2022-08-14 20:37:26 +03:00
|
|
|
sleep(Duration::from_secs(1)).await;
|
|
|
|
|
2022-05-25 14:06:06 +03:00
|
|
|
if let Some(window) = app_handle.get_window("main") {
|
2022-06-18 12:28:37 +03:00
|
|
|
let _ = window.show();
|
2022-05-25 14:06:06 +03:00
|
|
|
let _ = set_shadow(&window, true);
|
|
|
|
|
|
|
|
if !winhelp::is_win11() {
|
|
|
|
let _ = apply_blur(&window, None);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2022-05-25 11:45:18 +03:00
|
|
|
}
|
2022-07-17 12:39:44 +03:00
|
|
|
Err(err) => log::error!(target: "app", "{err}"),
|
2022-05-25 11:45:18 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(target_os = "macos")]
|
2022-05-25 14:06:06 +03:00
|
|
|
crate::log_if_err!(builder.decorations(true).inner_size(800.0, 620.0).build());
|
2022-05-25 11:45:18 +03:00
|
|
|
|
|
|
|
#[cfg(target_os = "linux")]
|
2022-05-31 20:04:46 +03:00
|
|
|
crate::log_if_err!(builder
|
|
|
|
.decorations(false)
|
|
|
|
.transparent(true)
|
|
|
|
.inner_size(800.0, 636.0)
|
|
|
|
.build());
|
2022-05-25 11:45:18 +03:00
|
|
|
}
|