diff options
Diffstat (limited to 'src/components/preferences.rs')
-rw-r--r-- | src/components/preferences.rs | 119 |
1 files changed, 98 insertions, 21 deletions
diff --git a/src/components/preferences.rs b/src/components/preferences.rs index fbf406d..27f84a9 100644 --- a/src/components/preferences.rs +++ b/src/components/preferences.rs @@ -1,4 +1,5 @@ -use gio::prelude::*; +use gettextrs::*; + use adw::prelude::*; use relm4::prelude::*; @@ -6,6 +7,55 @@ pub struct Preferences { settings: gio::Settings, } +#[allow(dead_code)] +struct ComposerPreferencesWidgets { + page: adw::PreferencesPage, + general_group: adw::PreferencesGroup, + send_html_directly: adw::SwitchRow, +} + +impl ComposerPreferencesWidgets { + fn new(settings: &gio::Settings) -> Self { + let page = adw::PreferencesPage::builder() + .title(gettext("Post composer")) + .description(gettext( + "Settings for composing new posts and editing existing ones.", + )) + .icon_name("editor-symbolic") + .build(); + let general_group = adw::PreferencesGroup::builder() + .title(gettext("General")) + .build(); + let send_html_directly = adw::SwitchRow::new(); + general_group.add(&send_html_directly); + page.add(&general_group); + + let widgets = Self { + page, + general_group, + send_html_directly, + }; + + let schema = settings.settings_schema().unwrap(); + + #[expect(clippy::single_element_loop)] + for (row, key, property) in [( + widgets + .send_html_directly + .upcast_ref::<adw::PreferencesRow>(), + "send-html-directly", + "active", + )] { + let key_data = schema.key(key); + settings.bind(key, row, property).get().set().build(); + row.set_title(&gettext(key_data.summary().unwrap())); + row.set_tooltip_markup(key_data.description().map(gettext).as_deref()); + } + + widgets + } +} + #[cfg(feature = "smart-summary")] #[allow(dead_code)] struct LanguageModelPreferencesWidgets { @@ -13,6 +63,7 @@ struct LanguageModelPreferencesWidgets { general_group: adw::PreferencesGroup, llm_endpoint: adw::EntryRow, + smart_summary_show_warning: adw::SwitchRow, smart_summary_group: adw::PreferencesGroup, smart_summary_model: adw::EntryRow, @@ -24,19 +75,19 @@ struct LanguageModelPreferencesWidgets { #[cfg(feature = "smart-summary")] impl LanguageModelPreferencesWidgets { fn new(settings: &gio::Settings) -> Self { - use gettextrs::*; - let page = adw::PreferencesPage::builder() - .title(gettext("Language Models")) + .title(gettext("Language models")) .description(gettext("Settings for the language model integrations.")) - .icon_name("magic-wand") + .icon_name("brain-augemnted") // sic! .build(); let general_group = adw::PreferencesGroup::builder() .title(gettext("General")) .build(); let llm_endpoint = adw::EntryRow::new(); + let smart_summary_show_warning = adw::SwitchRow::new(); general_group.add(&llm_endpoint); + general_group.add(&smart_summary_show_warning); page.add(&general_group); let smart_summary_group = adw::PreferencesGroup::builder() @@ -57,28 +108,53 @@ impl LanguageModelPreferencesWidgets { general_group, llm_endpoint, + smart_summary_show_warning, smart_summary_group, smart_summary_model, smart_summary_system_prompt, smart_summary_prompt_prefix, - smart_summary_prompt_suffix + smart_summary_prompt_suffix, }; let schema = settings.settings_schema().unwrap(); - for (row, key) in [ - (&widgets.llm_endpoint, "llm-endpoint"), - (&widgets.smart_summary_model, "smart-summary-model"), - (&widgets.smart_summary_system_prompt, "smart-summary-system-prompt"), - (&widgets.smart_summary_prompt_prefix, "smart-summary-prompt-prefix"), - (&widgets.smart_summary_prompt_suffix, "smart-summary-prompt-suffix"), + for (row, key, property) in [ + ( + widgets.llm_endpoint.upcast_ref::<adw::PreferencesRow>(), + "llm-endpoint", + "text", + ), + ( + widgets.smart_summary_show_warning.upcast_ref::<_>(), + "smart-summary-show-warning", + "active", + ), + ( + widgets.smart_summary_model.upcast_ref::<_>(), + "smart-summary-model", + "text", + ), + ( + widgets.smart_summary_system_prompt.upcast_ref::<_>(), + "smart-summary-system-prompt", + "text", + ), + ( + widgets.smart_summary_prompt_prefix.upcast_ref::<_>(), + "smart-summary-prompt-prefix", + "text", + ), + ( + widgets.smart_summary_prompt_suffix.upcast_ref::<_>(), + "smart-summary-prompt-suffix", + "text", + ), ] { - settings.bind(key, row, "text") - .get() - .set() - .build(); - row.set_title(&gettext(schema.key(key).summary().unwrap())); + let key_data = schema.key(key); + settings.bind(key, row, property).get().set().build(); + row.set_title(&gettext(key_data.summary().unwrap())); + row.set_tooltip_markup(key_data.description().map(gettext).as_deref()); } widgets @@ -86,8 +162,9 @@ impl LanguageModelPreferencesWidgets { } pub struct PreferencesWidgets { + composer: ComposerPreferencesWidgets, #[cfg(feature = "smart-summary")] - llm: LanguageModelPreferencesWidgets + llm: LanguageModelPreferencesWidgets, } impl Component for Preferences { @@ -114,18 +191,18 @@ impl Component for Preferences { model.settings.delay(); let widgets = PreferencesWidgets { + composer: ComposerPreferencesWidgets::new(&model.settings), #[cfg(feature = "smart-summary")] llm: LanguageModelPreferencesWidgets::new(&model.settings), }; + root.add(&widgets.composer.page); #[cfg(feature = "smart-summary")] root.add(&widgets.llm.page); root.connect_closed(glib::clone!( #[strong(rename_to = settings)] model.settings, - move |_| { - settings.apply() - } + move |_| settings.apply() )); ComponentParts { model, widgets } |