Skip to content

1.需求概述 ​

本模块为相册定期增量扫描定时任务设置,不再只有简单分钟间隔,支持3种定时模式,支持自定义每周执行日期、每日固定时刻。

2.完整定时任务功能(高级版) ​

2.1 定时模式(三选一,单选切换) ​

前端提供单选按钮切换3种模式:

  1. 关闭定时扫描(不自动执行,仅手动)
  2. 间隔循环模式(每隔N分钟执行一次)
  3. 每周定时模式(每周指定星期几、指定几点执行)

放弃每天单独模式:每天=每周勾选全部7天,逻辑统一不冗余

2.2 各模式详细可选配置 ​

模式A:间隔循环扫描(原有保留) ​

下拉可选间隔:
5分钟 / 10分钟 / 15分钟 / 30分钟 / 60分钟

适用:频繁更新照片、希望快速同步

模式B:每周自定义定时扫描 ​

可配置3部分:

  1. 执行星期:多选勾选周一~周日(可多选,例如只周一、周三、周日执行)
  2. 执行时间:小时+分钟下拉选择(HH:mm,例如 02:30 凌晨执行)
  3. 含义:每周勾选的星期几,当天固定时间点自动执行一次增量扫描

3.前端页面完整交互设计 ​

3.1 页面整体布局 ​

  1. 定时扫描总开关(独立总控)
  2. 定时模式选择(单选组)
    • 关闭
    • 按间隔循环扫描
    • 每周定时扫描
  3. 根据选中模式,动态显示对应配置项(不显示无关配置)
  4. 保存配置按钮
  5. 扫描状态预览区
  6. 扫描历史日志列表区

3.2 各控件交互细节 ​

① 定时模式单选 ​

切换模式时,下方表单实时切换显示内容,无需保存。

② 间隔模式面板(选中后显示) ​

  • 间隔下拉选择:5/10/15/30/60分钟
  • 提示文案:适合频繁上传,机械硬盘唤醒较频繁

③ 每周定时模式面板(选中后显示,你重点要的) ​

控件:

  1. 星期多选勾选框:日、一、二、三、四、五、六(7个复选框)
    • 支持任意组合:仅周日 / 周一三五 / 每天(全选)
  2. 执行时间选择器:小时(0~23) + 分钟(0~59)下拉
  3. 提示文案:NAS机械硬盘推荐凌晨02:00~04:00执行,不影响日常使用

交互:

  • 至少勾选1天,否则保存提示错误“请选择至少一个执行星期”
  • 全选7天 = 每天固定时间执行(满足你“每天”的需求)

3.4 保存交互逻辑 ​

  1. 修改任意配置 → 点击【保存定时设置】
  2. 校验:每周模式必须勾选至少1天
  3. 保存成功:提示“定时配置已更新,下次周期生效”
  4. 保存失败:提示具体错误原因
  5. 配置实时回显到前端

3.5 禁止逻辑 ​

  • 定时关闭时,隐藏所有间隔/星期时间配置
  • 每周模式下,隐藏间隔选项
  • 间隔模式下,隐藏星期+时间选项

5.后端定时规则说明 ​

后端内部统一转为Cron表达式:

  1. interval间隔模式 → 对应分钟级cron
  2. weekly每周模式 → 星期+时间cron
  3. 每周全选7天 = 每日固定时间执行
  4. 任务重叠自动跳过策略不变

6.验收标准 ​

  1. 支持关闭、间隔循环、每周自定义星期+时间三种模式
  2. 每周模式支持任意多选星期,全选等价每天执行
  3. 每周模式必须至少勾选1天才能保存
  4. 修改配置下次定时生效,不中断当前扫描
  5. 定时触发任务重叠自动跳过

7.注意事项 ​

  1. 定时任务可扩展,目前是用作增量扫描任务,后续可扩展其他任务(如AI处理等)。
  2. 定时系统和触发的任务要解耦,定时系统只负责触发任务,任务执行逻辑单独实现。
  3. 定时任务为系统配置,package\server\app\core\system_config.py中定义。
  4. package\website\src\views\settings\BasicSettings.vue中实现定时任务配置页面。

Agent对话终止功能

  • package\website\src\views\agent\AgentChat.vue 中模型正在输出时,input框的发送按钮改成“终止”按钮,点击可以中断当前对话,langchain 1.0会中断与大模型的通信,停止模型输出。
  • 终止之后,input框的发送按钮会恢复为“发送”按钮,用户可以继续输入新的指令,模型已经输出的内容会保留。
  1. 现在在输出之前可以终止对话,但是输出过程中不能终止对话,需要在输出结束之前都可以终止
  2. 虽然终止了,但是后端还在持续输出内容,并没有从后端停止输出,只是前端没有显示了。

回收站功能 ​

用户删除照片后,照片会进入回收站,用户可以在回收站中恢复照片。回收站每天,清理过期,清理过期照片,过期照片为7天前删除的照片,可以配置过期时间,默认7天。

package\server\app\core\system_config.py 中定义回收站定时任务和过期时间,默认7天,默认为每天0点清理。

package\website\src\views\settings\BasicSettings.vue 中实现回收站配置页面。
用户可以在回收站配置页面中配置过期时间,默认7天。

package\server\app\db\models\photo.py 中photos表新增删除标记和删除时间,用于记录照片被删除的时间。

package\website\src\views\HomePage.vue 首页新增一个回收站按钮,点击可以跳转到回收站页面。

  1. 用户可以在回收站页面中查看已删除的照片,点击可以恢复照片。
  2. 用户可以在回收站页面中删除照片。
  3. 照片展示显示完整时间轴,使用package\website\src\components\UnifiedPhotoPage.vue组件展示照片

实现一个TrailSnap-cli工具skill,用于Claude Code中调用TrailSnap-cli工具。

skill包含以下功能:

server的api访问能力(写脚本调用server的api接口)

  1. 根据指定条件查询照片列表
  2. 查询相册里存在的标签、相册、位置、人物等信息
  3. 查询挂载的文件夹列表

用户第一次使用TrailSnap-cli工具时,需要先配置server的api地址和token。将配置信息保存到配置文件(.env)中。

现在采用的是二级命令cli工具,其操作功能有限,现在需要扩展其功能,采用三级命令cli工具。

例如:

bash
python cli.py photos list --city "西安市" --limit 5
python cli.py photos info --photo-id <photo_id>
python cli.py photos delete --photo-id <photo_id>
python cli.py folders list

cli工具打包并发布

核心思路(最稳、最流行)
package\trailsnap-cli 把 Python CLI 编译成 独立二进制(Windows/Mac/Linux 都能直接跑)

  • PyPI 包:打包二进制 → 支持 pip install
  • npm 包:下载对应系统二进制 → 支持 npm install -g

.github\workflows 里定义打包和发布流程,包括Windows/Mac/Linux的打包和发布,commit消息里包含“构建cli工具”,触发打包和发布流程。

基于 AGPL-3.0 许可发布