Files
telepathy-padfoot/src/padfoot/channel.rs

55 lines
1.4 KiB
Rust
Raw Normal View History

#[allow(clippy::module_inception)]
mod channel;
pub use channel::*;
mod messages;
pub use messages::*;
mod type_text;
pub use type_text::*;
use crate::telepathy;
// FIXME: I'm assuming that all channels will be of type text and 1-1 for now.
#[derive(Debug)]
pub struct Channel {
}
// "This SHOULD NOT include the channel type and channel interface itself"
pub fn channel_interfaces() -> Vec<String> {
vec![
"org.freedesktop.Telepathy.Channel.Interface.Messages".to_string(),
]
}
type Result<T> = std::result::Result<T, dbus::tree::MethodErr>;
impl Channel {
fn build_tree(self) -> dbus::tree::Tree<dbus::tree::MTFn, ()> {
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 chan_iface = telepathy::channel_server(&f, (), move |_| c_rc1.clone());
let c_rc2 = c_rc.clone();
let messages_iface =
telepathy::channel_interface_messages_server(&f, (), move |_| c_rc2.clone());
let type_text_iface =
telepathy::channel_type_text_server(&f, (), move |_| c_rc.clone());
tree = tree.add(
f.object_path("", ())
.introspectable()
.add(chan_iface)
.add(messages_iface)
.add(type_text_iface),
);
tree = tree.add(f.object_path("/", ()).introspectable());
tree
}
}