修改detaildesign文档
This commit is contained in:
Binary file not shown.
@@ -3,6 +3,7 @@
|
||||
## 1. 概述
|
||||
|
||||
本工具用于从 macOS iBooks(Apple Books)应用的数据文件中提取用户的书籍笔记,并以 Markdown 格式导出。支持从 iBooks 的数据库和 plist 文件自动同步数据,支持交互式选择书籍导出,导出内容结构清晰,便于后续整理和阅读。
|
||||
支持按最近打开时间排序书籍,菜单显示书名与时间戳,导出流程高效。
|
||||
|
||||
---
|
||||
|
||||
@@ -14,6 +15,7 @@
|
||||
- 支持交互式模糊搜索选择要导出的书籍。
|
||||
- 按章节导出所选书籍的所有笔记,格式为 Markdown。
|
||||
- 书名中如含有“-xxxx”后缀,仅保留“-”前的主书名。
|
||||
- 书籍选择菜单按最近打开时间(last_open)降序排序,显示格式为“书名 [时间戳]”。
|
||||
|
||||
---
|
||||
|
||||
@@ -54,9 +56,11 @@ booksnote = {
|
||||
|
||||
### 4.3 交互式选择书籍
|
||||
|
||||
- 统计每本书的最新笔记时间。
|
||||
- 读取 Books.plist 获取所有书籍元数据。
|
||||
- 读取 BKLibrary.sqlite,获取每本书的最近打开时间(last_open,苹果时间戳,基准2001-01-01)。
|
||||
- 生成书名列表(优先 `displayname`,其次 `itemname`,否则用 `assetid`),并去除“-xxxx”后缀。
|
||||
- 按最新笔记时间降序排列,使用 InquirerPy 提供模糊搜索交互界面,供用户选择要导出的书籍。
|
||||
- 按 last_open 时间戳降序排列,菜单显示“书名 [时间戳]”,时间戳为 last_open 字段。
|
||||
- 使用 InquirerPy 提供模糊搜索交互界面,供用户选择要导出的书籍。
|
||||
|
||||
### 4.4 导出 Markdown
|
||||
|
||||
@@ -109,9 +113,18 @@ name = info.get('displayname') or info.get('itemname') or assetid
|
||||
if '-' in name: name = name.split('-', 1)[0].strip()
|
||||
```
|
||||
|
||||
### 7.2 交互式选择
|
||||
|
||||
### 7.2 交互式选择与排序
|
||||
|
||||
```python
|
||||
from booklist_parse import get_books_last_open
|
||||
last_open_times = get_books_last_open('data/BKLibrary.sqlite')
|
||||
for assetid, info in booksinfo.items():
|
||||
...
|
||||
ts = last_open_times.get(assetid, {}).get('last_open', 0)
|
||||
assetid2lastopen[assetid] = ts
|
||||
sorted_assetids = sorted(assetid2name.keys(), key=lambda aid: assetid2lastopen[aid], reverse=True)
|
||||
choices = [f"{assetid2name[aid]} [{assetid2lastopen[aid]}]" for aid in sorted_assetids]
|
||||
answer = inquirer.fuzzy(
|
||||
message="请选择要导出的书名(支持模糊搜索):",
|
||||
choices=choices,
|
||||
@@ -122,28 +135,31 @@ answer = inquirer.fuzzy(
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 8. 依赖说明
|
||||
|
||||
- Python 3
|
||||
- 主要依赖库:`InquirerPy`, `bs4`, `shutil`, `os`, `datetime`
|
||||
- 需有 iBooks 数据库和 plist 文件的本地访问权限
|
||||
- 主要依赖库:`InquirerPy`, `bs4`, `shutil`, `os`, `datetime`, `sqlite3`
|
||||
- 需有 iBooks 数据库、plist 文件和 BKLibrary.sqlite 的本地访问权限
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
## 9. 目录结构
|
||||
|
||||
- `data/`:存放同步下来的数据库和 plist 文件
|
||||
- `data/`:存放同步下来的数据库和 plist 文件(含 AEAnnotation.sqlite、Books.plist、BKLibrary.sqlite 等)
|
||||
- `export_notes/`:导出的 Markdown 文件
|
||||
- `examples/`:epub 示例文件夹
|
||||
|
||||
---
|
||||
|
||||
|
||||
### 9.1 主要代码文件说明
|
||||
|
||||
- `exportbooknotes.py`:主程序,负责数据同步、交互式选择、笔记导出等全部流程。
|
||||
- `exportbooknotes.py`:主程序,负责数据同步、交互式选择、笔记导出等全部流程,菜单排序和显示基于最近打开时间戳。
|
||||
- `annotationdata.py`:负责从 iBooks 的 SQLite 数据库中解析和获取笔记数据。
|
||||
- `booklist_parse.py`:负责解析 Books.plist,获取书籍元数据(如书名、路径等)。
|
||||
- `booklist_parse.py`:负责解析 Books.plist,获取书籍元数据(如书名、路径等),并提供 get_books_last_open 读取 BKLibrary.sqlite 获取最近打开时间。
|
||||
- `opf_parse.py`:负责解析 epub 的 OPF 文件,获取章节与文件映射关系。
|
||||
- `toc_parse.py`:负责解析 NCX 目录文件,章节定位,以及辅助章节查找。
|
||||
- `backup/booksnote.py`:备份或历史版本的笔记处理脚本。
|
||||
|
||||
Reference in New Issue
Block a user