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 {
backend: self.backend.clone(),
tx: self.tx.clone(),
btx: self.btx.clone(),
- brx: self.btx.subscribe()
}
}
}
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();
backend: backend_clone,
tx: tx,
btx: broadcast_tx,
- brx: broadcast_rx,
};
(backend_handle, join)
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() {
struct App {
backend: BackendHandle,
-
notebooks: Vec<Node>,
}
+use std::rc::Rc;
use ui_rs::{action, ui_actions, UiModel};
use ui_rs::ui::*;
#[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>>,
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()
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);
pub obj: UiObjRef<MainWindow>,
pub backend: BackendHandle,
+
+ pub broadcast_rx: tokio::sync::broadcast::Receiver<BroadcastMessage>,
selected_notebook: Option<UiDoc<Notebook>>,
MainWindow {
obj: UiObjRef::default(),
backend: app.backend.clone(),
+ broadcast_rx: app.backend.btx.subscribe(),
selected_notebook: None,
groups: Vec::new(),
notebooks: UiSourceList::default()
#[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),
}