Private
Public Access
1
0

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:
2025-05-25 18:52:18 -07:00
parent 0d4c2e5104
commit c02d4ecdf3
5 changed files with 112 additions and 62 deletions

View File

@@ -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