优化效率

This commit is contained in:
douboer
2025-08-12 15:05:29 +08:00
parent 3eaaf8ad2b
commit e55178e316
67 changed files with 19174 additions and 46 deletions

View File

@@ -19,7 +19,7 @@ def parse_location(location):
filepos = matches[1] if len(matches) > 1 else None
return idref, filepos
def get_annotations(db_path='./data/AEAnnotation.sqlite'):
def get_annotations(db_path='./data/AEAnnotation.sqlite', bookid=None):
# 检查WAL模式相关文件
base = db_path.rsplit('.', 1)[0]
wal_path = base + '.sqlite-wal'
@@ -29,10 +29,16 @@ def get_annotations(db_path='./data/AEAnnotation.sqlite'):
print(f'警告: 缺少 {f},可能无法获取全部最新笔记')
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute('''
SELECT ZANNOTATIONASSETID, ZANNOTATIONCREATIONDATE, ZANNOTATIONLOCATION, ZANNOTATIONNOTE, ZANNOTATIONSELECTEDTEXT, ZANNOTATIONUUID
FROM ZAEANNOTATION
''')
if bookid is not None:
cursor.execute('''
SELECT ZANNOTATIONASSETID, ZANNOTATIONCREATIONDATE, ZANNOTATIONLOCATION, ZANNOTATIONNOTE, ZANNOTATIONSELECTEDTEXT, ZANNOTATIONUUID
FROM ZAEANNOTATION WHERE ZANNOTATIONASSETID=?
''', (bookid,))
else:
cursor.execute('''
SELECT ZANNOTATIONASSETID, ZANNOTATIONCREATIONDATE, ZANNOTATIONLOCATION, ZANNOTATIONNOTE, ZANNOTATIONSELECTEDTEXT, ZANNOTATIONUUID
FROM ZAEANNOTATION
''')
rows = cursor.fetchall()
annotations = defaultdict(dict)
import datetime
@@ -65,6 +71,9 @@ def get_annotations(db_path='./data/AEAnnotation.sqlite'):
'selectedtext': selectedtext
}
conn.close()
if bookid is not None:
# 只返回特定bookid的笔记结构
return {str(bookid): annotations.get(str(bookid), {})}
return annotations
# 用法示例输出每本书的前3条笔记
@@ -81,11 +90,13 @@ if __name__ == "__main__":
print(f"location: {loc}\n idref: {idref}\n filepos: {filepos}\n")
'''
annotations = get_annotations()
# 测试只获取特定 assetid 的笔记
test_bookid = "B18FCD9F90FD43C2373AE52BAEF9A77C"
annotations = get_annotations(bookid=test_bookid)
# 格式化打印所有 annotations
# 格式化打印该书的所有笔记
from pprint import pprint
print("\n所有笔记:")
print(f"\nAssetID={test_bookid}所有笔记:")
pprint(annotations, indent=2, sort_dicts=False)
# 输出每本书的前3条笔记