feat: EPUB阅读器搜索、注释、CFI模块及大书远距跳转优化
- 实现EPUB阅读器搜索功能及选中注释功能 - 优化CFI模块,修复代码审查发现的11个问题 - 实现大书远距目录跳转与后台补全优化方案 - 优化设置面板与章节运行时联动 - 重构及大量改进优化
This commit is contained in:
@@ -26,6 +26,17 @@ enum IDs {
|
||||
static let readerBookmarksNavBar = "epub.reader.bookmarks.navbar"
|
||||
static let readerSelectionText = "epub.reader.selection.text"
|
||||
static let readerSelectionHighlight = "epub.reader.selection.高亮"
|
||||
static let readerContentView = "epub.reader.content.view"
|
||||
static let readerHighlightsPanel = "epub.reader.highlights.panel"
|
||||
static let readerHighlightsTable = "epub.reader.highlights.table"
|
||||
static let readerHighlightsFilter = "epub.reader.highlights.filter"
|
||||
static let readerHighlightsEmptyLabel = "epub.reader.highlights.empty"
|
||||
static let readerHighlightsNavBar = "epub.reader.highlights.navbar"
|
||||
static let readerBookmarksEmptyLabel = "epub.reader.bookmarks.empty"
|
||||
static let readerNoteText = "epub.reader.note.text"
|
||||
static let readerNoteActions = "epub.reader.note.actions"
|
||||
static let readerNoteReturn = "epub.reader.note.return"
|
||||
static let readerNoteOpen = "epub.reader.note.open"
|
||||
|
||||
static let readerSearch = "epub.reader.search"
|
||||
static let searchBar = "epub.reader.search.bar"
|
||||
|
||||
@@ -21,6 +21,11 @@ struct DemoReaderState {
|
||||
fields[key]
|
||||
}
|
||||
|
||||
private func decodedField(_ key: String) -> String? {
|
||||
guard let rawValue = fields[key], rawValue != "nil" else { return nil }
|
||||
return rawValue.removingPercentEncoding ?? rawValue
|
||||
}
|
||||
|
||||
var isOpened: Bool { fields["reader"] == "opened" }
|
||||
var page: Int? { fields["page"].flatMap(Int.init) }
|
||||
var display: String? { fields["display"] }
|
||||
@@ -28,8 +33,11 @@ struct DemoReaderState {
|
||||
var highlights: Int? { fields["highlights"].flatMap(Int.init) }
|
||||
var bookmarks: Int? { fields["bookmarks"].flatMap(Int.init) }
|
||||
var selection: Int? { fields["selection"].flatMap(Int.init) }
|
||||
var href: String? { fields["href"] }
|
||||
var href: String? { decodedField("href") }
|
||||
var progression: Double? { fields["progression"].flatMap(Double.init) }
|
||||
var cfi: String? { decodedField("cfi") }
|
||||
var lastCFI: String? { decodedField("lastCFI") }
|
||||
var rangeCFI: String? { decodedField("rangeCFI") }
|
||||
var mode: String? { fields["mode"] }
|
||||
var pagination: String? { fields["pagination"] }
|
||||
var knownPages: Int? { fields["knownPages"].flatMap(Int.init) }
|
||||
@@ -47,9 +55,9 @@ struct DemoReaderState {
|
||||
var cacheFiles: Int? { fields["cacheFiles"].flatMap(Int.init) }
|
||||
var cacheBytes: Int? { fields["cacheBytes"].flatMap(Int.init) }
|
||||
var externalLinks: Int? { fields["externalLinks"].flatMap(Int.init) }
|
||||
var lastExternalURL: String? { fields["lastExternalURL"] }
|
||||
var lastError: String? { fields["lastError"] }
|
||||
var searchMatchText: String? { fields["searchMatchText"] }
|
||||
var lastExternalURL: String? { decodedField("lastExternalURL") }
|
||||
var lastError: String? { decodedField("lastError") }
|
||||
var searchMatchText: String? { decodedField("searchMatchText") }
|
||||
}
|
||||
|
||||
extension XCUIApplication {
|
||||
|
||||
Reference in New Issue
Block a user