tangled
alpha
login
or
join now
backups.bunware.org
/
atbackup
18
fork
atom
One-click backups for AT Protocol
18
fork
atom
overview
issues
2
pulls
pipelines
feat: bug fixes and improvements
Turtlepaw
8 months ago
079ec2b1
715f4bdc
+33
-24
6 changed files
expand all
collapse all
unified
split
src
App.tsx
routes
Home.tsx
src-tauri
capabilities
default.json
src
lib.rs
tray.rs
tauri.conf.json
+2
-1
src-tauri/capabilities/default.json
···
51
51
"autostart:allow-enable",
52
52
"autostart:allow-disable",
53
53
"autostart:allow-is-enabled",
54
54
-
"updater:default"
54
54
+
"updater:default",
55
55
+
"core:window:allow-hide"
55
56
]
56
57
}
+25
-4
src-tauri/src/lib.rs
···
1
1
-
use tauri::{Emitter, Manager};
1
1
+
use tauri::{
2
2
+
tray::{MouseButton, MouseButtonState, TrayIconEvent},
3
3
+
Emitter, Manager,
4
4
+
};
2
5
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
3
6
use tauri_plugin_deep_link::DeepLinkExt;
4
7
5
8
mod background;
6
9
mod tray;
7
10
use background::{start_background_scheduler, stop_background_scheduler};
8
8
-
use tray::{create_system_tray};
11
11
+
use tray::create_system_tray;
9
12
10
13
#[tauri::command]
11
14
fn greet(name: &str) -> String {
···
50
53
app.emit("perform-backup", ()).unwrap();
51
54
}
52
55
_ => {
53
53
-
println!("menu item {:?} not handled", event.id);
56
56
+
println!("menu item {:?} not handled", event.id);
54
57
}
55
55
-
})
58
58
+
})
59
59
+
.on_tray_icon_event(|tray, event| match event {
60
60
+
TrayIconEvent::Click {
61
61
+
button: MouseButton::Left,
62
62
+
button_state: MouseButtonState::Up,
63
63
+
..
64
64
+
} => {
65
65
+
println!("left click pressed and released");
66
66
+
// in this example, let's show and focus the main window when the tray is clicked
67
67
+
let app = tray.app_handle();
68
68
+
if let Some(window) = app.get_webview_window("main") {
69
69
+
let _ = window.show();
70
70
+
let _ = window.set_focus();
71
71
+
}
72
72
+
}
73
73
+
_ => {
74
74
+
println!("unhandled event {event:?}");
75
75
+
}
76
76
+
})
56
77
.setup(|app| {
57
78
#[cfg(any(windows, target_os = "linux"))]
58
79
{
+4
-7
src-tauri/src/tray.rs
···
9
9
let hide_i = MenuItem::with_id(app, "hide", "Hide", true, None::<&str>)?;
10
10
let backup_now_i = MenuItem::with_id(app, "backup_now", "Backup Now", true, None::<&str>)?;
11
11
12
12
-
let menu = Menu::with_items(app, &[
13
13
-
&quit_i,
14
14
-
&show_i,
15
15
-
&hide_i,
16
16
-
&backup_now_i,
17
17
-
])?;
12
12
+
let menu = Menu::with_items(app, &[&quit_i, &show_i, &backup_now_i])?;
18
13
19
14
TrayIconBuilder::new()
20
15
.menu(&menu)
21
21
-
.menu_on_left_click(true)
16
16
+
.show_menu_on_left_click(false)
22
17
.icon(app.default_window_icon().unwrap().clone())
18
18
+
.title("ATBackup")
19
19
+
.tooltip("ATBackup")
23
20
.build(app)
24
21
}
-4
src-tauri/tauri.conf.json
···
21
21
],
22
22
"security": {
23
23
"csp": null
24
24
-
},
25
25
-
"trayIcon": {
26
26
-
"iconPath": "icons/icon.png",
27
27
-
"iconAsTemplate": true
28
24
}
29
25
},
30
26
"bundle": {
+2
-2
src/App.tsx
···
172
172
return (
173
173
<main className="bg-background dark min-h-screen flex flex-col">
174
174
<div className="titlebar" data-tauri-drag-region>
175
175
-
<div className="controls">
175
175
+
<div className="controls pr-[4px]">
176
176
<Button
177
177
variant="ghost"
178
178
id="titlebar-minimize"
···
210
210
id="titlebar-close"
211
211
title="close"
212
212
onClick={() => {
213
213
-
appWindow.close();
213
213
+
appWindow.hide();
214
214
}}
215
215
>
216
216
<svg
-6
src/routes/Home.tsx
···
321
321
{getRelativeTime(new Date(backup.timestamp))} (
322
322
{new Date(backup.timestamp).toLocaleString()})
323
323
</span>
324
324
-
<span>•</span>
325
325
-
<span>{formatBytes(backup.stats?.fileSize || 0)}</span>
326
326
-
<span>•</span>
327
327
-
<span className="font-semibold text-white/90">
328
328
-
{backup.stats?.collections.length || 0} collections
329
329
-
</span>
330
324
</div>
331
325
</div>
332
326
<div