]> uap-core.de Git - note.git/commitdiff
remove broadcast receiver from BackendHandle
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 29 May 2026 15:15:22 +0000 (17:15 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 29 May 2026 15:15:22 +0000 (17:15 +0200)
application/src/backend.rs
application/src/main.rs
application/src/notebook.rs
application/src/window.rs

index 500dcd93254e91aa6120ed22291b307114302156..223ef1d7978ca082dde220ef52048aa58aac8890 100644 (file)
@@ -29,8 +29,7 @@ type CmdFuture = Pin<Box<dyn Future<Output = ()> + Send>>;
 pub struct BackendHandle {
     pub backend: Arc<Backend>,
     pub tx: tokio::sync::mpsc::UnboundedSender<CmdFuture>,
-    pub btx: tokio::sync::broadcast::Sender<BroadcastMessage>,
-    pub brx: tokio::sync::broadcast::Receiver<BroadcastMessage>
+    pub btx: tokio::sync::broadcast::Sender<BroadcastMessage>
 }
 
 impl Clone for BackendHandle {
@@ -39,7 +38,6 @@ impl Clone for BackendHandle {
             backend: self.backend.clone(),
             tx: self.tx.clone(),
             btx: self.btx.clone(),
-            brx: self.btx.subscribe()
         }
     }
 }
@@ -180,7 +178,6 @@ impl Backend {
     pub fn start(self) -> (BackendHandle, JoinHandle<()>) {
         let (tx, mut rx) = mpsc::unbounded_channel::<CmdFuture>();
         let broadcast_tx = self.broadcast.clone();
-        let broadcast_rx = broadcast_tx.subscribe();
 
         let backend = Arc::new(self);
         let backend_clone = backend.clone();
@@ -228,7 +225,6 @@ impl Backend {
             backend: backend_clone,
             tx: tx,
             btx: broadcast_tx,
-            brx: broadcast_rx,
         };
 
         (backend_handle, join)
index 72eb8aeffe6d9ccf3a736fec6cd35ba8350ac010..6612cdcab31534d4cc2442fcf317aa92f6658b6e 100644 (file)
@@ -36,7 +36,7 @@ use std::env;
 use entity::collection::{create_notebook_hierarchy, Node};
 use ui_rs::{ui};
 use ui_rs::ui::*;
-use crate::backend::{Backend, BackendHandle};
+use crate::backend::{Backend, BackendHandle, BroadcastMessage};
 use crate::window::*;
 
 fn main() {
@@ -105,7 +105,6 @@ fn init_backend() -> Result<Backend, ErrMsg> {
 
 struct App {
     backend: BackendHandle,
-
     notebooks: Vec<Node>,
 }
 
index cfafe64881fad3d0125ce0828ddaabd6dbc4c120..0eb23c884fc0480f35c82041b77e3b5e6d81c7eb 100644 (file)
@@ -1,3 +1,4 @@
+use std::rc::Rc;
 use ui_rs::{action, ui_actions, UiModel};
 use ui_rs::ui::*;
 
@@ -7,7 +8,7 @@ use crate::backend::BackendHandle;
 #[derive(UiModel)]
 pub struct Notebook {
     pub doc_ref: UiDocRef<Notebook>,
-    pub backend: BackendHandle,
+    pub backend: Rc<BackendHandle>,
     pub collection_id: i32,
 
     pub selected_note: Option<UiDoc<crate::note::Note>>,
@@ -21,7 +22,7 @@ impl Notebook {
     pub fn new(id: i32, backend: &BackendHandle) -> Self {
         Notebook {
             doc_ref: Default::default(),
-            backend: backend.clone(),
+            backend: Rc::new(backend.clone()),
             collection_id: id,
             selected_note: None,
             notes: Default::default()
@@ -45,7 +46,7 @@ impl Notebook {
             if let Some(mut doc) = self.doc_ref.get_doc() {
                 // save the note
                 let note_proxy = current.doc_proxy();
-                let backend = self.backend.clone();
+                let backend = self.backend.as_ref().clone();
                 let collection_id = self.collection_id;
                 note_proxy.call_mainthread(move |_doc, note|{
                     note.save(collection_id, &backend);
index 1b9074626118ff033b637e6dad797fc93bc2c0bb..450dc99f27b1d255954db9ff19ad7bceb290f23f 100644 (file)
@@ -40,6 +40,8 @@ pub struct MainWindow {
     pub obj: UiObjRef<MainWindow>,
 
     pub backend: BackendHandle,
+    
+    pub broadcast_rx: tokio::sync::broadcast::Receiver<BroadcastMessage>,
 
     selected_notebook: Option<UiDoc<Notebook>>,
 
@@ -56,6 +58,7 @@ impl MainWindow {
         MainWindow {
             obj: UiObjRef::default(),
             backend: app.backend.clone(),
+            broadcast_rx: app.backend.btx.subscribe(),
             selected_notebook: None,
             groups: Vec::new(),
             notebooks: UiSourceList::default()
@@ -84,7 +87,7 @@ impl MainWindow {
 
     #[action]
     pub fn message(&mut self, _event: &ActionEvent) {
-        while let Ok(msg) = self.backend.brx.try_recv() {
+        while let Ok(msg) = self.broadcast_rx.try_recv() {
             match msg {
                 BroadcastMessage::NotebookStructureUpdate(nodes) => self.update_notebook_structure(&nodes),
             }