1
0
Fork 0
forked from wry/wry

config: split runtime handling

This commit is contained in:
kossLAN 2026-05-29 19:22:09 -04:00
parent d74c56fc76
commit 08b37552e2
No known key found for this signature in database
2 changed files with 94 additions and 90 deletions

View file

@ -94,6 +94,7 @@ mod matchers;
mod options;
mod outputs;
mod resources;
mod runtime;
mod seats;
mod theme;
mod windows;
@ -220,59 +221,6 @@ impl ConfigProxyHandler {
self.send(&ServerMessage::Response { response: msg })
}
fn handle_log_request(
&self,
level: ConfigLogLevel,
msg: &str,
file: Option<&str>,
line: Option<u32>,
) {
let level = match level {
ConfigLogLevel::Error => Level::Error,
ConfigLogLevel::Warn => Level::Warn,
ConfigLogLevel::Info => Level::Info,
ConfigLogLevel::Debug => Level::Debug,
ConfigLogLevel::Trace => Level::Trace,
};
let debug = fmt::from_fn(|fmt| {
if let Some(file) = file {
write!(fmt, "{}", file)?;
if let Some(line) = line {
write!(fmt, ":{}", line)?;
}
write!(fmt, ": ")?;
}
write!(fmt, "{}", msg)?;
Ok(())
});
log::log!(level, "{:?}", debug);
}
fn handle_reload(&self) {
self.state.reload_config();
}
fn handle_set_status(&self, status: &str) {
self.state.set_status(status);
}
fn handle_set_env(&self, key: &str, val: &str) {
if let Some(f) = self.state.forker.get() {
f.setenv(key.as_bytes(), val.as_bytes());
}
}
fn handle_unset_env(&self, key: &str) {
if let Some(f) = self.state.forker.get() {
f.unsetenv(key.as_bytes());
}
}
fn handle_get_config_dir(&self) {
let dir = self.state.config_dir.clone().unwrap_or_default();
self.respond(Response::GetConfigDir { dir });
}
fn get_device_handler_data(
&self,
device: InputDevice,
@ -344,43 +292,6 @@ impl ConfigProxyHandler {
}
}
fn handle_run(
&self,
prog: &str,
args: Vec<String>,
env: Vec<(String, String)>,
fds: Vec<(i32, i32)>,
) -> Result<(), CphError> {
let fds: Vec<_> = fds
.into_iter()
.map(|(a, b)| (a, Rc::new(OwnedFd::new(b))))
.collect();
let forker = match self.state.forker.get() {
Some(f) => f,
_ => return Err(CphError::NoForker),
};
let env = env.into_iter().map(|(k, v)| (k, Some(v))).collect();
forker.spawn(prog.to_string(), args, env, fds);
Ok(())
}
fn handle_set_log_level(&self, level: ConfigLogLevel) {
self.state.set_log_level(level.into());
}
fn handle_clean_logs_older_than(&self, time: SystemTime) {
self.state.clean_logs_older_than.set(Some(time));
}
fn handle_quit(&self) {
log::info!("Quitting");
self.state.ring.stop();
}
fn handle_switch_to(&self, vtnr: u32) {
self.state.backend.get().switch_to(vtnr);
}
pub fn auto_focus(&self, data: &ToplevelData) -> bool {
for matcher in self.window_matcher_no_auto_focus.lock().values() {
if matcher.node.pull(data) {

View file

@ -0,0 +1,93 @@
use super::*;
impl ConfigProxyHandler {
pub(super) fn handle_log_request(
&self,
level: ConfigLogLevel,
msg: &str,
file: Option<&str>,
line: Option<u32>,
) {
let level = match level {
ConfigLogLevel::Error => Level::Error,
ConfigLogLevel::Warn => Level::Warn,
ConfigLogLevel::Info => Level::Info,
ConfigLogLevel::Debug => Level::Debug,
ConfigLogLevel::Trace => Level::Trace,
};
let debug = fmt::from_fn(|fmt| {
if let Some(file) = file {
write!(fmt, "{}", file)?;
if let Some(line) = line {
write!(fmt, ":{}", line)?;
}
write!(fmt, ": ")?;
}
write!(fmt, "{}", msg)?;
Ok(())
});
log::log!(level, "{:?}", debug);
}
pub(super) fn handle_reload(&self) {
self.state.reload_config();
}
pub(super) fn handle_set_status(&self, status: &str) {
self.state.set_status(status);
}
pub(super) fn handle_set_env(&self, key: &str, val: &str) {
if let Some(f) = self.state.forker.get() {
f.setenv(key.as_bytes(), val.as_bytes());
}
}
pub(super) fn handle_unset_env(&self, key: &str) {
if let Some(f) = self.state.forker.get() {
f.unsetenv(key.as_bytes());
}
}
pub(super) fn handle_get_config_dir(&self) {
let dir = self.state.config_dir.clone().unwrap_or_default();
self.respond(Response::GetConfigDir { dir });
}
pub(super) fn handle_run(
&self,
prog: &str,
args: Vec<String>,
env: Vec<(String, String)>,
fds: Vec<(i32, i32)>,
) -> Result<(), CphError> {
let fds: Vec<_> = fds
.into_iter()
.map(|(a, b)| (a, Rc::new(OwnedFd::new(b))))
.collect();
let forker = match self.state.forker.get() {
Some(f) => f,
_ => return Err(CphError::NoForker),
};
let env = env.into_iter().map(|(k, v)| (k, Some(v))).collect();
forker.spawn(prog.to_string(), args, env, fds);
Ok(())
}
pub(super) fn handle_set_log_level(&self, level: ConfigLogLevel) {
self.state.set_log_level(level.into());
}
pub(super) fn handle_clean_logs_older_than(&self, time: SystemTime) {
self.state.clean_logs_older_than.set(Some(time));
}
pub(super) fn handle_quit(&self) {
log::info!("Quitting");
self.state.ring.stop();
}
pub(super) fn handle_switch_to(&self, vtnr: u32) {
self.state.backend.get().switch_to(vtnr);
}
}