diff --git a/crates/ely-pdf-engine/src/bin/ely-pdf-worker/main.rs b/crates/ely-pdf-engine/src/bin/ely-pdf-worker/main.rs index f0f3432..4e22259 100644 --- a/crates/ely-pdf-engine/src/bin/ely-pdf-worker/main.rs +++ b/crates/ely-pdf-engine/src/bin/ely-pdf-worker/main.rs @@ -68,7 +68,11 @@ impl Doc { return Err(io::Error::other(format!("nothing to {}", if redo { "redo" } else { "undo" }))); } loop { - mupdf.undo(&self.open, redo)?; + if let Err(error) = mupdf.undo(&self.open, redo) { + // MuPDF may have moved part way; follow it. + self.at = mupdf.state(&self.open)?.0; + return Err(error); + } let passed = match redo { true => { self.at += 1; diff --git a/tasks/BUGS.md b/tasks/BUGS.md index a9c5adc..50d45e2 100644 --- a/tasks/BUGS.md +++ b/tasks/BUGS.md @@ -43,7 +43,7 @@ - [x] P-08 页面读取失败后每帧重试、每帧弹提示 — 失败的读取按页或种类记下,编辑后重读;签名读取以保存计数判过期 - [x] P-09 识别文字的写入被拒后仍弹“成功” — on_same 回报是否执行;被拒时只有警告 - [x] P-10 预览回复被丢弃时“应用”静默无事 — 预览回复照常交回,版本已变即提示,不显示过期预览 -- [ ] P-11 撤销或重做在 MuPDF 侧失败后 worker 的步数不再同步 +- [x] P-11 撤销或重做在 MuPDF 侧失败后 worker 的步数不再同步 — 撤销失败后重读历史标记 - [ ] P-12 `unhook` 中途抛出时泄漏保留的对象 - [ ] P-13 优化导出的“之前”大小取磁盘文件而非当前文档 - [ ] P-14 文字块含控制字符时 JSON 回复不可解析