cadmus_core/view/settings_editor/kinds/
import.rs1use super::{SettingData, SettingIdentity, SettingKind, ToggleSettings, WidgetKind};
4use crate::fl;
5use crate::settings::Settings;
6use crate::view::{Bus, Event, ToggleEvent};
7
8pub struct ImportStartupTrigger;
10
11impl SettingKind for ImportStartupTrigger {
12 fn identity(&self) -> SettingIdentity {
13 SettingIdentity::ImportStartupTrigger
14 }
15
16 fn label(&self, _settings: &Settings) -> String {
17 fl!("settings-import-startup-trigger")
18 }
19
20 fn fetch(&self, settings: &Settings) -> SettingData {
21 SettingData {
22 value: settings.import.startup_trigger.to_string(),
23 widget: WidgetKind::Toggle {
24 left_label: fl!("settings-general-toggle-on"),
25 right_label: fl!("settings-general-toggle-off"),
26 enabled: settings.import.startup_trigger,
27 tap_event: Event::Toggle(ToggleEvent::Setting(
28 ToggleSettings::ImportStartupTrigger,
29 )),
30 },
31 }
32 }
33
34 fn handle(&self, evt: &Event, settings: &mut Settings, _bus: &mut Bus) -> Option<String> {
35 if let Event::Toggle(ToggleEvent::Setting(ToggleSettings::ImportStartupTrigger)) = evt {
36 settings.import.startup_trigger = !settings.import.startup_trigger;
37 return Some(settings.import.startup_trigger.to_string());
38 }
39 None
40 }
41}
42
43pub struct ImportSyncMetadata;
45
46impl SettingKind for ImportSyncMetadata {
47 fn identity(&self) -> SettingIdentity {
48 SettingIdentity::ImportSyncMetadata
49 }
50
51 fn label(&self, _settings: &Settings) -> String {
52 fl!("settings-import-sync-metadata")
53 }
54
55 fn fetch(&self, settings: &Settings) -> SettingData {
56 SettingData {
57 value: settings.import.sync_metadata.to_string(),
58 widget: WidgetKind::Toggle {
59 left_label: fl!("settings-general-toggle-on"),
60 right_label: fl!("settings-general-toggle-off"),
61 enabled: settings.import.sync_metadata,
62 tap_event: Event::Toggle(ToggleEvent::Setting(ToggleSettings::ImportSyncMetadata)),
63 },
64 }
65 }
66
67 fn handle(&self, evt: &Event, settings: &mut Settings, _bus: &mut Bus) -> Option<String> {
68 if let Event::Toggle(ToggleEvent::Setting(ToggleSettings::ImportSyncMetadata)) = evt {
69 settings.import.sync_metadata = !settings.import.sync_metadata;
70 return Some(settings.import.sync_metadata.to_string());
71 }
72 None
73 }
74}
75
76#[cfg(test)]
77mod tests {
78 use super::*;
79 use crate::settings::Settings;
80 use crate::view::settings_editor::kinds::ToggleSettings;
81 use crate::view::{Bus, Event, ToggleEvent};
82 use std::collections::VecDeque;
83
84 mod import_startup_trigger {
85 use super::*;
86
87 #[test]
88 fn handle_toggle_disables_when_enabled() {
89 let setting = ImportStartupTrigger;
90 let mut settings = Settings::default();
91 settings.import.startup_trigger = true;
92 let mut bus: Bus = VecDeque::new();
93 let event = Event::Toggle(ToggleEvent::Setting(ToggleSettings::ImportStartupTrigger));
94
95 let result = setting.handle(&event, &mut settings, &mut bus);
96
97 assert!(result.is_some());
98 assert!(!settings.import.startup_trigger);
99 }
100
101 #[test]
102 fn handle_toggle_enables_when_disabled() {
103 let setting = ImportStartupTrigger;
104 let mut settings = Settings::default();
105 settings.import.startup_trigger = false;
106 let mut bus: Bus = VecDeque::new();
107 let event = Event::Toggle(ToggleEvent::Setting(ToggleSettings::ImportStartupTrigger));
108
109 let result = setting.handle(&event, &mut settings, &mut bus);
110
111 assert!(result.is_some());
112 assert!(settings.import.startup_trigger);
113 }
114
115 #[test]
116 fn handle_returns_none_for_wrong_event() {
117 let setting = ImportStartupTrigger;
118 let mut settings = Settings::default();
119 let mut bus: Bus = VecDeque::new();
120 use crate::view::EntryId;
121
122 let result = setting.handle(&Event::Select(EntryId::About), &mut settings, &mut bus);
123
124 assert!(result.is_none());
125 }
126
127 #[test]
128 fn handle_returns_none_for_wrong_toggle() {
129 let setting = ImportStartupTrigger;
130 let mut settings = Settings::default();
131 let mut bus: Bus = VecDeque::new();
132
133 let result = setting.handle(
134 &Event::Toggle(ToggleEvent::Setting(ToggleSettings::SleepCover)),
135 &mut settings,
136 &mut bus,
137 );
138
139 assert!(result.is_none());
140 }
141 }
142
143 mod import_sync_metadata {
144 use super::*;
145
146 #[test]
147 fn handle_toggle_disables_when_enabled() {
148 let setting = ImportSyncMetadata;
149 let mut settings = Settings::default();
150 settings.import.sync_metadata = true;
151 let mut bus: Bus = VecDeque::new();
152 let event = Event::Toggle(ToggleEvent::Setting(ToggleSettings::ImportSyncMetadata));
153
154 let result = setting.handle(&event, &mut settings, &mut bus);
155
156 assert!(result.is_some());
157 assert!(!settings.import.sync_metadata);
158 }
159
160 #[test]
161 fn handle_toggle_enables_when_disabled() {
162 let setting = ImportSyncMetadata;
163 let mut settings = Settings::default();
164 settings.import.sync_metadata = false;
165 let mut bus: Bus = VecDeque::new();
166 let event = Event::Toggle(ToggleEvent::Setting(ToggleSettings::ImportSyncMetadata));
167
168 let result = setting.handle(&event, &mut settings, &mut bus);
169
170 assert!(result.is_some());
171 assert!(settings.import.sync_metadata);
172 }
173
174 #[test]
175 fn handle_returns_none_for_wrong_event() {
176 let setting = ImportSyncMetadata;
177 let mut settings = Settings::default();
178 let mut bus: Bus = VecDeque::new();
179 use crate::view::EntryId;
180
181 let result = setting.handle(&Event::Select(EntryId::About), &mut settings, &mut bus);
182
183 assert!(result.is_none());
184 }
185
186 #[test]
187 fn handle_returns_none_for_wrong_toggle() {
188 let setting = ImportSyncMetadata;
189 let mut settings = Settings::default();
190 let mut bus: Bus = VecDeque::new();
191
192 let result = setting.handle(
193 &Event::Toggle(ToggleEvent::Setting(ToggleSettings::SleepCover)),
194 &mut settings,
195 &mut bus,
196 );
197
198 assert!(result.is_none());
199 }
200 }
201}