fix(plugins): display errors properly (#2975)

* fix(plugins): format errors and make sure file not found errors appear

* style(fmt): rustfmt
This commit is contained in:
Aram Drevekenin 2023-12-01 19:10:13 +01:00 committed by GitHub
parent 3aa72ba5fe
commit ac47ff43a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 9 deletions

View file

@ -2058,6 +2058,22 @@ impl Screen {
} }
session_layout_metadata session_layout_metadata
} }
fn update_plugin_loading_stage(
&mut self,
pid: u32,
loading_indication: LoadingIndication,
) -> bool {
let all_tabs = self.get_tabs_mut();
let mut found_plugin = false;
for tab in all_tabs.values_mut() {
if tab.has_plugin(pid) {
found_plugin = true;
tab.update_plugin_loading_stage(pid, loading_indication);
break;
}
}
found_plugin
}
} }
// The box is here in order to make the // The box is here in order to make the
@ -2117,6 +2133,7 @@ pub(crate) fn screen_thread_main(
let mut pending_tab_switches: HashSet<(usize, ClientId)> = HashSet::new(); // usize is the let mut pending_tab_switches: HashSet<(usize, ClientId)> = HashSet::new(); // usize is the
// tab_index // tab_index
let mut plugin_loading_message_cache = HashMap::new();
loop { loop {
let (event, mut err_ctx) = screen let (event, mut err_ctx) = screen
.bus .bus
@ -2793,9 +2810,9 @@ pub(crate) fn screen_thread_main(
screen.apply_layout( screen.apply_layout(
layout, layout,
floating_panes_layout, floating_panes_layout,
new_pane_pids, new_pane_pids.clone(),
new_floating_pane_pids, new_floating_pane_pids,
new_plugin_ids, new_plugin_ids.clone(),
tab_index, tab_index,
client_id, client_id,
)?; )?;
@ -2805,6 +2822,18 @@ pub(crate) fn screen_thread_main(
screen.go_to_tab(tab_index as usize, client_id)?; screen.go_to_tab(tab_index as usize, client_id)?;
} }
} }
for plugin_ids in new_plugin_ids.values() {
for plugin_id in plugin_ids {
if let Some(loading_indication) =
plugin_loading_message_cache.remove(plugin_id)
{
screen.update_plugin_loading_stage(*plugin_id, loading_indication);
screen.render()?;
}
}
}
screen.unblock_input()?; screen.unblock_input()?;
screen.render()?; screen.render()?;
}, },
@ -3307,16 +3336,18 @@ pub(crate) fn screen_thread_main(
} else { } else {
log::error!("Tab index not found: {:?}", tab_index); log::error!("Tab index not found: {:?}", tab_index);
} }
if let Some(loading_indication) = plugin_loading_message_cache.remove(&plugin_id) {
screen.update_plugin_loading_stage(plugin_id, loading_indication);
screen.render()?;
}
screen.log_and_report_session_state()?; screen.log_and_report_session_state()?;
screen.unblock_input()?; screen.unblock_input()?;
}, },
ScreenInstruction::UpdatePluginLoadingStage(pid, loading_indication) => { ScreenInstruction::UpdatePluginLoadingStage(pid, loading_indication) => {
let all_tabs = screen.get_tabs_mut(); let found_plugin =
for tab in all_tabs.values_mut() { screen.update_plugin_loading_stage(pid, loading_indication.clone());
if tab.has_plugin(pid) { if !found_plugin {
tab.update_plugin_loading_stage(pid, loading_indication); plugin_loading_message_cache.insert(pid, loading_indication);
break;
}
} }
screen.render()?; screen.render()?;
}, },

View file

@ -272,7 +272,11 @@ impl Display for LoadingIndication {
None => {}, None => {},
} }
if let Some(error_text) = &self.error { if let Some(error_text) = &self.error {
stringified.push_str(&format!("\n\r{} {error_text}", red.bold().paint("ERROR:"))); stringified.push_str(&format!(
"\n\r{} {}",
red.bold().paint("ERROR: "),
error_text.replace('\n', "\n\r")
));
// we add this additional line explicitly to make it easier to realize when something // we add this additional line explicitly to make it easier to realize when something
// is wrong in very small plugins (eg. the tab-bar and status-bar) // is wrong in very small plugins (eg. the tab-bar and status-bar)
stringified.push_str(&format!( stringified.push_str(&format!(