1
0
Fork 0
forked from wry/wry

config: implement config loading

This commit is contained in:
Julian Orth 2022-05-02 14:14:58 +02:00
parent 13aa6d7249
commit ca13469f0c

View file

@ -38,7 +38,7 @@ use {
}, },
ahash::AHashSet, ahash::AHashSet,
forker::ForkerProxy, forker::ForkerProxy,
std::{cell::Cell, future::Future, ops::Deref, rc::Rc, sync::Arc, time::Duration}, std::{cell::Cell, env, future::Future, ops::Deref, rc::Rc, sync::Arc, time::Duration},
thiserror::Error, thiserror::Error,
uapi::c, uapi::c,
}; };
@ -197,6 +197,8 @@ fn start_compositor2(
} }
async fn start_compositor3(state: Rc<State>, test_future: Option<TestFuture>) { async fn start_compositor3(state: Rc<State>, test_future: Option<TestFuture>) {
let is_test = test_future.is_some();
let backend = match create_backend(&state, test_future).await { let backend = match create_backend(&state, test_future).await {
Some(b) => b, Some(b) => b,
_ => { _ => {
@ -217,7 +219,7 @@ async fn start_compositor3(state: Rc<State>, test_future: Option<TestFuture>) {
} }
} }
let config = ConfigProxy::default(&state); let config = load_config(&state, is_test);
state.config.set(Some(Rc::new(config))); state.config.set(Some(Rc::new(config)));
let _geh = start_global_event_handlers(&state, &backend); let _geh = start_global_event_handlers(&state, &backend);
@ -230,6 +232,30 @@ async fn start_compositor3(state: Rc<State>, test_future: Option<TestFuture>) {
state.el.stop(); state.el.stop();
} }
fn load_config(state: &Rc<State>, #[allow(unused_variables)] for_test: bool) -> ConfigProxy {
#[cfg(feature = "it")]
if for_test {
// todo
}
let config_dir = if let Ok(xdg) = env::var("XDG_CONFIG_HOME") {
format!("{}/jay", xdg)
} else if let Ok(home) = env::var("HOME") {
format!("{}/.config/jay", home)
} else {
log::warn!("Neither XDG_CONFIG_HOME nor HOME are set. Using default config.");
return ConfigProxy::default(state);
};
let config_path = format!("{}/config.so", config_dir);
match unsafe { ConfigProxy::from_file(&config_path, state) } {
Ok(c) => c,
Err(e) => {
log::warn!("Could not load {}: {}", config_path, ErrorFmt(e));
log::warn!("Using default config");
ConfigProxy::default(state)
}
}
}
fn start_global_event_handlers( fn start_global_event_handlers(
state: &Rc<State>, state: &Rc<State>,
backend: &Rc<dyn Backend>, backend: &Rc<dyn Backend>,