shenlei
|
d15f20b097
|
feat: 交互协调器拆分、附件提示、暗色图片适配、选区放大镜及文档清理
- 拆分 ContentDelegates/TextContentView 为独立协调器(InteractionCoordinator、LocationResolution、ExternalLinks、AttachmentTooltip)
- 新增 RDEPUBAttachmentTooltipView/OverlayView 附件气泡提示
- 新增 RDEPUBDarkImageAdjuster 暗色模式图片亮度适配
- 新增 RDEPUBSelectionLoupeView 选区放大镜
- 新增 MetadataParseWorker/CancellationController 元数据解析取消机制
- 重构 PresentationRuntime/PaginationCoordinator 精简职责
- 优化 ChapterLoader/WarmupOrchestrator 异步章节加载
- CFI 模块微调与 NoteModels 更新
- 清理冗余文档,更新架构/UML/业务逻辑文档
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-24 17:47:24 +08:00 |
|
shen
|
7de661eb54
|
feat: 架构整改 — Context拆分、Runtime拆分、异步章节加载、UI测试覆盖
Phase 1: Context 拆分
- 新增 RDEPUBReaderState/RDEPUBReaderEnvironment/RDEPUBReaderServices
- RDEPUBReaderContext 改为过渡门面,代理到 State/Environment/Services
Phase 2: Runtime 拆分
- 新增 RDEPUBPresentationRuntime 处理分页状态管理
- 新增 RDEPUBChapterWarmupOrchestrator 处理章节预热与加载编排
- RDEPUBReaderRuntime 从 1277 行收缩,公共 API 转发到新 facade
Phase 0.5: 性能优化
- prepareOnDemandChapter 支持异步模式(allowSynchronousLoad: false)
- extendPartialBookPageMapIfNeeded 改为 DispatchGroup 并发加载
- RDEPUBChapterOffsetMap.cfiMap 加 NSLock 保护数据竞争
- CFI Map 构建延迟到后台队列(scheduleDeferredCFIMapBuildIfNeeded)
- RDEPUBTextPageRenderView 引入静态位图缓存
- RDEPUBTextContentView 新增 loadingSpinner 占位页
Phase 3: 状态机
- 新增 RDEPUBNavigationStateMachine(含 DEBUG 合法转换校验)
- 新增 RDEPUBPaginationState 记录分页来源
Review 修复
- makeSummary 重复方法合并
- ensureNavigationTargetAvailable 同步路径加注释标记
UI 测试
- 新增 AsyncChapterLoadingTests(20 个测试,覆盖全部架构整改场景)
- 跨章节翻页、延迟 CFI、状态机、内存警告、预加载、位置恢复等
|
2026-06-23 08:17:08 +08:00 |
|
shenlei
|
c65c190b71
|
feat: EPUB阅读器搜索、注释、CFI模块及大书远距跳转优化
- 实现EPUB阅读器搜索功能及选中注释功能
- 优化CFI模块,修复代码审查发现的11个问题
- 实现大书远距目录跳转与后台补全优化方案
- 优化设置面板与章节运行时联动
- 重构及大量改进优化
|
2026-06-22 20:26:34 +08:00 |
|
shenlei
|
6ed3fcb071
|
feat: 设置面板与章节运行时联动优化
- 设置页打开时仅重新计算当前章节预览,关闭后触发完整补全
- 新增 preview 加载优先级,支持设置页内当前章预览
- 添加设置页防抖机制,合并连续字号/行距变更
- 支持下滑手势关闭设置页,通过 presentation delegate 通知运行时
- 重新分页时跳过导航和尺寸校验,避免状态冲突
- currentTextPageSize 线程安全优化,后台线程使用缓存尺寸
- 更新 CocoaPods 依赖
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-17 09:47:50 +08:00 |
|
shen
|
6f75b083f7
|
feat: EPUB 阅读器搜索、选中注释、书签 chrome 状态及大量重构优化
- 新增 RDEPUBReaderSearchCoordinator 与 RDEPUBSelectionState 管理搜索和选中状态
- 新增 BookmarkChromeStateTests、NavigationBackwardTests、SelectionAnnotateTests 等 UI 测试
- 新增多个边界测试 epub 样本(损坏结构、空归档、缺失文件、流式外链验证)
- 重构阅读器 chrome 状态管理,统一 tool bar 与 search bar 交互
- 优化大书分页缓存策略(RDEPUBChapterSummaryDiskCache、RDEPUBPageCountCache)
- 移除废弃的 RDEPUBLocationConverter 和 RDEPUBPageBreakPolicy
- 更新 epub-bridge.js 与 JS bridge 通信协议
- 全面更新现有 UI 测试以适配新的 helper 和状态管理
|
2026-06-13 22:48:56 +08:00 |
|
shen
|
d20196ee34
|
feat: configurable chapter window & parallel metadata parsing with benchmark
1. Configurable chapter window size (onDemandChapterWindowSize: 3-15)
- Parameterized window radius in RDEPUBChapterRuntimeStore
- Updated RDEPUBChapterWindowCoordinator to use configurable radius
- RDEPUBChapterWindowSnapshot.from() accepts chapter array instead of fixed prev/next
- Even numbers round up to odd (4→5), min 3, max 15
2. Configurable metadata parsing concurrency (metadataParsingConcurrency)
- Default equals CPU core count
- Parallel execution via OperationQueue in paginateMetadataOnly
- Each worker creates independent builder instance
- NSLock protects result aggregation
3. Per-chapter and total wall-clock timing instrumentation
- Separated render vs I/O timing per chapter
- Summary log with wallClockMs, renderTotalMs, writeTotalMs, avgRenderMs
- Timing stored in RDEPUBReaderContext for test access
4. UI automation test infrastructure
- Added --demo-window-size, --demo-concurrency, --demo-clear-cache launch args
- DemoReaderState exposes windowSize, parseMs, parseConcurrency
- ConfigurableWindowTests: 5 test cases for window size 3/5/15
- ConcurrentParsingTests: 4 test cases for concurrency 2/4
- MetadataParseBenchmarkTests: serial vs parallel benchmark
5. Bug fixes
- Fixed page snap-back during background parsing (isUserInteracting check)
- Reduced BookPageMap refresh frequency from 16 to 32 chapters
- Moved waitForReadingInteractionToSettle outside operation loop
6. Design doc: dual-layer PageMap (estimated + precise mixed)
|
2026-06-03 23:38:11 +08:00 |
|
shenlei
|
feb05eaf87
|
feat: complete large-book pagination runtime and UI coverage
|
2026-06-03 17:47:16 +08:00 |
|