mirror of
https://github.com/Myriad-Dreamin/tinymist.git
synced 2025-08-04 02:08:17 +00:00
fix: handle compile events in standalone preview server (#1349)
This commit is contained in:
parent
d21ebc38dc
commit
22ce78dd1e
2 changed files with 20 additions and 9 deletions
|
@ -328,16 +328,20 @@ impl ProjectState {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn interrupt(&mut self, intr: Interrupt<LspCompilerFeat>) {
|
||||
pub fn do_interrupt(compiler: &mut LspProjectCompiler, intr: Interrupt<LspCompilerFeat>) {
|
||||
if let Interrupt::Compiled(compiled) = &intr {
|
||||
let proj = self.compiler.projects().find(|p| p.id == compiled.id);
|
||||
let proj = compiler.projects().find(|p| p.id == compiled.id);
|
||||
if let Some(proj) = proj {
|
||||
proj.ext
|
||||
.compiled(&proj.verse.revision, proj.handler.as_ref(), compiled);
|
||||
}
|
||||
}
|
||||
|
||||
self.compiler.process(intr);
|
||||
compiler.process(intr);
|
||||
}
|
||||
|
||||
pub fn interrupt(&mut self, intr: Interrupt<LspCompilerFeat>) {
|
||||
Self::do_interrupt(&mut self.compiler, intr);
|
||||
}
|
||||
|
||||
pub(crate) fn stop(&mut self) {
|
||||
|
|
|
@ -39,7 +39,7 @@ use typst_shim::syntax::LinkedNodeExt;
|
|||
|
||||
use crate::project::{
|
||||
CompileHandlerImpl, CompileServerOpts, LspCompiledArtifact, LspInterrupt, ProjectClient,
|
||||
ProjectCompiler,
|
||||
ProjectCompiler, ProjectState,
|
||||
};
|
||||
use crate::*;
|
||||
use actor::preview::{PreviewActor, PreviewRequest, PreviewTab};
|
||||
|
@ -679,7 +679,7 @@ pub async fn preview_main(args: PreviewCliArgs) -> Result<()> {
|
|||
notified_revision: Mutex::default(),
|
||||
});
|
||||
|
||||
let mut server = ProjectCompiler::new(
|
||||
let mut compiler = ProjectCompiler::new(
|
||||
verse,
|
||||
dep_tx,
|
||||
CompileServerOpts {
|
||||
|
@ -687,21 +687,28 @@ pub async fn preview_main(args: PreviewCliArgs) -> Result<()> {
|
|||
enable_watch: true,
|
||||
},
|
||||
);
|
||||
let registered = preview_state.register(&server.primary.id, previewer.compile_watcher());
|
||||
let registered = preview_state.register(&compiler.primary.id, previewer.compile_watcher());
|
||||
if !registered {
|
||||
tinymist_std::bail!("failed to register preview");
|
||||
}
|
||||
|
||||
let handle = Arc::new(PreviewProjectHandler {
|
||||
project_id: server.primary.id.clone(),
|
||||
let handle: Arc<PreviewProjectHandler> = Arc::new(PreviewProjectHandler {
|
||||
project_id: compiler.primary.id.clone(),
|
||||
client: Box::new(intr_tx),
|
||||
});
|
||||
|
||||
compiler.primary.reason.by_entry_update = true;
|
||||
let service = async move {
|
||||
let handler = compiler.handler.clone();
|
||||
handler.on_any_compile_reason(&mut compiler);
|
||||
|
||||
let mut intr_rx = intr_rx;
|
||||
while let Some(intr) = intr_rx.recv().await {
|
||||
server.process(intr);
|
||||
log::debug!("Project compiler received: {intr:?}");
|
||||
ProjectState::do_interrupt(&mut compiler, intr);
|
||||
}
|
||||
|
||||
log::info!("Project compiler exited");
|
||||
};
|
||||
|
||||
(service, handle)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue