summary refs log tree commit diff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2024-08-22 18:01:44 +0300
committerVika <vika@fireburn.ru>2024-08-22 18:01:44 +0300
commit7a1b818d1edf5347d8215e164edf77e4210fa4dd (patch)
tree426569aad99bc309b380d0d77e4dc7c9ad26dc32 /src/lib.rs
parent9868b644c8b70396417a81c23e028e9212934444 (diff)
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.
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs32
1 files changed, 25 insertions, 7 deletions
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<components::SmartSummaryButton>,
 }
 
+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);