修改detaildesign文档

This commit is contained in:
douboer
2025-08-12 19:44:57 +08:00
parent e3131f515d
commit fabd0225d6
3 changed files with 24 additions and 8 deletions

View File

@@ -3,6 +3,7 @@
## 1. 概述
本工具用于从 macOS iBooksApple 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`:备份或历史版本的笔记处理脚本。