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