Skip to main content

mimick/settings_window/
status.rs

1use 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}