refactor(egui): report invoker error one outside of `Interactor`

This commit is contained in:
Mikolaj Wielgus 2024-10-11 03:20:36 +02:00
parent 489f55a8b0
commit 3766ade270
2 changed files with 13 additions and 7 deletions

View File

@ -13,7 +13,7 @@ use topola::{
}; };
use crate::{ use crate::{
activity::{ActivityContext, ActivityStatus, ActivityStepperWithStatus}, activity::{ActivityContext, ActivityError, ActivityStatus, ActivityStepperWithStatus},
interaction::InteractionContext, interaction::InteractionContext,
}; };
@ -62,22 +62,21 @@ impl<M: AccessMesadata> Interactor<M> {
self.invoker.replay(history); self.invoker.replay(history);
} }
pub fn update(&mut self) -> ControlFlow<()> { pub fn update(&mut self) -> ControlFlow<Result<(), ActivityError>> {
if let Some(ref mut activity) = self.activity { if let Some(ref mut activity) = self.activity {
return match activity.step(&mut ActivityContext { return match activity.step(&mut ActivityContext {
interaction: InteractionContext {}, interaction: InteractionContext {},
invoker: &mut self.invoker, invoker: &mut self.invoker,
}) { }) {
Ok(ActivityStatus::Running) => ControlFlow::Continue(()), Ok(ActivityStatus::Running) => ControlFlow::Continue(()),
Ok(ActivityStatus::Finished(..)) => ControlFlow::Break(()), Ok(ActivityStatus::Finished(..)) => ControlFlow::Break(Ok(())),
Err(err) => { Err(err) => {
//error_dialog.push_error("tr-module-invoker", format!("{}", err));
self.activity = None; self.activity = None;
ControlFlow::Break(()) ControlFlow::Break(Err(err))
} }
}; };
} }
ControlFlow::Break(()) ControlFlow::Break(Ok(()))
} }
pub fn invoker(&self) -> &Invoker<M> { pub fn invoker(&self) -> &Invoker<M> {

View File

@ -87,7 +87,14 @@ impl Workspace {
} }
} }
self.interactor.update() match self.interactor.update() {
ControlFlow::Continue(()) => ControlFlow::Continue(()),
ControlFlow::Break(Ok(())) => ControlFlow::Break(()),
ControlFlow::Break(Err(err)) => {
error_dialog.push_error("tr-module-invoker", format!("{}", err));
ControlFlow::Break(())
}
}
} }
pub fn update_layers(&mut self, ctx: &egui::Context) { pub fn update_layers(&mut self, ctx: &egui::Context) {