1 | // Copyright © SixtyFPS GmbH <info@slint.dev> |
2 | // SPDX-License-Identifier: MIT |
3 | |
4 | #![cfg_attr (feature = "mcu-board-support" , no_std)] |
5 | |
6 | #[cfg (feature = "mcu-board-support" )] |
7 | extern crate alloc; |
8 | |
9 | #[cfg (target_arch = "wasm32" )] |
10 | use wasm_bindgen::prelude::*; |
11 | |
12 | pub mod ui { |
13 | slint::include_modules!(); |
14 | } |
15 | |
16 | use slint::*; |
17 | use ui::*; |
18 | |
19 | #[cfg (not(feature = "mcu-board-support" ))] |
20 | mod controllers { |
21 | #[cfg (feature = "chrono" )] |
22 | pub mod header; |
23 | #[cfg (feature = "network" )] |
24 | pub mod weather; |
25 | } |
26 | #[cfg (not(feature = "mcu-board-support" ))] |
27 | use controllers::*; |
28 | |
29 | #[cfg_attr (target_arch = "wasm32" , wasm_bindgen(start))] |
30 | pub fn main() { |
31 | // This provides better error messages in debug mode. |
32 | // It's disabled in release mode so it doesn't bloat up the file size. |
33 | #[cfg (all(debug_assertions, target_arch = "wasm32" ))] |
34 | console_error_panic_hook::set_once(); |
35 | |
36 | let window: MainWindow = MainWindow::new().unwrap(); |
37 | |
38 | // let _ to keep the timer alive. |
39 | #[cfg (all(not(feature = "mcu-board-support" ), feature = "chrono" ))] |
40 | let _timer: Timer = header::setup(&window); |
41 | |
42 | #[cfg (all(not(feature = "mcu-board-support" ), feature = "network" ))] |
43 | let weather_join: JoinHandle<()> = weather::setup(&window); |
44 | |
45 | let _kiosk_mode_timer: Timer = kiosk_timer(&window); |
46 | |
47 | window.run().unwrap(); |
48 | |
49 | #[cfg (all(not(feature = "mcu-board-support" ), feature = "network" ))] |
50 | weather_join.join().unwrap(); |
51 | } |
52 | |
53 | fn kiosk_timer(window: &MainWindow) -> Timer { |
54 | let kiosk_mode_timer: Timer = Timer::default(); |
55 | kiosk_mode_timer.start(mode:TimerMode::Repeated, interval:core::time::Duration::from_secs(4), { |
56 | let window_weak: Weak = window.as_weak(); |
57 | move || { |
58 | if !SettingsAdapter::get(&window_weak.unwrap()).get_kiosk_mode_checked() { |
59 | return; |
60 | } |
61 | |
62 | let current_page: i32 = MenuOverviewAdapter::get(&window_weak.unwrap()).get_current_page(); |
63 | let count: i32 = MenuOverviewAdapter::get(&window_weak.unwrap()).get_count(); |
64 | |
65 | if current_page >= count - 1 { |
66 | MenuOverviewAdapter::get(&window_weak.unwrap()).set_current_page(0); |
67 | } else { |
68 | MenuOverviewAdapter::get(&window_weak.unwrap()).set_current_page(current_page + 1); |
69 | } |
70 | } |
71 | }); |
72 | |
73 | kiosk_mode_timer |
74 | } |
75 | |
76 | #[cfg (target_os = "android" )] |
77 | #[no_mangle ] |
78 | fn android_main(app: slint::android::AndroidApp) { |
79 | slint::android::init(app).unwrap(); |
80 | main(); |
81 | } |
82 | |