更新代码格式

This commit is contained in:
Tlntin
2022-12-27 22:35:09 +08:00
parent 2d7278a44d
commit c6d8495f2b
2 changed files with 66 additions and 94 deletions

View File

@@ -2,12 +2,10 @@
use tauri::MenuItem; use tauri::MenuItem;
use tauri::{ use tauri::{
CustomMenuItem, Menu, Submenu, WindowMenuEvent, window::PlatformWebview, window::PlatformWebview, App, Config, CustomMenuItem, Manager, Menu, Submenu, SystemTray,
Config, SystemTrayMenu, SystemTray, SystemTrayEvent, Manager, SystemTrayEvent, SystemTrayMenu, Window, WindowBuilder, WindowMenuEvent, WindowUrl,
WindowBuilder, WindowUrl, App, Window,
}; };
pub fn get_menu() -> Menu { pub fn get_menu() -> Menu {
// first menu // first menu
let hide = CustomMenuItem::new("hide", "Hide"); let hide = CustomMenuItem::new("hide", "Hide");
@@ -29,12 +27,9 @@ pub fn get_menu() -> Menu {
.add_item(close) .add_item(close)
.add_item(quit); .add_item(quit);
#[cfg(any(target_os = "linux", target_os = "windows"))] #[cfg(any(target_os = "linux", target_os = "windows"))]
let first_menu = Menu::new() let first_menu = Menu::new().add_item(hide).add_item(close).add_item(quit);
.add_item(hide)
.add_item(close)
.add_item(quit);
let first_menu = Submenu::new("File", first_menu); let first_menu = Submenu::new("File", first_menu);
// Hot Key // Hot Key
// let top = CustomMenuItem::new("top", "Top (↑)"); // let top = CustomMenuItem::new("top", "Top (↑)");
// let buttom = CustomMenuItem::new("buttom", "Bottom (↓)"); // let buttom = CustomMenuItem::new("buttom", "Bottom (↓)");
// let previous = CustomMenuItem::new("previous", "Previous (←)"); // let previous = CustomMenuItem::new("previous", "Previous (←)");
@@ -52,7 +47,7 @@ pub fn get_menu() -> Menu {
.add_item(zoom_in) .add_item(zoom_in)
.add_item(zoom_out) .add_item(zoom_out)
.add_item(zoom_reset); .add_item(zoom_reset);
let hot_key_menu = Submenu::new("Hot Key", hot_key); let hot_key_menu = Submenu::new("Hot Key", hot_key);
// Help // Help
// let instructions = CustomMenuItem::new("instruction", "Instruction"); // let instructions = CustomMenuItem::new("instruction", "Instruction");
@@ -64,47 +59,42 @@ pub fn get_menu() -> Menu {
let menu = Menu::new() let menu = Menu::new()
.add_submenu(first_menu) .add_submenu(first_menu)
.add_submenu(hot_key_menu); .add_submenu(hot_key_menu);
// .add_submenu(help_menu);
menu menu
} }
pub fn set_zoom(webview: PlatformWebview, zoom_value: f64) { pub fn set_zoom(webview: PlatformWebview, zoom_value: f64) {
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
{ {
// see https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/struct.WebView.html // see https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/struct.WebView.html
// and https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/trait.WebViewExt.html // and https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/trait.WebViewExt.html
use webkit2gtk::traits::WebViewExt; use webkit2gtk::traits::WebViewExt;
webview.inner().set_zoom_level(zoom_value); webview.inner().set_zoom_level(zoom_value);
} }
#[cfg(windows)] #[cfg(windows)]
unsafe { unsafe {
// see https://docs.rs/webview2-com/0.19.1/webview2_com/Microsoft/Web/WebView2/Win32/struct.ICoreWebView2Controller.html // see https://docs.rs/webview2-com/0.19.1/webview2_com/Microsoft/Web/WebView2/Win32/struct.ICoreWebView2Controller.html
webview.controller().SetZoomFactor(zoom_value).unwrap(); webview.controller().SetZoomFactor(zoom_value).unwrap();
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
unsafe { unsafe {
let () = msg_send![webview.inner(), setPageZoom: zoom_value]; let () = msg_send![webview.inner(), setPageZoom: zoom_value];
let () = msg_send![webview.controller(), removeAllUserScripts]; let () = msg_send![webview.controller(), removeAllUserScripts];
let bg_color: cocoa::base::id = msg_send![class!(NSColor), colorWithDeviceRed:0.5 green:0.2 blue:0.4 alpha:1.]; let bg_color: cocoa::base::id =
let () = msg_send![webview.ns_window(), setBackgroundColor: bg_color]; msg_send![class!(NSColor), colorWithDeviceRed:0.5 green:0.2 blue:0.4 alpha:1.];
} let () = msg_send![webview.ns_window(), setBackgroundColor: bg_color];
}
} }
pub fn set_zoom_out(webview: PlatformWebview) { pub fn set_zoom_out(webview: PlatformWebview) {
set_zoom(webview, 1.25); set_zoom(webview, 1.25);
} }
pub fn set_zoom_in(webview: PlatformWebview) { pub fn set_zoom_in(webview: PlatformWebview) {
set_zoom(webview, 0.75); set_zoom(webview, 0.75);
} }
pub fn zoom_reset(webview: PlatformWebview) { pub fn zoom_reset(webview: PlatformWebview) {
set_zoom(webview, 1.0); set_zoom(webview, 1.0);
} }
@@ -115,25 +105,27 @@ pub fn menu_event_handle(event: WindowMenuEvent) {
"close" => event.window().close().expect("can't close window"), "close" => event.window().close().expect("can't close window"),
"quit" => std::process::exit(0), "quit" => std::process::exit(0),
"zoom_out" => { "zoom_out" => {
event.window() event
.window()
.with_webview(set_zoom_out) .with_webview(set_zoom_out)
.expect("can't set zoom out"); .expect("can't set zoom out");
}, }
"zoom_in" => { "zoom_in" => {
event.window() event
.window()
.with_webview(set_zoom_in) .with_webview(set_zoom_in)
.expect("can't set zoom in"); .expect("can't set zoom in");
}, }
"reset" => { "reset" => {
event.window() event
.window()
.with_webview(zoom_reset) .with_webview(zoom_reset)
.expect("can't reset zoom"); .expect("can't reset zoom");
}, }
_ => {}, _ => {}
} }
} }
pub mod pake { pub mod pake {
use serde::Deserialize; use serde::Deserialize;
@@ -145,17 +137,16 @@ pub mod pake {
pub width: f64, pub width: f64,
pub height: f64, pub height: f64,
pub resizable: bool, pub resizable: bool,
pub url_type: String pub url_type: String,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct UserAgent { pub struct UserAgent {
pub macos: String, pub macos: String,
pub linux: String, pub linux: String,
pub windows: String, pub windows: String,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct PakeConfig { pub struct PakeConfig {
pub windows: Vec<WindowConfig>, pub windows: Vec<WindowConfig>,
@@ -163,21 +154,19 @@ pub mod pake {
} }
} }
use pake::PakeConfig; use pake::PakeConfig;
pub fn get_pake_config() -> (PakeConfig, Config){ pub fn get_pake_config() -> (PakeConfig, Config) {
let pake_config_path = include_str!("../pake.json"); let pake_config_path = include_str!("../pake.json");
let pake_config: PakeConfig = serde_json::from_str(pake_config_path) let pake_config: PakeConfig =
.expect("failed to parse pake config"); serde_json::from_str(pake_config_path).expect("failed to parse pake config");
// println!("{:#?}", config); // println!("{:#?}", config);
let tauri_config_path = include_str!("../tauri.conf.json"); let tauri_config_path = include_str!("../tauri.conf.json");
let tauri_config: Config = serde_json::from_str(tauri_config_path) let tauri_config: Config =
.expect("failed to parse tauri config"); serde_json::from_str(tauri_config_path).expect("failed to parse tauri config");
(pake_config, tauri_config) (pake_config, tauri_config)
} }
pub fn get_system_tray() -> SystemTray { pub fn get_system_tray() -> SystemTray {
let hide = CustomMenuItem::new("hide".to_string(), "Hide"); let hide = CustomMenuItem::new("hide".to_string(), "Hide");
let show = CustomMenuItem::new("show".to_string(), "Show"); let show = CustomMenuItem::new("show".to_string(), "Show");
@@ -191,40 +180,37 @@ pub fn get_system_tray() -> SystemTray {
SystemTray::new().with_menu(tray_menu) SystemTray::new().with_menu(tray_menu)
} }
pub fn system_tray_handle(app: &tauri::AppHandle, event: tauri::SystemTrayEvent) { pub fn system_tray_handle(app: &tauri::AppHandle, event: tauri::SystemTrayEvent) {
if let SystemTrayEvent::MenuItemClick { tray_id: _, id, .. } = event { if let SystemTrayEvent::MenuItemClick { tray_id: _, id, .. } = event {
match id.as_str() { match id.as_str() {
"hide" => { "hide" => {
app.get_window("pake").unwrap().hide().unwrap(); app.get_window("pake").unwrap().hide().unwrap();
}, }
"show" => { "show" => {
app.get_window("pake").unwrap().show().unwrap(); app.get_window("pake").unwrap().show().unwrap();
}, }
"quit" => { "quit" => {
std::process::exit(0); std::process::exit(0);
}, }
"about" => { "about" => {
let _about_window = WindowBuilder::new( let _about_window = WindowBuilder::new(
app, app,
"about", "about",
WindowUrl::App(std::path::PathBuf::from("about_pake.html")) WindowUrl::App(std::path::PathBuf::from("about_pake.html")),
) )
.resizable(true) .resizable(true)
.title("About") .title("About")
.inner_size(100.0, 100.0) .inner_size(100.0, 100.0)
.build() .build()
.expect("can't open about!") .expect("can't open about!");
;
} }
_ => {}, _ => {}
} }
}; };
} }
pub fn get_data_dir(tauri_config: Config) -> std::path::PathBuf { pub fn get_data_dir(tauri_config: Config) -> std::path::PathBuf {
let package_name = tauri_config.package.product_name.unwrap(); let package_name = tauri_config.package.product_name.unwrap();
let home_dir = match home::home_dir() { let home_dir = match home::home_dir() {
Some(path1) => path1, Some(path1) => path1,
None => panic!("Error, can't found you home dir!!"), None => panic!("Error, can't found you home dir!!"),
@@ -240,21 +226,16 @@ pub fn get_data_dir(tauri_config: Config) -> std::path::PathBuf {
data_dir data_dir
} }
pub fn get_window(app: &mut App, config: PakeConfig, data_dir: std::path::PathBuf) -> Window {
pub fn get_window(app: & mut App, config: PakeConfig, data_dir: std::path::PathBuf) -> Window {
let window_config = config.windows.first().unwrap(); let window_config = config.windows.first().unwrap();
let user_agent = config.user_agent; let user_agent = config.user_agent;
let url = match window_config.url_type.as_str() { let url = match window_config.url_type.as_str() {
"web" => WindowUrl::External(window_config.url.parse().unwrap()), "web" => WindowUrl::External(window_config.url.parse().unwrap()),
"local" => WindowUrl::App(std::path::PathBuf::from(&window_config.url)), "local" => WindowUrl::App(std::path::PathBuf::from(&window_config.url)),
_ => panic!("url type only can be web or local"), _ => panic!("url type only can be web or local"),
}; };
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
let window = WindowBuilder::new( let window = WindowBuilder::new(app, "pake", url)
app,
"pake",
url
)
.title("") .title("")
.user_agent(user_agent.macos.as_str()) .user_agent(user_agent.macos.as_str())
.resizable(window_config.resizable) .resizable(window_config.resizable)
@@ -269,19 +250,14 @@ pub fn get_window(app: & mut App, config: PakeConfig, data_dir: std::path::PathB
let user_agent = user_agent.linux.as_str(); let user_agent = user_agent.linux.as_str();
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
let user_agent = user_agent.windows.as_str(); let user_agent = user_agent.windows.as_str();
WindowBuilder::new( WindowBuilder::new(app, "pake", url)
app, .title("")
"pake", .data_directory(data_dir)
url .resizable(window_config.resizable)
) .fullscreen(window_config.fullscreen)
.title("") .user_agent(user_agent)
.data_directory(data_dir) .inner_size(window_config.width, window_config.height)
.resizable(window_config.resizable) .initialization_script(include_str!("pake.js"))
.fullscreen(window_config.fullscreen)
.user_agent(user_agent)
.inner_size(window_config.width, window_config.height)
.initialization_script(include_str!("pake.js"))
}; };
window.build().unwrap() window.build().unwrap()
}
}

View File

@@ -3,11 +3,9 @@
windows_subsystem = "windows" windows_subsystem = "windows"
)] )]
use app::{get_data_dir, get_pake_config, get_system_tray, get_window, system_tray_handle};
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
use app::{get_menu, menu_event_handle}; use app::{get_menu, menu_event_handle};
use app::{get_window, get_system_tray, get_data_dir, get_pake_config, system_tray_handle};
pub fn run_app() { pub fn run_app() {
let system_tray = get_system_tray(); let system_tray = get_system_tray();
@@ -58,8 +56,6 @@ pub fn run_app() {
} }
} }
fn main() { fn main() {
run_app() run_app()
} }