dbus (deprecated) -> zbus (officially endorsed replacement)

master
Pietro Brenna 2020-07-27 17:57:08 +02:00
parent 0df7c7735b
commit df3e820ccd
5 changed files with 311 additions and 92 deletions

288
Cargo.lock generated
View File

@ -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",
]

View File

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

View File

@ -227,7 +227,9 @@ fn build_ui(application: &gtk::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);
}
});
}

View File

@ -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<bool>;
fn run_shell(&self, cwd: String, shell: Vec<String>) -> zbus::Result<bool>;
fn run_in_default_shell(&self, cwd: String, command: String) -> zbus::Result<bool>;
fn run_in_custom_shell(
&self,
cwd: String,
shell: Vec<String>,
command: String,
) -> zbus::Result<bool>;
}
/*
dbus_interface!("net.ddns.chiocciolo.waydrop.term", interface Term {
fn toggle() -> bool;
fn run_shell(cwd: String, shell: Vec<String>) -> 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<dyn Error>> {
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(())
}

View File

@ -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<RpcCommand>) {
fn toggle(&this) -> bool{
this.tx.send(RpcCommand::Toggle).is_ok()
use std::convert::TryInto;
use std::error::Error;
use zbus::{dbus_interface, fdo};
struct Waker {
tx: Sender<RpcCommand>,
}
fn run_shell(&this, cwd: String, shell: Vec<String>) -> bool {
#[dbus_interface(name = "net.ddns.chiocciolo.waydrop.term")]
impl Waker {
fn toggle(&self) -> bool {
self.tx.send(RpcCommand::Toggle).is_ok()
}
fn run_shell(&self, cwd: String, shell: Vec<String>) -> bool {
let cwd = if cwd != "" { Some(cwd) } else { None };
this.tx.send(RpcCommand::RunShell{cwd, shell}).is_ok()
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<String>, command: String) -> bool {
let cwd = if cwd != "" { Some(cwd) } else { None };
self.tx
.send(RpcCommand::RunInCustomShell {
cwd,
shell,
command,
})
.is_ok()
}
}
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()
}
pub fn listener(tx: Sender<RpcCommand>) -> Result<(), Box<dyn Error>> {
let connection = zbus::Connection::new_session()?;
fdo::DBusProxy::new(&connection)?.request_name(
"net.ddns.chiocciolo.waydrop.term",
fdo::RequestNameFlags::ReplaceExisting.into(),
)?;
fn run_in_custom_shell(&this, cwd: String, shell: Vec<String>, command: String) -> bool {
let cwd = if cwd != "" {Some(cwd)} else {None };
this.tx.send(RpcCommand::RunInCustomShell{cwd, shell, command}).is_ok()
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);
}
});
pub fn listener(tx: Sender<RpcCommand>) {
use dbus::{BusType, Connection};
}
/*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",
);
);*/
}