Improve error handling for config-reload (#3668)

* Don't change config to default when refreshing invalid config

* Propely handle theme errors with config-reload

* Extract refresh theme into seperate function
This commit is contained in:
A-Walrus 2022-09-10 16:32:49 +03:00 committed by GitHub
parent 75e6a64327
commit 9c627c65e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -366,29 +366,39 @@ impl Application {
self.editor.refresh_config(); self.editor.refresh_config();
} }
fn refresh_config(&mut self) { /// Refresh theme after config change
let config = Config::load_default().unwrap_or_else(|err| { fn refresh_theme(&mut self, config: &Config) {
self.editor.set_error(err.to_string());
Config::default()
});
// Refresh theme
if let Some(theme) = config.theme.clone() { if let Some(theme) = config.theme.clone() {
let true_color = self.true_color(); let true_color = self.true_color();
self.editor.set_theme( match self.theme_loader.load(&theme) {
self.theme_loader Ok(theme) => {
.load(&theme) if true_color || theme.is_16_color() {
.map_err(|e| { self.editor.set_theme(theme);
log::warn!("failed to load theme `{}` - {}", theme, e); } else {
e self.editor
}) .set_error("theme requires truecolor support, which is not available");
.ok() }
.filter(|theme| (true_color || theme.is_16_color())) }
.unwrap_or_else(|| self.theme_loader.default_theme(true_color)), Err(err) => {
); let err_string = format!("failed to load theme `{}` - {}", theme, err);
self.editor.set_error(err_string);
}
}
} }
}
self.config.store(Arc::new(config)); fn refresh_config(&mut self) {
match Config::load_default() {
Ok(config) => {
self.refresh_theme(&config);
// Store new config
self.config.store(Arc::new(config));
}
Err(err) => {
self.editor.set_error(err.to_string());
}
}
} }
fn true_color(&self) -> bool { fn true_color(&self) -> bool {