pake-cli 3.6.1 → 3.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +327 -222
- package/dist/dev.js +1100 -215
- package/dist/dev.js.map +1 -1
- package/package.json +3 -4
- package/src-tauri/.cargo/config.toml +10 -0
- package/src-tauri/.pake/pake.json +42 -0
- package/src-tauri/.pake/tauri.conf.json +24 -0
- package/src-tauri/.pake/tauri.linux.conf.json +13 -0
- package/src-tauri/.pake/tauri.macos.conf.json +11 -0
- package/src-tauri/.pake/tauri.windows.conf.json +15 -0
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +7 -2
- package/src-tauri/icons/icon.icns +0 -0
- package/src-tauri/icons/icon.png +0 -0
- package/src-tauri/src/app/invoke.rs +57 -27
- package/src-tauri/src/app/menu.rs +244 -0
- package/src-tauri/src/app/mod.rs +1 -0
- package/src-tauri/src/lib.rs +12 -236
- package/src-tauri/assets/com-tw93-weekly.desktop +0 -10
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"windows": [
|
|
3
|
+
{
|
|
4
|
+
"url": "https://twitter.com/",
|
|
5
|
+
"url_type": "web",
|
|
6
|
+
"hide_title_bar": false,
|
|
7
|
+
"fullscreen": false,
|
|
8
|
+
"width": 1200,
|
|
9
|
+
"height": 780,
|
|
10
|
+
"resizable": true,
|
|
11
|
+
"always_on_top": false,
|
|
12
|
+
"dark_mode": false,
|
|
13
|
+
"activation_shortcut": "",
|
|
14
|
+
"disabled_web_shortcuts": false,
|
|
15
|
+
"hide_on_close": true,
|
|
16
|
+
"incognito": false,
|
|
17
|
+
"enable_wasm": false,
|
|
18
|
+
"enable_drag_drop": false,
|
|
19
|
+
"maximize": false,
|
|
20
|
+
"start_to_tray": false,
|
|
21
|
+
"force_internal_navigation": false,
|
|
22
|
+
"zoom": 100,
|
|
23
|
+
"min_width": 0,
|
|
24
|
+
"min_height": 0,
|
|
25
|
+
"ignore_certificate_errors": false
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"user_agent": {
|
|
29
|
+
"macos": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15",
|
|
30
|
+
"linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
|
|
31
|
+
"windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
|
|
32
|
+
},
|
|
33
|
+
"system_tray": {
|
|
34
|
+
"macos": false,
|
|
35
|
+
"linux": true,
|
|
36
|
+
"windows": true
|
|
37
|
+
},
|
|
38
|
+
"system_tray_path": "png/icon_512.png",
|
|
39
|
+
"inject": [],
|
|
40
|
+
"proxy_url": "",
|
|
41
|
+
"multi_instance": false
|
|
42
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"productName": "twitter",
|
|
3
|
+
"identifier": "com.pake.4fd9c9",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"app": {
|
|
6
|
+
"withGlobalTauri": true,
|
|
7
|
+
"security": {
|
|
8
|
+
"headers": {},
|
|
9
|
+
"csp": null
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"build": {
|
|
13
|
+
"frontendDist": "../dist"
|
|
14
|
+
},
|
|
15
|
+
"bundle": {
|
|
16
|
+
"icon": [
|
|
17
|
+
"icons/icon.icns"
|
|
18
|
+
],
|
|
19
|
+
"active": true,
|
|
20
|
+
"targets": [
|
|
21
|
+
"app"
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bundle": {
|
|
3
|
+
"icon": ["png/weekly_256.ico", "png/weekly_32.ico"],
|
|
4
|
+
"active": true,
|
|
5
|
+
"resources": ["png/weekly_32.ico"],
|
|
6
|
+
"targets": ["msi"],
|
|
7
|
+
"windows": {
|
|
8
|
+
"digestAlgorithm": "sha256",
|
|
9
|
+
"wix": {
|
|
10
|
+
"language": ["en-US"],
|
|
11
|
+
"template": "assets/main.wxs"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
package/src-tauri/Cargo.lock
CHANGED
package/src-tauri/Cargo.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "pake"
|
|
3
|
-
version = "3.6.
|
|
3
|
+
version = "3.6.3"
|
|
4
4
|
description = "🤱🏻 Turn any webpage into a desktop app with Rust."
|
|
5
5
|
authors = ["Tw93"]
|
|
6
6
|
license = "MIT"
|
|
@@ -21,7 +21,12 @@ tauri-build = { version = "2.5.3", features = [] }
|
|
|
21
21
|
serde_json = "1.0.145"
|
|
22
22
|
serde = { version = "1.0.228", features = ["derive"] }
|
|
23
23
|
tokio = { version = "1.48.0", features = ["full"] }
|
|
24
|
-
tauri = { version = "2.9.4", features = [
|
|
24
|
+
tauri = { version = "2.9.4", features = [
|
|
25
|
+
"tray-icon",
|
|
26
|
+
"image-ico",
|
|
27
|
+
"image-png",
|
|
28
|
+
"macos-proxy",
|
|
29
|
+
] }
|
|
25
30
|
tauri-plugin-window-state = "2.4.1"
|
|
26
31
|
tauri-plugin-oauth = "2.0.0"
|
|
27
32
|
tauri-plugin-http = "2.5.4"
|
|
Binary file
|
package/src-tauri/icons/icon.png
CHANGED
|
Binary file
|
|
@@ -32,29 +32,48 @@ pub struct NotificationParams {
|
|
|
32
32
|
|
|
33
33
|
#[command]
|
|
34
34
|
pub async fn download_file(app: AppHandle, params: DownloadFileParams) -> Result<(), String> {
|
|
35
|
-
let window: WebviewWindow = app.get_webview_window("pake").
|
|
35
|
+
let window: WebviewWindow = app.get_webview_window("pake").ok_or("Window not found")?;
|
|
36
|
+
|
|
36
37
|
show_toast(
|
|
37
38
|
&window,
|
|
38
39
|
&get_download_message_with_lang(MessageType::Start, params.language.clone()),
|
|
39
40
|
);
|
|
40
41
|
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
let download_dir = app
|
|
43
|
+
.path()
|
|
44
|
+
.download_dir()
|
|
45
|
+
.map_err(|e| format!("Failed to get download dir: {}", e))?;
|
|
46
|
+
|
|
47
|
+
let output_path = download_dir.join(¶ms.filename);
|
|
48
|
+
|
|
49
|
+
let path_str = output_path.to_str().ok_or("Invalid output path")?;
|
|
50
|
+
|
|
51
|
+
let file_path = check_file_or_append(path_str);
|
|
44
52
|
|
|
45
|
-
let
|
|
46
|
-
.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
let client = ClientBuilder::new()
|
|
54
|
+
.build()
|
|
55
|
+
.map_err(|e| format!("Failed to build client: {}", e))?;
|
|
56
|
+
|
|
57
|
+
let url = Url::from_str(¶ms.url).map_err(|e| format!("Invalid URL: {}", e))?;
|
|
58
|
+
|
|
59
|
+
let request = Request::new(Method::GET, url);
|
|
60
|
+
|
|
61
|
+
let response = client.execute(request).await;
|
|
51
62
|
|
|
52
63
|
match response {
|
|
53
|
-
Ok(res) => {
|
|
54
|
-
let
|
|
64
|
+
Ok(mut res) => {
|
|
65
|
+
let mut file =
|
|
66
|
+
File::create(file_path).map_err(|e| format!("Failed to create file: {}", e))?;
|
|
67
|
+
|
|
68
|
+
while let Some(chunk) = res
|
|
69
|
+
.chunk()
|
|
70
|
+
.await
|
|
71
|
+
.map_err(|e| format!("Failed to get chunk: {}", e))?
|
|
72
|
+
{
|
|
73
|
+
file.write_all(&chunk)
|
|
74
|
+
.map_err(|e| format!("Failed to write chunk: {}", e))?;
|
|
75
|
+
}
|
|
55
76
|
|
|
56
|
-
let mut file = File::create(file_path).unwrap();
|
|
57
|
-
file.write_all(&bytes).unwrap();
|
|
58
77
|
show_toast(
|
|
59
78
|
&window,
|
|
60
79
|
&get_download_message_with_lang(MessageType::Success, params.language.clone()),
|
|
@@ -76,15 +95,25 @@ pub async fn download_file_by_binary(
|
|
|
76
95
|
app: AppHandle,
|
|
77
96
|
params: BinaryDownloadParams,
|
|
78
97
|
) -> Result<(), String> {
|
|
79
|
-
let window: WebviewWindow = app.get_webview_window("pake").
|
|
98
|
+
let window: WebviewWindow = app.get_webview_window("pake").ok_or("Window not found")?;
|
|
99
|
+
|
|
80
100
|
show_toast(
|
|
81
101
|
&window,
|
|
82
102
|
&get_download_message_with_lang(MessageType::Start, params.language.clone()),
|
|
83
103
|
);
|
|
84
|
-
|
|
85
|
-
let
|
|
86
|
-
|
|
87
|
-
|
|
104
|
+
|
|
105
|
+
let download_dir = app
|
|
106
|
+
.path()
|
|
107
|
+
.download_dir()
|
|
108
|
+
.map_err(|e| format!("Failed to get download dir: {}", e))?;
|
|
109
|
+
|
|
110
|
+
let output_path = download_dir.join(¶ms.filename);
|
|
111
|
+
|
|
112
|
+
let path_str = output_path.to_str().ok_or("Invalid output path")?;
|
|
113
|
+
|
|
114
|
+
let file_path = check_file_or_append(path_str);
|
|
115
|
+
|
|
116
|
+
match fs::write(file_path, ¶ms.binary) {
|
|
88
117
|
Ok(_) => {
|
|
89
118
|
show_toast(
|
|
90
119
|
&window,
|
|
@@ -111,7 +140,7 @@ pub fn send_notification(app: AppHandle, params: NotificationParams) -> Result<(
|
|
|
111
140
|
.body(¶ms.body)
|
|
112
141
|
.icon(¶ms.icon)
|
|
113
142
|
.show()
|
|
114
|
-
.
|
|
143
|
+
.map_err(|e| format!("Failed to show notification: {}", e))?;
|
|
115
144
|
Ok(())
|
|
116
145
|
}
|
|
117
146
|
|
|
@@ -119,13 +148,14 @@ pub fn send_notification(app: AppHandle, params: NotificationParams) -> Result<(
|
|
|
119
148
|
pub async fn update_theme_mode(app: AppHandle, mode: String) {
|
|
120
149
|
#[cfg(target_os = "macos")]
|
|
121
150
|
{
|
|
122
|
-
let window = app.get_webview_window("pake")
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
151
|
+
if let Some(window) = app.get_webview_window("pake") {
|
|
152
|
+
let theme = if mode == "dark" {
|
|
153
|
+
Theme::Dark
|
|
154
|
+
} else {
|
|
155
|
+
Theme::Light
|
|
156
|
+
};
|
|
157
|
+
let _ = window.set_theme(Some(theme));
|
|
158
|
+
}
|
|
129
159
|
}
|
|
130
160
|
#[cfg(not(target_os = "macos"))]
|
|
131
161
|
{
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
use tauri::menu::{AboutMetadata, Menu, MenuItem, PredefinedMenuItem, Submenu};
|
|
2
|
+
use tauri::{AppHandle, Manager, Wry};
|
|
3
|
+
use tauri_plugin_opener::OpenerExt;
|
|
4
|
+
|
|
5
|
+
pub fn get_menu(app: &AppHandle<Wry>) -> tauri::Result<Menu<Wry>> {
|
|
6
|
+
let pake_version = env!("CARGO_PKG_VERSION");
|
|
7
|
+
let pake_menu_item_title = format!("Built with Pake V{}", pake_version);
|
|
8
|
+
|
|
9
|
+
let menu = Menu::with_items(
|
|
10
|
+
app,
|
|
11
|
+
&[
|
|
12
|
+
&app_menu(app)?,
|
|
13
|
+
&file_menu(app)?,
|
|
14
|
+
&edit_menu(app)?,
|
|
15
|
+
&view_menu(app)?,
|
|
16
|
+
&navigation_menu(app)?,
|
|
17
|
+
&window_menu(app)?,
|
|
18
|
+
&help_menu(app, &pake_menu_item_title)?,
|
|
19
|
+
],
|
|
20
|
+
)?;
|
|
21
|
+
|
|
22
|
+
Ok(menu)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
fn app_menu(app: &AppHandle<Wry>) -> tauri::Result<Submenu<Wry>> {
|
|
26
|
+
let app_menu = Submenu::new(app, "Pake", true)?;
|
|
27
|
+
let about_metadata = AboutMetadata::default();
|
|
28
|
+
app_menu.append(&PredefinedMenuItem::about(
|
|
29
|
+
app,
|
|
30
|
+
Some("Pake"),
|
|
31
|
+
Some(about_metadata),
|
|
32
|
+
)?)?;
|
|
33
|
+
app_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
34
|
+
app_menu.append(&PredefinedMenuItem::services(app, None)?)?;
|
|
35
|
+
app_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
36
|
+
app_menu.append(&PredefinedMenuItem::hide(app, None)?)?;
|
|
37
|
+
app_menu.append(&PredefinedMenuItem::hide_others(app, None)?)?;
|
|
38
|
+
app_menu.append(&PredefinedMenuItem::show_all(app, None)?)?;
|
|
39
|
+
app_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
40
|
+
app_menu.append(&PredefinedMenuItem::quit(app, None)?)?;
|
|
41
|
+
Ok(app_menu)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fn file_menu(app: &AppHandle<Wry>) -> tauri::Result<Submenu<Wry>> {
|
|
45
|
+
let file_menu = Submenu::new(app, "File", true)?;
|
|
46
|
+
file_menu.append(&PredefinedMenuItem::close_window(app, None)?)?;
|
|
47
|
+
file_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
48
|
+
file_menu.append(&MenuItem::with_id(
|
|
49
|
+
app,
|
|
50
|
+
"clear_cache_restart",
|
|
51
|
+
"Clear Cache & Restart",
|
|
52
|
+
true,
|
|
53
|
+
Some("CmdOrCtrl+Shift+Backspace"),
|
|
54
|
+
)?)?;
|
|
55
|
+
Ok(file_menu)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
fn edit_menu(app: &AppHandle<Wry>) -> tauri::Result<Submenu<Wry>> {
|
|
59
|
+
let edit_menu = Submenu::new(app, "Edit", true)?;
|
|
60
|
+
edit_menu.append(&PredefinedMenuItem::undo(app, None)?)?;
|
|
61
|
+
edit_menu.append(&PredefinedMenuItem::redo(app, None)?)?;
|
|
62
|
+
edit_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
63
|
+
edit_menu.append(&PredefinedMenuItem::cut(app, None)?)?;
|
|
64
|
+
edit_menu.append(&PredefinedMenuItem::copy(app, None)?)?;
|
|
65
|
+
edit_menu.append(&PredefinedMenuItem::paste(app, None)?)?;
|
|
66
|
+
edit_menu.append(&PredefinedMenuItem::select_all(app, None)?)?;
|
|
67
|
+
edit_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
68
|
+
edit_menu.append(&MenuItem::with_id(
|
|
69
|
+
app,
|
|
70
|
+
"copy_url",
|
|
71
|
+
"Copy URL",
|
|
72
|
+
true,
|
|
73
|
+
Some("CmdOrCtrl+L"),
|
|
74
|
+
)?)?;
|
|
75
|
+
Ok(edit_menu)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
fn view_menu(app: &AppHandle<Wry>) -> tauri::Result<Submenu<Wry>> {
|
|
79
|
+
let view_menu = Submenu::new(app, "View", true)?;
|
|
80
|
+
view_menu.append(&MenuItem::with_id(
|
|
81
|
+
app,
|
|
82
|
+
"reload",
|
|
83
|
+
"Reload",
|
|
84
|
+
true,
|
|
85
|
+
Some("CmdOrCtrl+R"),
|
|
86
|
+
)?)?;
|
|
87
|
+
view_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
88
|
+
view_menu.append(&MenuItem::with_id(
|
|
89
|
+
app,
|
|
90
|
+
"zoom_in",
|
|
91
|
+
"Zoom In",
|
|
92
|
+
true,
|
|
93
|
+
Some("CmdOrCtrl+="),
|
|
94
|
+
)?)?;
|
|
95
|
+
view_menu.append(&MenuItem::with_id(
|
|
96
|
+
app,
|
|
97
|
+
"zoom_out",
|
|
98
|
+
"Zoom Out",
|
|
99
|
+
true,
|
|
100
|
+
Some("CmdOrCtrl+-"),
|
|
101
|
+
)?)?;
|
|
102
|
+
view_menu.append(&MenuItem::with_id(
|
|
103
|
+
app,
|
|
104
|
+
"zoom_reset",
|
|
105
|
+
"Actual Size",
|
|
106
|
+
true,
|
|
107
|
+
Some("CmdOrCtrl+0"),
|
|
108
|
+
)?)?;
|
|
109
|
+
view_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
110
|
+
view_menu.append(&PredefinedMenuItem::fullscreen(app, None)?)?;
|
|
111
|
+
view_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
112
|
+
view_menu.append(&MenuItem::with_id(
|
|
113
|
+
app,
|
|
114
|
+
"toggle_devtools",
|
|
115
|
+
"Toggle Developer Tools",
|
|
116
|
+
cfg!(debug_assertions),
|
|
117
|
+
Some("CmdOrCtrl+Option+I"),
|
|
118
|
+
)?)?;
|
|
119
|
+
Ok(view_menu)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
fn navigation_menu(app: &AppHandle<Wry>) -> tauri::Result<Submenu<Wry>> {
|
|
123
|
+
let navigation_menu = Submenu::new(app, "Navigation", true)?;
|
|
124
|
+
navigation_menu.append(&MenuItem::with_id(
|
|
125
|
+
app,
|
|
126
|
+
"go_back",
|
|
127
|
+
"Back",
|
|
128
|
+
true,
|
|
129
|
+
Some("CmdOrCtrl+["),
|
|
130
|
+
)?)?;
|
|
131
|
+
navigation_menu.append(&MenuItem::with_id(
|
|
132
|
+
app,
|
|
133
|
+
"go_forward",
|
|
134
|
+
"Forward",
|
|
135
|
+
true,
|
|
136
|
+
Some("CmdOrCtrl+]"),
|
|
137
|
+
)?)?;
|
|
138
|
+
navigation_menu.append(&MenuItem::with_id(
|
|
139
|
+
app,
|
|
140
|
+
"go_home",
|
|
141
|
+
"Go Home",
|
|
142
|
+
true,
|
|
143
|
+
Some("CmdOrCtrl+Shift+H"),
|
|
144
|
+
)?)?;
|
|
145
|
+
Ok(navigation_menu)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
fn window_menu(app: &AppHandle<Wry>) -> tauri::Result<Submenu<Wry>> {
|
|
149
|
+
let window_menu = Submenu::new(app, "Window", true)?;
|
|
150
|
+
window_menu.append(&PredefinedMenuItem::minimize(app, None)?)?;
|
|
151
|
+
window_menu.append(&PredefinedMenuItem::maximize(app, None)?)?;
|
|
152
|
+
window_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
153
|
+
window_menu.append(&MenuItem::with_id(
|
|
154
|
+
app,
|
|
155
|
+
"always_on_top",
|
|
156
|
+
"Toggle Always on Top",
|
|
157
|
+
true,
|
|
158
|
+
None::<&str>,
|
|
159
|
+
)?)?;
|
|
160
|
+
window_menu.append(&PredefinedMenuItem::separator(app)?)?;
|
|
161
|
+
window_menu.append(&PredefinedMenuItem::close_window(app, None)?)?;
|
|
162
|
+
Ok(window_menu)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
fn help_menu(app: &AppHandle<Wry>, title: &str) -> tauri::Result<Submenu<Wry>> {
|
|
166
|
+
let help_menu = Submenu::new(app, "Help", true)?;
|
|
167
|
+
let github_item = MenuItem::with_id(app, "pake_github_link", title, true, None::<&str>)?;
|
|
168
|
+
help_menu.append(&github_item)?;
|
|
169
|
+
Ok(help_menu)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
pub fn handle_menu_click(app_handle: &AppHandle, id: &str) {
|
|
173
|
+
match id {
|
|
174
|
+
"pake_github_link" => {
|
|
175
|
+
let _ = app_handle
|
|
176
|
+
.opener()
|
|
177
|
+
.open_url("https://github.com/tw93/Pake", None::<&str>);
|
|
178
|
+
}
|
|
179
|
+
"reload" => {
|
|
180
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
181
|
+
let _ = window.eval("window.location.reload()");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
"toggle_devtools" => {
|
|
185
|
+
#[cfg(debug_assertions)] // Only allow in debug builds
|
|
186
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
187
|
+
if window.is_devtools_open() {
|
|
188
|
+
window.close_devtools();
|
|
189
|
+
} else {
|
|
190
|
+
window.open_devtools();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
"zoom_in" => {
|
|
195
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
196
|
+
let _ = window.eval("zoomIn()");
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
"zoom_out" => {
|
|
200
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
201
|
+
let _ = window.eval("zoomOut()");
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
"zoom_reset" => {
|
|
205
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
206
|
+
let _ = window.eval("setZoom('100%')");
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
"go_back" => {
|
|
210
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
211
|
+
let _ = window.eval("window.history.back()");
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
"go_forward" => {
|
|
215
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
216
|
+
let _ = window.eval("window.history.forward()");
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
"go_home" => {
|
|
220
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
221
|
+
let _ = window.eval("window.location.href = window.pakeConfig.url");
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
"copy_url" => {
|
|
225
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
226
|
+
let _ = window.eval("navigator.clipboard.writeText(window.location.href)");
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
"clear_cache_restart" => {
|
|
230
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
231
|
+
if let Ok(_) = window.clear_all_browsing_data() {
|
|
232
|
+
app_handle.restart();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
"always_on_top" => {
|
|
237
|
+
if let Some(window) = app_handle.get_webview_window("pake") {
|
|
238
|
+
let is_on_top = window.is_always_on_top().unwrap_or(false);
|
|
239
|
+
let _ = window.set_always_on_top(!is_on_top);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
_ => {}
|
|
243
|
+
}
|
|
244
|
+
}
|