- 新增 RDEPUBReaderSearchCoordinator 与 RDEPUBSelectionState 管理搜索和选中状态 - 新增 BookmarkChromeStateTests、NavigationBackwardTests、SelectionAnnotateTests 等 UI 测试 - 新增多个边界测试 epub 样本(损坏结构、空归档、缺失文件、流式外链验证) - 重构阅读器 chrome 状态管理,统一 tool bar 与 search bar 交互 - 优化大书分页缓存策略(RDEPUBChapterSummaryDiskCache、RDEPUBPageCountCache) - 移除废弃的 RDEPUBLocationConverter 和 RDEPUBPageBreakPolicy - 更新 epub-bridge.js 与 JS bridge 通信协议 - 全面更新现有 UI 测试以适配新的 helper 和状态管理
40 lines
1.3 KiB
Swift
40 lines
1.3 KiB
Swift
// RDEPUBSelectionState.swift
|
||
// 统一选区状态模型
|
||
// 收口选区相关状态的冗余表达,降低 view 层与 controller 层各持有一份选区状态
|
||
// 所带来的维护成本和时序问题。
|
||
|
||
import Foundation
|
||
|
||
/// 统一选区状态枚举
|
||
/// 替代原先散落在 view/controller/coordinator 的 `currentSelection != nil` 判断
|
||
enum RDEPUBSelectionState: Equatable {
|
||
/// 无选区
|
||
case idle
|
||
/// 用户正在拖拽选区(长按手势已开始,尚未松手)
|
||
case selecting(anchor: Int)
|
||
/// 选区已完成(用户松手,有有效文本)
|
||
case selected(RDEPUBSelection)
|
||
/// 正在执行选区菜单动作(拷贝/高亮/批注),动作完成后回到 idle
|
||
case committingAction(RDEPUBSelection, action: RDEPUBAnnotationMenuAction)
|
||
|
||
/// 当前是否有有效选区(selecting / selected / committingAction 均视为有选区)
|
||
var hasSelection: Bool {
|
||
switch self {
|
||
case .idle:
|
||
return false
|
||
case .selecting, .selected, .committingAction:
|
||
return true
|
||
}
|
||
}
|
||
|
||
/// 当前选区数据(如有)
|
||
var selection: RDEPUBSelection? {
|
||
switch self {
|
||
case .idle, .selecting:
|
||
return nil
|
||
case .selected(let selection), .committingAction(let selection, _):
|
||
return selection
|
||
}
|
||
}
|
||
}
|