From 53bce509789581aa9786e881a6db9082f405d01a Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Sat, 16 May 2020 19:42:41 +0100 Subject: [PATCH] Extract tree building from Connection#run --- src/padfoot/connection.rs | 87 +++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/src/padfoot/connection.rs b/src/padfoot/connection.rs index 06f605c..a980471 100644 --- a/src/padfoot/connection.rs +++ b/src/padfoot/connection.rs @@ -189,50 +189,14 @@ impl Connection { // FIXME: running several +process+ loops sure is convenient, but it also // seems inefficient... pub fn run(self, signal: mpsc::Sender>) { + let id = self.id(); let bus = self.bus(); let path = self.path(); + let conns = self.conns.clone(); - let state = self.state.clone(); let msgq = self.msgq.clone(); - let id = self.id(); - let c_rc = std::rc::Rc::new(self); - - let f = dbus::tree::Factory::new_fn::<()>(); - let mut tree = f.tree(()); - - let c_rc1 = c_rc.clone(); - let conn_iface = telepathy::connection_server(&f, (), move |_| c_rc1.clone()); - - let c_rc2 = c_rc.clone(); - let avatars_iface = - telepathy::connection_interface_avatars_server(&f, (), move |_| c_rc2.clone()); - - let c_rc3 = c_rc.clone(); - let contacts_iface = - telepathy::connection_interface_contacts_server(&f, (), move |_| c_rc3.clone()); - - let c_rc4 = c_rc.clone(); - let contact_list_iface = - telepathy::connection_interface_contact_list_server(&f, (), move |_| c_rc4.clone()); - - let c_rc5 = c_rc.clone(); - let requests_iface = - telepathy::connection_interface_requests_server(&f, (), move |_| c_rc5.clone()); - - let simple_presence_iface = - telepathy::connection_interface_simple_presence_server(&f, (), move |_| c_rc.clone()); - - tree = tree.add( - f.object_path(path.clone(), ()) - .introspectable() - .add(conn_iface) - .add(avatars_iface) - .add(contacts_iface) - .add(contact_list_iface) - .add(requests_iface) - .add(simple_presence_iface), - ); - tree = tree.add(f.object_path("/", ()).introspectable()); + let state = self.state.clone(); + let tree = self.build_tree(); // Setup DBus connection let mut c = match LocalConnection::new_session() { @@ -301,6 +265,49 @@ impl Connection { pub fn path(&self) -> String { self.settings.path() } + + fn build_tree(self) -> dbus::tree::Tree { + let path = self.path(); + let c_rc = std::rc::Rc::new(self); + let f = dbus::tree::Factory::new_fn::<()>(); + let mut tree = f.tree(()); + + let c_rc1 = c_rc.clone(); + let conn_iface = telepathy::connection_server(&f, (), move |_| c_rc1.clone()); + + let c_rc2 = c_rc.clone(); + let avatars_iface = + telepathy::connection_interface_avatars_server(&f, (), move |_| c_rc2.clone()); + + let c_rc3 = c_rc.clone(); + let contacts_iface = + telepathy::connection_interface_contacts_server(&f, (), move |_| c_rc3.clone()); + + let c_rc4 = c_rc.clone(); + let contact_list_iface = + telepathy::connection_interface_contact_list_server(&f, (), move |_| c_rc4.clone()); + + let c_rc5 = c_rc.clone(); + let requests_iface = + telepathy::connection_interface_requests_server(&f, (), move |_| c_rc5.clone()); + + let simple_presence_iface = + telepathy::connection_interface_simple_presence_server(&f, (), move |_| c_rc.clone()); + + tree = tree.add( + f.object_path(path, ()) + .introspectable() + .add(conn_iface) + .add(avatars_iface) + .add(contacts_iface) + .add(contact_list_iface) + .add(requests_iface) + .add(simple_presence_iface), + ); + tree = tree.add(f.object_path("/", ()).introspectable()); + + tree + } } fn escape_one(b: u8) -> String {