Skip to content

Commit 37198e7

Browse files
server: Allow replacing current instance
1 parent cfff210 commit 37198e7

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ version.workspace = true
1010

1111
[dependencies]
1212
clap.workspace = true
13+
enumflags2 = "0.7"
1314
oo7 = { workspace = true, features = ["unstable"] }
1415
rpassword = "7.3"
1516
serde.workspace = true

server/src/main.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ struct Args {
2424
help = "Read a password from stdin, and use it to unlock the login keyring."
2525
)]
2626
login: bool,
27+
#[arg(short, long, help = "Replace a running instance.")]
28+
replace: bool,
2729
}
2830

2931
#[tokio::main]
@@ -41,9 +43,14 @@ async fn main() -> Result<(), Error> {
4143
secret = Some(Secret::from(password.into_bytes()));
4244
}
4345

46+
let mut flags = zbus::fdo::RequestNameFlags::AllowReplacement.into();
47+
if args.replace {
48+
flags |= zbus::fdo::RequestNameFlags::ReplaceExisting;
49+
}
50+
4451
tracing::info!("Starting {}", BINARY_NAME);
4552

46-
Service::run(secret).await?;
53+
Service::run(secret, flags).await?;
4754

4855
std::future::pending::<()>().await;
4956

server/src/service.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
use std::{collections::HashMap, sync::Arc};
44

5+
use enumflags2::BitFlags;
56
use oo7::{
67
dbus::{
78
api::{Properties, SecretInner},
@@ -186,10 +187,16 @@ impl Service {
186187
}
187188

188189
impl Service {
189-
pub async fn run(secret: Option<Secret>) -> Result<(), Error> {
190-
let connection = zbus::connection::Builder::session()?
191-
.name(oo7::dbus::api::Service::DESTINATION.as_deref().unwrap())?
192-
.build()
190+
pub async fn run(
191+
secret: Option<Secret>,
192+
flags: BitFlags<zbus::fdo::RequestNameFlags>,
193+
) -> Result<(), Error> {
194+
let connection = zbus::Connection::session().await?;
195+
connection
196+
.request_name_with_flags(
197+
oo7::dbus::api::Service::DESTINATION.as_deref().unwrap(),
198+
flags,
199+
)
193200
.await?;
194201
let object_server = connection.object_server();
195202
let service = Self {

0 commit comments

Comments
 (0)