1
0
Fork 0
forked from wry/wry

autocommit 2022-04-15 20:23:03 CEST

This commit is contained in:
Julian Orth 2022-04-15 20:23:03 +02:00
parent 5f13954dbc
commit fdf0ab7388
17 changed files with 159 additions and 87 deletions

View file

@ -1,10 +1,13 @@
use std::borrow::Cow;
use std::rc::Rc;
use thiserror::Error;
use crate::dbus::{BUS_DEST, BUS_PATH, DbusError, DictEntry};
use crate::state::State;
use crate::utils::errorfmt::ErrorFmt;
use crate::wire_dbus::org;
use {
crate::{
dbus::{DbusError, DictEntry, BUS_DEST, BUS_PATH},
state::State,
utils::errorfmt::ErrorFmt,
wire_dbus::org,
},
std::{borrow::Cow, rc::Rc},
thiserror::Error,
};
const SYSTEMD_DEST: &str = "org.freedesktop.systemd1";
const SYSTEMD_PATH: &str = "/org/freedesktop/systemd1";
@ -17,7 +20,12 @@ pub enum UserSessionError {
pub fn import_environment(state: &Rc<State>, key: &str, value: &str) {
if let Err(e) = import_environment_(state, key, value) {
log::error!("Could not import `{}={}` into the system environment: {}", key, value, ErrorFmt(e));
log::error!(
"Could not import `{}={}` into the system environment: {}",
key,
value,
ErrorFmt(e)
);
}
}
@ -27,28 +35,46 @@ fn import_environment_(state: &Rc<State>, key: &str, value: &str) -> Result<(),
Err(e) => return Err(UserSessionError::AcquireSessionBus(e)),
};
let setting = format!("{}={}", key, value);
session.call(BUS_DEST, BUS_PATH, org::freedesktop::dbus::UpdateActivationEnvironment {
environment: Cow::Borrowed(&[DictEntry {
key: key.into(),
value: value.into(),
}])
}, {
let setting = setting.clone();
move |rep| {
if let Err(e) = rep {
log::error!("Could not import `{}` into the dbus environment: {}", setting, ErrorFmt(e));
session.call(
BUS_DEST,
BUS_PATH,
org::freedesktop::dbus::UpdateActivationEnvironment {
environment: Cow::Borrowed(&[DictEntry {
key: key.into(),
value: value.into(),
}]),
},
{
let setting = setting.clone();
move |rep| {
if let Err(e) = rep {
log::error!(
"Could not import `{}` into the dbus environment: {}",
setting,
ErrorFmt(e)
);
}
}
}
});
session.call(SYSTEMD_DEST, SYSTEMD_PATH, org::freedesktop::systemd1::manager::SetEnvironment {
names: Cow::Borrowed(&[Cow::Borrowed(&setting)]),
}, {
let setting = setting.clone();
move |rep| {
if let Err(e) = rep {
log::error!("Could not import `{}` into the systemd environment: {}", setting, ErrorFmt(e));
},
);
session.call(
SYSTEMD_DEST,
SYSTEMD_PATH,
org::freedesktop::systemd1::manager::SetEnvironment {
names: Cow::Borrowed(&[Cow::Borrowed(&setting)]),
},
{
let setting = setting.clone();
move |rep| {
if let Err(e) = rep {
log::error!(
"Could not import `{}` into the systemd environment: {}",
setting,
ErrorFmt(e)
);
}
}
}
});
},
);
Ok(())
}