|
|
@ -8,7 +8,6 @@ use futures_util::stream::{FuturesUnordered, StreamExt};
|
|
|
|
pub enum Callback {
|
|
|
|
pub enum Callback {
|
|
|
|
EditorCompositor(Box<dyn FnOnce(&mut Editor, &mut Compositor) + Send>),
|
|
|
|
EditorCompositor(Box<dyn FnOnce(&mut Editor, &mut Compositor) + Send>),
|
|
|
|
Editor(Box<dyn FnOnce(&mut Editor) + Send>),
|
|
|
|
Editor(Box<dyn FnOnce(&mut Editor) + Send>),
|
|
|
|
Compositor(Box<dyn FnOnce(&mut Compositor) + Send>),
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub type JobFuture = BoxFuture<'static, anyhow::Result<Option<Callback>>>;
|
|
|
|
pub type JobFuture = BoxFuture<'static, anyhow::Result<Option<Callback>>>;
|
|
|
@ -76,7 +75,6 @@ impl Jobs {
|
|
|
|
Ok(Some(call)) => match call {
|
|
|
|
Ok(Some(call)) => match call {
|
|
|
|
Callback::EditorCompositor(call) => call(editor, compositor),
|
|
|
|
Callback::EditorCompositor(call) => call(editor, compositor),
|
|
|
|
Callback::Editor(call) => call(editor),
|
|
|
|
Callback::Editor(call) => call(editor),
|
|
|
|
Callback::Compositor(call) => call(compositor),
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Err(e) => {
|
|
|
|
Err(e) => {
|
|
|
|
editor.set_error(format!("Async job failed: {}", e));
|
|
|
|
editor.set_error(format!("Async job failed: {}", e));
|
|
|
@ -102,7 +100,7 @@ impl Jobs {
|
|
|
|
/// Blocks until all the jobs that need to be waited on are done.
|
|
|
|
/// Blocks until all the jobs that need to be waited on are done.
|
|
|
|
pub async fn finish(
|
|
|
|
pub async fn finish(
|
|
|
|
&mut self,
|
|
|
|
&mut self,
|
|
|
|
mut editor: Option<&mut Editor>,
|
|
|
|
editor: &mut Editor,
|
|
|
|
mut compositor: Option<&mut Compositor>,
|
|
|
|
mut compositor: Option<&mut Compositor>,
|
|
|
|
) -> anyhow::Result<()> {
|
|
|
|
) -> anyhow::Result<()> {
|
|
|
|
log::debug!("waiting on jobs...");
|
|
|
|
log::debug!("waiting on jobs...");
|
|
|
@ -117,20 +115,10 @@ impl Jobs {
|
|
|
|
// clippy doesn't realize this is an error without the derefs
|
|
|
|
// clippy doesn't realize this is an error without the derefs
|
|
|
|
#[allow(clippy::needless_option_as_deref)]
|
|
|
|
#[allow(clippy::needless_option_as_deref)]
|
|
|
|
match callback {
|
|
|
|
match callback {
|
|
|
|
Callback::EditorCompositor(call)
|
|
|
|
Callback::EditorCompositor(call) if compositor.is_some() => {
|
|
|
|
if editor.is_some() && compositor.is_some() =>
|
|
|
|
call(editor, compositor.as_deref_mut().unwrap())
|
|
|
|
{
|
|
|
|
|
|
|
|
call(
|
|
|
|
|
|
|
|
editor.as_deref_mut().unwrap(),
|
|
|
|
|
|
|
|
compositor.as_deref_mut().unwrap(),
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Callback::Editor(call) if editor.is_some() => {
|
|
|
|
|
|
|
|
call(editor.as_deref_mut().unwrap())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Callback::Compositor(call) if compositor.is_some() => {
|
|
|
|
|
|
|
|
call(compositor.as_deref_mut().unwrap())
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Callback::Editor(call) => call(editor),
|
|
|
|
|
|
|
|
|
|
|
|
// skip callbacks for which we don't have the necessary references
|
|
|
|
// skip callbacks for which we don't have the necessary references
|
|
|
|
_ => (),
|
|
|
|
_ => (),
|
|
|
|