From df3e820ccd7beacc06e3bfe01df03d14cbc9019b Mon Sep 17 00:00:00 2001 From: Pietro Brenna Date: Mon, 27 Jul 2020 17:57:08 +0200 Subject: [PATCH] dbus (deprecated) -> zbus (officially endorsed replacement) --- Cargo.lock | 288 +++++++++++++++++++++++++++++++++---------- Cargo.toml | 4 +- src/main.rs | 4 +- src/toggle.rs | 37 +++++- src/wake_listener.rs | 70 ++++++++--- 5 files changed, 311 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 49d01e8..7d53596 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,6 +38,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + [[package]] name = "cairo-rs" version = "0.8.1" @@ -65,9 +71,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.50" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" +checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" [[package]] name = "cfg-if" @@ -77,12 +83,12 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "crossbeam-channel" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" +checksum = "09ee0cc8804d5393478d743b035099520087a5186f3b93fa58cec08fa62407b6" dependencies = [ + "cfg-if", "crossbeam-utils", - "maybe-uninit", ] [[package]] @@ -97,44 +103,63 @@ dependencies = [ ] [[package]] -name = "dbus" -version = "0.5.4" +name = "derivative" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd824d45fad5ff0e178fcb3c040f13780e73f63a0a6d5cde59e7894f251ab0e" +checksum = "cb582b60359da160a9477ee80f15c8d784c477e69c217ef2cdd4169c24ea380f" dependencies = [ - "libc", - "libdbus-sys", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "dbus-macros" -version = "0.2.3" +name = "enumflags2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc7077f517382c729c845ea59d2e36a9946f5e0dd837e589a287d87535a4730" +checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" dependencies = [ - "dbus", + "enumflags2_derive", + "serde", ] +[[package]] +name = "enumflags2_derive" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "fastrand" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a9cb09840f81cd211e435d00a4e487edd263dc3c8ff815c32dd76ad668ebed" + [[package]] name = "futures-channel" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" +checksum = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" +checksum = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399" [[package]] name = "futures-executor" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" +checksum = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314" dependencies = [ "futures-core", "futures-task", @@ -143,15 +168,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" +checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789" [[package]] name = "futures-macro" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" +checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" dependencies = [ "proc-macro-hack", "proc-macro2", @@ -161,19 +186,23 @@ dependencies = [ [[package]] name = "futures-task" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" +checksum = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626" +dependencies = [ + "once_cell", +] [[package]] name = "futures-util" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" +checksum = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6" dependencies = [ "futures-core", "futures-macro", "futures-task", + "pin-project", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -367,24 +396,28 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.67" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018" +checksum = "bd7d4bd64732af4bf3a67f367c27df8520ad7e230c5817b8ff485864d80242b9" [[package]] -name = "libdbus-sys" -version = "0.1.3" +name = "nix" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8720f9274907052cb50313f91201597868da9d625f8dd125f2aca5bddb7e83a1" +checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" dependencies = [ - "pkg-config", + "bitflags", + "cc", + "cfg-if", + "libc", + "void", ] [[package]] -name = "maybe-uninit" -version = "2.0.0" +name = "once_cell" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" +checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" [[package]] name = "pango" @@ -414,22 +447,19 @@ dependencies = [ ] [[package]] -name = "pin-utils" -version = "0.1.0-alpha.4" +name = "pin-project" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" +checksum = "ca4433fff2ae79342e497d9f8ee990d174071408f28f726d6d83af93e58e48aa" +dependencies = [ + "pin-project-internal", +] [[package]] -name = "pkg-config" -version = "0.3.17" +name = "pin-project-internal" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" - -[[package]] -name = "proc-macro-hack" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" +checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f" dependencies = [ "proc-macro2", "quote", @@ -437,29 +467,93 @@ dependencies = [ ] [[package]] -name = "proc-macro-nested" -version = "0.1.3" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c605b9a0adc77b7211c6b1f722dcb613d68d66859a44f3d485a6da332b0598" + +[[package]] +name = "proc-macro-nested" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" [[package]] name = "proc-macro2" -version = "1.0.9" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" +checksum = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.3" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ "proc-macro2", ] +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "serde" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0be94b04690fbaed37cddffc5c134bf537c8e3329d53e982fe04c374978f8e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_repr" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc6b7951b17b051f3210b063f12cc17320e2fe30ae05b0fe2a3abb068551c76" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "slab" version = "0.4.2" @@ -468,9 +562,9 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "syn" -version = "1.0.16" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" +checksum = "4cdb98bcb1f9d81d07b536179c269ea15999b5d14ea958196413869445bb5250" dependencies = [ "proc-macro2", "quote", @@ -478,10 +572,25 @@ dependencies = [ ] [[package]] -name = "unicode-xid" -version = "0.2.0" +name = "toml" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" +dependencies = [ + "serde", +] + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "vte-rs" @@ -527,8 +636,6 @@ name = "waydrop" version = "0.1.0" dependencies = [ "crossbeam-channel", - "dbus", - "dbus-macros", "gdk", "gdk-sys", "gio", @@ -539,4 +646,59 @@ dependencies = [ "pango", "vte-rs", "vte-sys", + "zbus", + "zvariant", +] + +[[package]] +name = "zbus" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cb97c72cbfd5c7537ca730eeb810da7348f345ba67ab7673bcbe0d81c076427" +dependencies = [ + "byteorder", + "derivative", + "enumflags2", + "fastrand", + "nix", + "scoped-tls", + "serde", + "serde_repr", + "zbus_macros", + "zvariant", + "zvariant_derive", +] + +[[package]] +name = "zbus_macros" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0c1f2a20a4cb90922b44d3bebd232b246e52b3dd95ed5bea8aec83cde3a5a8a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zvariant" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f96eeb0fa8356375fbc6a0c373254309c88db590007c38c710768cab1b764989" +dependencies = [ + "byteorder", + "enumflags2", + "serde", +] + +[[package]] +name = "zvariant_derive" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d68726e8c12757384a8d1485080527e263dea67d91f19e97cd71b9292f22d7c5" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index 336a554..5b74ab5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,12 +18,12 @@ pango = "*" crossbeam-channel="*" glib = "*" glib-sys = "*" +zbus = "1.0.0" +zvariant = "*" # jsonrpc-ipc-server = "^14.0" # jsonrpc-derive = "*" # jsonrpc-core = "*" # jsonrpc-core-client = "*" -dbus = "*" -dbus-macros = "*" [[bin]] name = "waydrop" diff --git a/src/main.rs b/src/main.rs index 12c65da..438e0f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -227,7 +227,9 @@ fn build_ui(application: >k::Application) { glib::Continue(true) }); thread::spawn(move || { - wake_listener::listener(tx); + if let Err(e) = wake_listener::listener(tx) { + eprintln!("Could not listen on dbus: {}", e); + } }); } diff --git a/src/toggle.rs b/src/toggle.rs index 3724a2e..4786ce3 100644 --- a/src/toggle.rs +++ b/src/toggle.rs @@ -1,12 +1,26 @@ -#![allow(deprecated)] +use std::error::Error; -extern crate dbus; -#[macro_use] -extern crate dbus_macros; +use zbus::dbus_proxy; -use dbus::{BusType, Connection}; -use std::rc::Rc; +#[dbus_proxy( + interface = "net.ddns.chiocciolo.waydrop.term", + default_service = "net.ddns.chiocciolo.waydrop.term", + default_path = "/Term" +)] +trait Waker { + // fn say_hello(&self, name: &str) -> String ; + fn toggle(&self) -> zbus::Result; + fn run_shell(&self, cwd: String, shell: Vec) -> zbus::Result; + fn run_in_default_shell(&self, cwd: String, command: String) -> zbus::Result; + fn run_in_custom_shell( + &self, + cwd: String, + shell: Vec, + command: String, + ) -> zbus::Result; +} +/* dbus_interface!("net.ddns.chiocciolo.waydrop.term", interface Term { fn toggle() -> bool; fn run_shell(cwd: String, shell: Vec) -> bool; @@ -27,4 +41,15 @@ fn main() { // ); //let res = term.run_in_default_shell("/".to_string(), "ls".to_string()); let _ = term.toggle(); +}*/ + +fn main() -> Result<(), Box> { + let connection = zbus::Connection::new_session()?; + + let proxy = WakerProxy::new(&connection)?; + //proxy.run_in_default_shell("/".to_string(), "ls".to_string())?; + proxy.toggle()?; + //dbg!(reply); + + Ok(()) } diff --git a/src/wake_listener.rs b/src/wake_listener.rs index eaf308b..dc875b1 100644 --- a/src/wake_listener.rs +++ b/src/wake_listener.rs @@ -1,4 +1,5 @@ -use dbus_macros::*; +//use dbus_macros::*; +//use zvariant::Value; use glib::Sender; pub enum RpcCommand { @@ -17,33 +18,62 @@ pub enum RpcCommand { command: String, }, } -dbus_class!("net.ddns.chiocciolo.waydrop.term", class Term (tx: Sender) { - fn toggle(&this) -> bool{ - this.tx.send(RpcCommand::Toggle).is_ok() - } - fn run_shell(&this, cwd: String, shell: Vec) -> bool { - let cwd = if cwd != "" {Some(cwd)} else {None }; - this.tx.send(RpcCommand::RunShell{cwd, shell}).is_ok() - } +use std::convert::TryInto; +use std::error::Error; +use zbus::{dbus_interface, fdo}; - fn run_in_default_shell(&this, cwd: String, command: String) -> bool { - let cwd = if cwd != "" {Some(cwd)} else {None }; - this.tx.send(RpcCommand::RunInDefaultShell{cwd, command}).is_ok() - } +struct Waker { + tx: Sender, +} - fn run_in_custom_shell(&this, cwd: String, shell: Vec, command: String) -> bool { - let cwd = if cwd != "" {Some(cwd)} else {None }; - this.tx.send(RpcCommand::RunInCustomShell{cwd, shell, command}).is_ok() +#[dbus_interface(name = "net.ddns.chiocciolo.waydrop.term")] +impl Waker { + fn toggle(&self) -> bool { + self.tx.send(RpcCommand::Toggle).is_ok() } -}); -pub fn listener(tx: Sender) { - use dbus::{BusType, Connection}; + fn run_shell(&self, cwd: String, shell: Vec) -> bool { + let cwd = if cwd != "" { Some(cwd) } else { None }; + self.tx.send(RpcCommand::RunShell { cwd, shell }).is_ok() + } + fn run_in_default_shell(&self, cwd: String, command: String) -> bool { + let cwd = if cwd != "" { Some(cwd) } else { None }; + self.tx + .send(RpcCommand::RunInDefaultShell { cwd, command }) + .is_ok() + } + fn run_in_custom_shell(&self, cwd: String, shell: Vec, command: String) -> bool { + let cwd = if cwd != "" { Some(cwd) } else { None }; + self.tx + .send(RpcCommand::RunInCustomShell { + cwd, + shell, + command, + }) + .is_ok() + } +} + +pub fn listener(tx: Sender) -> Result<(), Box> { + let connection = zbus::Connection::new_session()?; + fdo::DBusProxy::new(&connection)?.request_name( + "net.ddns.chiocciolo.waydrop.term", + fdo::RequestNameFlags::ReplaceExisting.into(), + )?; + + let mut object_server = zbus::ObjectServer::new(&connection); + object_server.at(&"/Term".try_into()?, Waker { tx })?; + loop { + if let Err(err) = object_server.try_handle_next() { + eprintln!("{}", err); + } + } + /*use dbus::{BusType, Connection}; let session_connection = Connection::get_private(BusType::Session).unwrap(); let hello = Term::new(tx); hello.run( "net.ddns.chiocciolo.waydrop.term", &session_connection, "/Term", - ); + );*/ }