improvement(chat): 会话列表改用 session_last_message 缓存表

- 用 session.db::session_last_message 缓存会话最后一条消息预览,减少会话列表查询开销
- 增加缓存表构建/状态接口,列表缺失时自动补建
- 解密阶段支持自动构建,环境变量切换为 WECHAT_TOOL_BUILD_SESSION_LAST_MESSAGE
- 移除 session_preview_index 实现
This commit is contained in:
2977094657
2025-12-25 23:08:50 +08:00
parent 5a8075ca8a
commit e7d977ae94
5 changed files with 633 additions and 609 deletions

View File

@@ -441,20 +441,20 @@ def decrypt_wechat_databases(db_storage_path: str = None, key: str = None) -> di
"failed_files": account_failed
}
# 构建“会话最后一条消息”索引:把耗时挪到解密阶段,一劳永逸
if os.environ.get("WECHAT_TOOL_BUILD_SESSION_PREVIEW", "1") != "0":
# 构建“会话最后一条消息”缓存表:把耗时挪到解密阶段,后续会话列表直接查表
if os.environ.get("WECHAT_TOOL_BUILD_SESSION_LAST_MESSAGE", "1") != "0":
try:
from .session_preview_index import build_session_preview_index
from .session_last_message import build_session_last_message_table
account_results[account_name]["session_preview_index"] = build_session_preview_index(
account_results[account_name]["session_last_message"] = build_session_last_message_table(
account_output_dir,
rebuild=True,
include_hidden=True,
include_official=True,
)
except Exception as e:
logger.warning(f"构建会话预览索引失败: {account_name}: {e}")
account_results[account_name]["session_preview_index"] = {
logger.warning(f"构建会话最后一条消息缓存表失败: {account_name}: {e}")
account_results[account_name]["session_last_message"] = {
"status": "error",
"message": str(e),
}