项目初始化 - 创建完整项目结构(src/, data/, docs/, examples/, tests/) - 配置requirements.txt依赖 - 创建.gitignore P0基础框架 - 数据库模型:Record模型,6种分类类型 - 配置管理:YAML配置,支持AI/OCR/云存储/UI配置 - OCR模块:PaddleOCR本地识别,支持云端扩展 - AI模块:支持OpenAI/Claude/通义/Ollama,6种分类 - 存储模块:完整CRUD,搜索,统计,导入导出 - 主窗口框架:侧边栏导航,米白配色方案 - 图片处理:截图/剪贴板/文件选择/图片预览 - 处理流程整合:OCR→AI→存储串联,Markdown展示,剪贴板复制 - 分类浏览:卡片网格展示,分类筛选,搜索,详情查看 技术栈 - PyQt6 + SQLAlchemy + PaddleOCR + OpenAI/Claude SDK - 共47个Python文件,4000+行代码 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
214 lines
6.5 KiB
Python
214 lines
6.5 KiB
Python
"""
|
||
测试浏览视图功能
|
||
|
||
创建测试数据并启动浏览视图进行验证
|
||
"""
|
||
|
||
import sys
|
||
from datetime import datetime
|
||
from pathlib import Path
|
||
from PyQt6.QtWidgets import QApplication
|
||
from PyQt6.QtCore import Qt
|
||
|
||
# 添加项目路径
|
||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||
|
||
from src.models.database import init_database, Record, RecordCategory, get_db
|
||
from src.gui.widgets.browse_view import BrowseView
|
||
|
||
|
||
def create_test_data():
|
||
"""创建测试数据"""
|
||
print("正在创建测试数据...")
|
||
|
||
# 初始化数据库
|
||
db_path = "sqlite:////home/congsh/CodeSpace/ClaudeSpace/CutThenThink/data/cutnthink.db"
|
||
init_database(db_path)
|
||
|
||
session = get_db()
|
||
|
||
# 检查是否已有数据
|
||
existing_count = session.query(Record).count()
|
||
if existing_count > 0:
|
||
print(f"数据库中已有 {existing_count} 条记录,跳过创建测试数据")
|
||
session.close()
|
||
return
|
||
|
||
# 创建测试记录
|
||
test_records = [
|
||
{
|
||
"image_path": "/tmp/test_todo_1.png",
|
||
"ocr_text": "完成项目报告\n需要在周五之前提交季度报告给老板",
|
||
"category": RecordCategory.TODO,
|
||
"ai_result": """# 任务分析
|
||
|
||
这是一个待办事项,需要在周五之前完成。
|
||
|
||
## 行动建议
|
||
1. 整理季度数据和成果
|
||
2. 撰写报告草稿
|
||
3. 请同事审阅
|
||
4. 最终修改并提交
|
||
|
||
**截止时间**: 本周五""",
|
||
"tags": ["工作", "报告"],
|
||
"notes": "重要优先级高"
|
||
},
|
||
{
|
||
"image_path": "/tmp/test_note_1.png",
|
||
"ocr_text": "Python学习笔记\n\n1. 列表推导式: [x*2 for x in range(10)]\n2. 装饰器: @property\n3. 生成器: yield",
|
||
"category": RecordCategory.NOTE,
|
||
"ai_result": """# Python笔记摘要
|
||
|
||
这份笔记涵盖了三个重要的Python概念:
|
||
|
||
- 列表推导式: 简洁的列表创建方式
|
||
- 装饰器: 修改函数行为的工具
|
||
- 生成器: 内存友好的迭代器
|
||
|
||
**建议**: 可以添加更多实际例子加深理解。""",
|
||
"tags": ["编程", "Python"],
|
||
"notes": "需要复习装饰器部分"
|
||
},
|
||
{
|
||
"image_path": "/tmp/test_idea_1.png",
|
||
"ocr_text": "产品创意:智能日程助手\n\n功能:\n- 自动识别会议邀请\n- 智能安排时间\n- 提醒重要事项",
|
||
"category": RecordCategory.IDEA,
|
||
"ai_result": """# 创意评估
|
||
|
||
这是一个很好的产品方向!
|
||
|
||
## 优势
|
||
- 解决实际痛点
|
||
- 技术可行性高
|
||
|
||
## 建议
|
||
1. 先做MVP验证核心功能
|
||
2. 考虑与现有日历应用集成
|
||
3. 加入AI推荐功能
|
||
|
||
**推荐指数**: ⭐⭐⭐⭐⭐""",
|
||
"tags": ["产品", "创意"],
|
||
"notes": "可以作为下一个项目"
|
||
},
|
||
{
|
||
"image_path": "/tmp/test_ref_1.png",
|
||
"ocr_text": "Django REST Framework 官方文档\n\nhttps://www.django-rest-framework.org/\n\nViewSets和Routers的使用",
|
||
"category": RecordCategory.REF,
|
||
"ai_result": """# 学习资源
|
||
|
||
Django REST Framework 是构建Web API的强大工具。
|
||
|
||
## 核心概念
|
||
- **Serializers**: 数据序列化和验证
|
||
- **ViewSets**: 视图逻辑组织
|
||
- **Routers**: URL自动生成
|
||
|
||
## 建议学习路径
|
||
1. 快速入门教程
|
||
2. 序列化器深入
|
||
3. 认证和权限""",
|
||
"tags": ["文档", "Django"],
|
||
"notes": "需要深入学习认证部分"
|
||
},
|
||
{
|
||
"image_path": "/tmp/test_funny_1.png",
|
||
"ocr_text": "程序员段子\n\n程序员最讨厌的四件事:\n1. 写注释\n2. 写文档\n3. 别人不写注释\n4. 别人不写文档",
|
||
"category": RecordCategory.FUNNY,
|
||
"ai_result": """# 😄 经典段子
|
||
|
||
这是一个程序员圈子里很火的段子!
|
||
|
||
## 为什么好笑
|
||
- 说出了程序员的心声
|
||
- 既矛盾又真实
|
||
- 自嘲式幽默
|
||
|
||
## 启示
|
||
代码质量很重要,但也不能忽视文档工作啊~ 😅""",
|
||
"tags": ["幽默", "程序员"],
|
||
"notes": "太真实了"
|
||
},
|
||
{
|
||
"image_path": "/tmp/test_text_1.png",
|
||
"ocr_text": "这是一段普通的文本内容,用于测试纯文本类型的记录。\n\n可以包含各种文字信息,比如会议记录、聊天记录等。",
|
||
"category": RecordCategory.TEXT,
|
||
"ai_result": None,
|
||
"tags": ["测试"],
|
||
"notes": "测试用文本记录"
|
||
},
|
||
# TODO类型更多测试数据
|
||
{
|
||
"image_path": "/tmp/test_todo_2.png",
|
||
"ocr_text": "买咖啡 ☕\n\n- 意式浓缩豆\n- 拿铁咖啡豆\n- 滤纸",
|
||
"category": RecordCategory.TODO,
|
||
"ai_result": "# 购物清单\n\n记得去超市买咖啡用品!",
|
||
"tags": ["购物", "咖啡"],
|
||
"notes": "周末去买"
|
||
},
|
||
# NOTE类型更多测试数据
|
||
{
|
||
"image_path": "/tmp/test_note_2.png",
|
||
"ocr_text": "会议记录 - 产品评审\n\n日期: 2024-01-15\n\n讨论内容:\n1. 新功能开发计划\n2. 用户反馈处理\n3. 下季度规划",
|
||
"category": RecordCategory.NOTE,
|
||
"ai_result": """# 会议要点
|
||
|
||
## 产品评审会议
|
||
|
||
**日期**: 2024-01-15
|
||
|
||
### 决策事项
|
||
1. 新功能开发优先级已确定
|
||
2. 用户反馈需要建立跟进机制
|
||
3. 下季度开始筹备规划会议
|
||
|
||
### 行动项
|
||
- [ ] 整理会议纪要
|
||
- [ ] 跟进各个部门负责人""",
|
||
"tags": ["会议", "工作"],
|
||
"notes": "重要会议"
|
||
},
|
||
]
|
||
|
||
# 添加记录到数据库
|
||
for i, data in enumerate(test_records):
|
||
record = Record(
|
||
image_path=data["image_path"],
|
||
ocr_text=data["ocr_text"],
|
||
category=data["category"],
|
||
ai_result=data.get("ai_result"),
|
||
tags=data.get("tags"),
|
||
notes=data.get("notes"),
|
||
created_at=datetime.now(),
|
||
)
|
||
session.add(record)
|
||
print(f"已创建测试记录 {i+1}/{len(test_records)}: {data['category']}")
|
||
|
||
session.commit()
|
||
print(f"\n成功创建 {len(test_records)} 条测试记录")
|
||
|
||
session.close()
|
||
|
||
|
||
def main():
|
||
"""主函数"""
|
||
# 创建应用
|
||
app = QApplication(sys.argv)
|
||
app.setApplicationName("CutThenThink 浏览视图测试")
|
||
|
||
# 创建测试数据
|
||
create_test_data()
|
||
|
||
# 创建并显示浏览视图
|
||
view = BrowseView()
|
||
view.setWindowTitle("浏览视图测试")
|
||
view.resize(1200, 800)
|
||
view.show()
|
||
|
||
# 运行应用
|
||
sys.exit(app.exec())
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|