mimick/settings_window/
status.rs1use adw::prelude::*;
2use gtk::ProgressBar;
3use libadwaita as adw;
4
5pub struct StatusWidgets {
6 pub status_row: adw::ActionRow,
7 pub progress_bar: ProgressBar,
8 pub route_row: adw::ActionRow,
9 pub folders_row: adw::ActionRow,
10 pub queue_health_row: adw::ActionRow,
11 pub last_sync_row: adw::ActionRow,
12 pub error_row: adw::ActionRow,
13}
14
15pub fn build_status_group(status_page: &adw::PreferencesPage) -> StatusWidgets {
16 let progress_group = adw::PreferencesGroup::builder()
17 .title("Sync Status")
18 .build();
19 status_page.add(&progress_group);
20
21 let status_row = action_row("Idle", "Waiting to sync...");
22 progress_group.add(&status_row);
23
24 let progress_bar = progress_bar();
25 progress_group.add(&progress_bar);
26
27 let health_group = adw::PreferencesGroup::builder()
28 .title("Health Dashboard")
29 .build();
30 status_page.add(&health_group);
31
32 let route_row = action_row("Server Route", "Checking connectivity...");
33 health_group.add(&route_row);
34
35 let folders_row = action_row("Watched Folders", "0 configured");
36 health_group.add(&folders_row);
37
38 let queue_health_row = action_row("Queue Health", "0 pending, 0 waiting to retry");
39 health_group.add(&queue_health_row);
40
41 let last_sync_row = action_row("Last Successful Sync", "No successful sync yet");
42 health_group.add(&last_sync_row);
43
44 let error_row = action_row("No recent errors", "Uploads are healthy.");
45 health_group.add(&error_row);
46
47 StatusWidgets {
48 status_row,
49 progress_bar,
50 route_row,
51 folders_row,
52 queue_health_row,
53 last_sync_row,
54 error_row,
55 }
56}
57
58fn action_row(title: &str, subtitle: &str) -> adw::ActionRow {
59 adw::ActionRow::builder()
60 .title(title)
61 .subtitle(subtitle)
62 .build()
63}
64
65fn progress_bar() -> ProgressBar {
66 ProgressBar::builder()
67 .margin_top(12)
68 .margin_bottom(12)
69 .margin_start(12)
70 .margin_end(12)
71 .fraction(0.0)
72 .build()
73}