From 7a1b818d1edf5347d8215e164edf77e4210fa4dd Mon Sep 17 00:00:00 2001 From: Vika Date: Thu, 22 Aug 2024 18:01:44 +0300 Subject: SmartSummaryButton: ask parent component for text On receving `smart_summary::Output::Start`, one must reply with `smart_summary::Input::Text(text)` to start the actual summarization. --- src/lib.rs | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index f95a40a..244c09f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,9 @@ use relm4::{gtk, prelude::{AsyncComponent, AsyncComponentController, AsyncCompon pub mod components { pub(crate) mod smart_summary; - pub(crate) use smart_summary::{SmartSummaryButton, Output as SmartSummaryOutput}; + pub(crate) use smart_summary::{ + SmartSummaryButton, Output as SmartSummaryOutput, Input as SmartSummaryInput + }; } mod widgets; pub mod secrets; @@ -36,6 +38,14 @@ pub struct PostComposerModel { #[do_not_track] smart_summary: AsyncController, } +impl PostComposerModel { + fn busy_changed(&self) -> bool { + self.changed(Self::submit_busy_guard() | Self::smart_summary_busy_guard()) + } + fn busy(&self) -> bool { + self.submit_busy_guard.is_some() || self.smart_summary_busy_guard.is_some() + } +} #[derive(Debug)] #[allow(private_interfaces)] @@ -72,8 +82,8 @@ impl AsyncComponent for PostComposerModel { send_button = gtk::Button { set_label: "Post", connect_clicked => Self::Input::Submit, - #[track = "model.changed(Self::submit_busy_guard())"] - set_sensitive: model.submit_busy_guard.is_none(), + #[track = "model.busy_changed()"] + set_sensitive: !model.busy(), }, bar = adw::HeaderBar::new() { @@ -128,8 +138,8 @@ impl AsyncComponent for PostComposerModel { gtk::Entry { set_hexpand: true, set_buffer: &model.summary_buffer, - #[track = "model.changed(Self::smart_summary_busy_guard() | Self::submit_busy_guard())"] - set_sensitive: model.smart_summary_busy_guard.is_none() && model.submit_busy_guard.is_none(), + #[track = "model.busy_changed()"] + set_sensitive: !model.busy(), }, model.smart_summary.widget(), @@ -264,7 +274,7 @@ impl AsyncComponent for PostComposerModel { micropub: Arc::new(init), smart_summary: components::SmartSummaryButton::builder() - .launch(content_buffer) + .launch(()) .forward(sender.input_sender(), PostComposerInput::SmartSummary), tracker: Default::default() @@ -335,7 +345,15 @@ impl AsyncComponent for PostComposerModel { self.set_smart_summary_busy_guard( Some(relm4::main_adw_application().mark_busy()) ); - self.summary_buffer.set_text(""); + if self.smart_summary.sender().send(components::SmartSummaryInput::Text( + self.content_buffer.text( + &self.content_buffer.start_iter(), + &self.content_buffer.end_iter(), + false + ).into() + )).is_ok() { + self.summary_buffer.set_text(""); + } }, PostComposerInput::SmartSummary(components::SmartSummaryOutput::Chunk(text)) => { self.summary_buffer.insert_text(self.summary_buffer.length(), text); -- cgit 1.4.1