broken: started working on attachment dbus object, but order of endpoint creation seems to matter, need to reuse more parts
This commit is contained in:
@@ -1,15 +1,16 @@
|
||||
mod dbus;
|
||||
mod daemon;
|
||||
mod dbus;
|
||||
|
||||
use std::future;
|
||||
use log::LevelFilter;
|
||||
use std::future;
|
||||
|
||||
use daemon::Daemon;
|
||||
use daemon::signals::Signal;
|
||||
use daemon::{Attachment, Daemon};
|
||||
|
||||
use dbus::endpoint::Endpoint as DbusEndpoint;
|
||||
use dbus::interface;
|
||||
use dbus::server_impl::ServerImpl;
|
||||
use dbus_tokio::connection;
|
||||
|
||||
fn initialize_logging() {
|
||||
// Weird: is this the best way to do this?
|
||||
@@ -17,7 +18,7 @@ fn initialize_logging() {
|
||||
.map(|s| s.parse::<LevelFilter>().unwrap_or(LevelFilter::Info))
|
||||
.unwrap_or(LevelFilter::Info);
|
||||
|
||||
env_logger::Builder::from_default_env()
|
||||
env_logger::Builder::from_default_env()
|
||||
.format_timestamp_secs()
|
||||
.filter_level(log_level)
|
||||
.init();
|
||||
@@ -35,21 +36,50 @@ async fn main() {
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
// Initialize dbus session connection
|
||||
let (resource, connection) = connection::new_session_sync().unwrap();
|
||||
|
||||
// The resource is a task that should be spawned onto a tokio compatible
|
||||
// reactor ASAP. If the resource ever finishes, you lost connection to D-Bus.
|
||||
//
|
||||
// To shut down the connection, both call _handle.abort() and drop the connection.
|
||||
let _handle = tokio::spawn(async {
|
||||
let err = resource.await;
|
||||
panic!("Lost connection to D-Bus: {}", err);
|
||||
});
|
||||
|
||||
// Acquire the name
|
||||
connection
|
||||
.request_name(interface::NAME, false, true, false)
|
||||
.await
|
||||
.expect("Unable to acquire dbus name");
|
||||
|
||||
let attachment = Attachment {
|
||||
guid: "asdf".into(),
|
||||
path: "/dev/null".into(),
|
||||
downloaded: false,
|
||||
};
|
||||
|
||||
let att_endpoint = DbusEndpoint::new(connection.clone(), attachment);
|
||||
att_endpoint
|
||||
.register_object("/net/buzzert/kordophonecd/attachments/test", |cr| {
|
||||
vec![interface::register_net_buzzert_kordophone_attachment(cr)]
|
||||
})
|
||||
.await;
|
||||
|
||||
// Create the server implementation
|
||||
let server = ServerImpl::new(daemon.event_sender.clone());
|
||||
let server = ServerImpl::new(connection.clone(), daemon.event_sender.clone());
|
||||
|
||||
// Register DBus interfaces with endpoint
|
||||
let endpoint = DbusEndpoint::new(server);
|
||||
endpoint.register(
|
||||
interface::NAME,
|
||||
interface::OBJECT_PATH,
|
||||
|cr| {
|
||||
let endpoint = DbusEndpoint::new(connection.clone(), server);
|
||||
endpoint
|
||||
.register_object(interface::OBJECT_PATH, |cr| {
|
||||
vec![
|
||||
interface::register_net_buzzert_kordophone_repository(cr),
|
||||
interface::register_net_buzzert_kordophone_settings(cr)
|
||||
interface::register_net_buzzert_kordophone_settings(cr),
|
||||
]
|
||||
}
|
||||
).await;
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut signal_receiver = daemon.obtain_signal_receiver();
|
||||
tokio::spawn(async move {
|
||||
@@ -59,7 +89,8 @@ async fn main() {
|
||||
match signal {
|
||||
Signal::ConversationsUpdated => {
|
||||
log::debug!("Sending signal: ConversationsUpdated");
|
||||
endpoint.send_signal(interface::OBJECT_PATH, DbusSignals::ConversationsUpdated{})
|
||||
endpoint
|
||||
.send_signal(interface::OBJECT_PATH, DbusSignals::ConversationsUpdated {})
|
||||
.unwrap_or_else(|_| {
|
||||
log::error!("Failed to send signal");
|
||||
0
|
||||
@@ -67,8 +98,15 @@ async fn main() {
|
||||
}
|
||||
|
||||
Signal::MessagesUpdated(conversation_id) => {
|
||||
log::debug!("Sending signal: MessagesUpdated for conversation {}", conversation_id);
|
||||
endpoint.send_signal(interface::OBJECT_PATH, DbusSignals::MessagesUpdated{ conversation_id })
|
||||
log::debug!(
|
||||
"Sending signal: MessagesUpdated for conversation {}",
|
||||
conversation_id
|
||||
);
|
||||
endpoint
|
||||
.send_signal(
|
||||
interface::OBJECT_PATH,
|
||||
DbusSignals::MessagesUpdated { conversation_id },
|
||||
)
|
||||
.unwrap_or_else(|_| {
|
||||
log::error!("Failed to send signal");
|
||||
0
|
||||
|
||||
Reference in New Issue
Block a user