Commit Graph

331 Commits

Author SHA1 Message Date
x1ao4
b56aec6505 优化任务列表海报视图卡片悬停信息的下一集播出日期的获取逻辑 2025-12-16 17:24:53 +08:00
x1ao4
dcc3943187 在任务列表海报视图的卡片悬停信息中增加已转存集数的下一集的播出日期
任务列表海报视图的卡片悬停信息第四行之前只显示节目的本地播出时间,改为显示已转存集数的下一集的本地播出日期和本地播出时间,方便判断和了解下一集的播出情况
2025-12-16 16:45:30 +08:00
x1ao4
06adc79a17 新增剧集播出日期偏移功能
- 支持在编辑元数据模态框内为(本地)播出时间显示和编辑播出日期偏移参数,对于转换时区后的本地播出时间,若产生了日期偏移,将自动补全偏移参数,也支持修改、添加或删除日期偏移参数,删除日期偏移将使用剧集在发行地的原始播出日期作为播出日期进行判定或显示
- 日期偏移会影响剧集的本地播出日期,从而影响剧集已播出集数和任务进度的计算
2025-12-16 15:27:51 +08:00
x1ao4
03d9a0d0b7 修改 QASX Token 的显示样式并优化了部分提示信息 2025-12-14 15:10:52 +08:00
x1ao4
4a2acea19e 完善 Trakt 初次配置逻辑并优化了 API 配置模块
- 新增首次配置 Trakt Client ID 时全量同步播出时间并重算进度逻辑
- 优化系统配置页面:合并 API 配置模块并优化间距和交互体验
2025-12-12 21:29:08 +08:00
x1ao4
07abca763e 新增基于 Trakt 精确播出时间的本地时区已播出统计与显示及相关优化 2025-12-12 18:17:20 +08:00
x1ao4
8f0b079059 把运行日志显示范围的默认值改为 1 天 2025-12-02 21:00:56 +08:00
x1ao4
8c08b00db7 在运行日志页面增加 >>> 与任务名称快速筛选功能
- 为运行日志中的 >>> 增加点击快速内容筛选,重复点击可清除筛选
- 为 “任务名称: xxxx” 中的任务名增加点击快速任务筛选,复用原有任务块筛选逻辑
2025-12-01 20:32:49 +08:00
x1ao4
9269f66cd5 将日志备份文件数量从 5 个改为 2 个 2025-11-30 22:34:53 +08:00
x1ao4
12cf1bb190 新增运行日志显示范围设置选项,支持按时间范围显示日志
- 将日志显示方式从按条数限制改为按时间范围限制(默认显示最近 3 天的日志)
- 在系统配置的性能设置中添加 '运行日志显示范围' 配置项,允许用户自定义天数
- 保持向后兼容:API 仍支持 limit 参数,旧配置自动使用默认值
2025-11-30 21:41:35 +08:00
x1ao4
1045fa1934 优化运行日志页面的加载体验:移除加载动画和提示,改为静默加载
- 移除首次加载和刷新时显示的 Spinner 动画和 '加载日志中...' 提示
- 优化 '暂无匹配的日志' 提示的显示逻辑:仅在加载完成且确实无匹配日志时显示
- 加载过程中保持静默,不显示任何提示信息
- 保持日志筛选、轮询、页面切换等所有功能正常工作
2025-11-30 20:45:01 +08:00
x1ao4
b8e278fadb 修复运行日志页面筛选器清空后滚动位置异常的问题
为级别筛选和内容筛选添加滚动位置保存和恢复功能,确保清空筛选后始终回到筛选前的位置,无论筛选是否有结果,与任务筛选保持一致的交互体验
2025-11-29 21:55:14 +08:00
x1ao4
e6e1f95a8c 在 WebUI 上增加了运行日志查看页面 2025-11-29 21:04:38 +08:00
x1ao4
9f2b2c7bfe 完善孤立内容清理逻辑,自动清理孤立的 shows 和海报文件
- 在 cleanup_orphan_data 中添加清理孤立 shows 的逻辑
- 当任务被删除或修改时,自动清理不再被任何任务引用的 shows
- 在清理孤立数据后自动清理孤立的海报文件
- 确保数据库和文件系统中的孤立数据都能被及时清理
2025-11-28 11:00:46 +08:00
x1ao4
a36c58986b 修复手动刷新元数据后任务列表集数信息未更新的问题
问题:
- 手动刷新节目的元数据后,追剧日历的集数显示更新了,但任务列表的集数没有更新
- 只有在追剧日历刷新的定时任务刷新后,任务列表的集数数据才正确刷新

原因:
- refreshSeasonMetadata 函数刷新成功后,虽然更新了 calendar.tasks,但缺少更新 progressByShowName
- 任务列表和管理视图的集数数据依赖于 progressByShowName,因此没有正确更新

修复:
- 在 refreshSeasonMetadata 函数中,刷新成功后添加了更新 progressByShowName 的步骤
- 确保任务列表和管理视图的集数数据(已转存集数/已播出集数/节目总集数)能立即正确更新
2025-11-28 10:33:09 +08:00
x1ao4
6c2e715bdf 修复任务列表顶部组件的间距问题 2025-11-25 15:07:50 +08:00
x1ao4
0c81dd48b7 为转存记录添加状态筛选功能 2025-11-25 15:01:27 +08:00
x1ao4
85da3ec023 为追剧日历添加状态筛选功能 2025-11-24 23:39:02 +08:00
x1ao4
b520378d26 新增任务状态筛选功能,修复窄屏下排序与分页的样式溢出问题
- 新增任务状态筛选下拉及逻辑,优化筛选布局与间距
- 修复排序、分页按钮在窄屏下文字溢出、间距异常等问题
2025-11-24 22:26:09 +08:00
x1ao4
93f9fbe4cb 调整任务数量指示器样式 2025-11-24 14:53:52 +08:00
x1ao4
710c91840f 在任务列表页面增加了任务数量指示器 2025-11-18 16:06:11 +08:00
x1ao4
1ca3230153 优化手动执行模式:支持忽略执行周期规则的单任务运行
- 新增 IGNORE_EXECUTION_RULES 环境变量,用于标记手动运行单个任务时忽略执行周期/进度限制
- run_script_now 在手动运行单个任务时设置该标记,并保留原始任务索引用于日志显示
- do_save 支持 ignore_execution_rules 参数,单任务手动运行时直接跳过执行周期与进度判断
- 保持手动运行 ALL 和定时任务的执行周期/进度规则不变,避免影响现有功能
2025-11-17 17:21:19 +08:00
x1ao4
b420029771 为定时运行全部任务添加自动重试机制
- 当定时任务执行失败(返回非零退出码)时,自动重试一次,提高任务执行成功率。
- 重试前等待 5 秒,避免立即重试。
- 保留所有原有功能和日志记录。
2025-11-16 11:54:24 +08:00
x1ao4
e69ad46ddd 优化选择文件夹模态框的文件名排序逻辑
- 为 source/target/move 三个模态框调整文件名排序优先级
- 文件:日期 > 期数 > 上中下 > 拼音 > 修改日期
- 文件夹:日期 > 上中下 > 拼音 > 修改日期
- 拼音排序键提前到修改日期之前,便于按拼音排序
2025-11-16 11:23:41 +08:00
x1ao4
4950b53e03 修复会话持久化问题并增强安全性
- 修复用户每天需要重新登录的问题,确保登录状态保持31天
- 添加 before_request 钩子确保已登录用户的会话保持永久状态
- 增强会话 cookie 安全性:添加 HTTPONLY 和 SAMESITE 标志
- 实现动态 SESSION_COOKIE_SECURE 设置,自动适配 HTTP/HTTPS 环境
- 支持反向代理场景,自动检测 X-Forwarded-Proto 和 X-Forwarded-Scheme 头

修改内容:
- 添加 SESSION_COOKIE_HTTPONLY 和 SESSION_COOKIE_SAMESITE 配置
- 实现动态 HTTPS 检测和 SESSION_COOKIE_SECURE 设置
- 添加 make_session_permanent() 钩子函数确保会话持久化

安全性:
- 防止 XSS 攻击(HTTPONLY)
- 防止 CSRF 攻击(SAMESITE)
- HTTPS 环境下自动启用 Secure 标志

兼容性:
- 同时支持 HTTP 和 HTTPS 环境
- 支持 Nginx、Apache 等反向代理场景
- 不影响现有登录、登出和验证功能
2025-11-16 10:40:00 +08:00
x1ao4
7a15bb1758 修复定时运行全部任务完成后已转存集数和当日更新标识的热更新问题
- 修复 recompute_task_metrics_and_notify 中 season_metrics 的 transferred_count 未更新的 bug
- 在定时任务执行完毕后发送 crontab_task_completed SSE 通知
- 前端添加对 crontab_task_completed 事件的处理,确保刷新今日更新数据
2025-11-15 20:21:19 +08:00
x1ao4
3e5ce67eab 为显示设置和性能设置添加 Wiki 链接 2025-11-14 20:30:38 +08:00
x1ao4
ba829ffacc 新增按任务进度执行的执行周期模式
新增功能:
- 支持两种执行周期判断模式:按自选周期执行(自选)和按任务进度执行(自动)
- 系统配置添加执行周期设置选项,支持批量应用到所有任务
- 任务配置支持单独设置执行周期模式,覆盖系统默认值
- 按任务进度执行时,根据任务进度是否 100% 智能判断是否跳过
- 优化日志输出,准确反映实际应用的执行周期设置

技术实现:
- 新增 CalendarDB.get_task_metrics() 方法获取任务进度
- 修改 is_time() 函数支持两种执行周期判断模式
- 系统配置默认值为 manual,保持向后兼容
- 手动运行任务不受执行周期设置影响

涉及文件:
- app/sdk/db.py: 新增 get_task_metrics 方法
- app/run.py: 添加 execution_mode 默认值初始化
- app/templates/index.html: UI 修改和批量选择功能
- quark_auto_save.py: 核心判断逻辑和日志输出优化
2025-11-14 15:47:53 +08:00
x1ao4
fb794ac08f 优化 SQLite 数据库并发访问,解决 database is locked 错误
- 启用 WAL 模式(Write-Ahead Logging),大幅提升并发读写性能
- 为所有数据库操作添加自动重试机制(最多 3 次,指数退避)
- 设置连接超时时间(5 秒)和忙等待超时(5 秒),避免长时间阻塞
- 优化连接关闭逻辑,确保异常情况下也能正确释放资源
2025-11-13 10:54:12 +08:00
x1ao4
20add4c668 调整手动运行任务开始通知格式并新增结束成功通知
- 开始通知改为 “>>> 开始执行手动运行任务 [名称]”
- 任务结束后根据退出码输出成功或非零退出码警告
- 不影响定时任务日志行为
2025-11-11 17:49:30 +08:00
x1ao4
099581956e 补全定时任务的开始和结束日志输出
为 "播出集数自动刷新" 和 "追剧日历自动刷新" 添加完整的开始/结束日志
2025-11-11 11:00:14 +08:00
x1ao4
ff5a4cba9a 允许 APScheduler 在主机睡眠后补偿执行
- 全局启用 misfire_grace_time=None 与 coalesce=True,容忍长时间暂停并仅补偿一次
- 对 run_python 与日历刷新任务显式设置 misfire/coalesce/max_instances=1
- 避免睡眠唤醒后持续出现 missed,确保后续按期执行
- 不修改业务逻辑与数据,兼容现有行为
2025-11-10 20:30:28 +08:00
x1ao4
e7be8f5738 统一节目集数统计逻辑,改用后端 season_counts 提供数据
- 使用后端注入的 season_counts 展示已转存/已播出/总集数
- 移除前端基于 progressByTaskName/episodes 的本地推导分支
- 保留 episodes/progressByTaskName 用于非统计渲染与标识
- 提升渲染性能与前后端口径一致性
2025-11-10 17:28:54 +08:00
x1ao4
c5df061549 修复失效信息重复显示和日志连续空行问题
- 修复 do_rename_task 中失效信息重复显示的问题
- 修复日志输出中连续空行的问题
2025-11-08 18:02:20 +08:00
x1ao4
7a5d47b214 重构定时任务运行机制,支持自动清理与异常恢复
- 为定时运行全部任务(`run_python`)实现进程清理逻辑:
  * 每次运行前检查上一次任务是否仍在运行
  * 若仍在运行则强制终止并清理进程对象
  * 在 `finally` 块中统一清除进程引用,防止任务阻塞
- 为追剧日历刷新任务(`run_calendar_refresh_all_internal_wrapper`)添加相同的检查逻辑:
  * 检测上一次线程是否仍在运行
  * 若仍在运行则记录警告并继续执行新任务
  * 确保线程异常退出后能自动清理
- 优化异常处理,保证无论任务正常、异常或被系统终止,下次调度均可正常运行
- 避免 “maximum number of running instances reached” 等并发冲突问题
2025-11-08 16:11:57 +08:00
x1ao4
b7a6b1e35f 强化 “播出集数刷新时间” 限制,杜绝提前计入
- enrich_tasks_with_calendar_meta:未到刷新时间时,无条件用有效日期(昨日)统计覆盖缓存的 aired_count
- 已过刷新时间:仅在缓存非当日时用有效日期(今日)回填,确保日切后统一生效
- 修复部分节目 “提前计入已播” 且随后 “逐步恢复” 的展示不一致问题
- DB 统计口径保持 air_date<=有效日期,无前端改动
2025-11-07 19:05:41 +08:00
x1ao4
d213b62071 提升播出集数自动刷新任务的可靠性:失败按需重试
- 每日任务到点执行;若失败或当日标记未写入,则安排 10 分钟后一次性重试,直至成功为止(成功后清理重试任务)
- 启动与首次建立日历 SSE 时各进行一次按需检查(仅在已到刷新点且当日未生效时触发)
- 使用轻量标记文件 config/.aired_done 记录当日有效日期,无需修改数据库结构
2025-11-06 17:16:41 +08:00
x1ao4
98c0d9f938 修复已播出集数刷新时间限制未生效问题并优化相关功能
- 修复已播出集数刷新时间限制未生效问题,统一所有计算位置使用有效日期
- 配置保存时检测刷新时间变化,立即重新计算并热更新
- 优化日志输出,仅在配置改变时显示,避免重复信息
2025-11-06 02:42:44 +08:00
x1ao4
08553f99ca 在追剧日历自动刷新任务中新增了节目状态变更检测与热更新功能
- 在 run_calendar_refresh_all_internal 中检测 TMDB 节目状态变更(本地化)
- 变更时更新 shows.status 与 last_refreshed_at,保持其他字段不变
- 新增通知事件 status_updated,触发前后端热更新
- 保持原有集数据刷新与 auto_refresh 通知逻辑不变
2025-11-05 21:34:15 +08:00
x1ao4
874a09d57b 避免子进程误报 “播出集数自动刷新” 时间
- 引入 `IS_FLASK_SERVER_PROCESS` 仅在主进程打印启动提示
- 缓存上次时间,仅在时间变更时输出一次
- 解决手动运行子进程误打印为 00:00 的问题
2025-11-05 21:14:47 +08:00
x1ao4
eb74b6314a 启动与配置更新时稳定注册定时任务并优化日志
- 启动流程在 reload_tasks() 后重启 “追剧日历自动刷新/播出集数自动刷新” 任务,避免被清空
- 新增播出集数自动刷新任务的启动说明日志,显示执行时间
- 合并调度日志为 “已启动定时运行全部任务,定时规则 …”
- 降低 apscheduler 日志级别至 WARNING,去除 “Adding job tentatively …” 等噪音
2025-11-05 21:05:55 +08:00
x1ao4
4240ff9066 新增已播出集数刷新时间限制与自定义配置
- 新增性能设置项 "播出集数刷新时间"(24 小时制,默认 00:00)
- 访问时强制刷新受限于用户设置的刷新时间
- 仅在刷新时间之后允许访问时强制刷新已播出集数
- 已转存集数和节目总集数保持实时热更新,不受限制
- 向后兼容:配置缺失或解析失败时默认允许刷新
2025-11-05 01:40:38 +08:00
x1ao4
7d5f297b70 落库缓存计数与进度,前后端同步热更新
- 新增 season_metrics/task_metrics 表,缓存已转存/已播出/总集数与 progress_pct
- 统一进度口径:已转存 ÷ min(已播出, 总集数),越界钳制
- 季数据刷新/改绑/改季时写回季级缓存并通知前端
- 转存记录新增/删除后重算任务与季级缓存并通知前端
- 聚合接口优先读缓存,缺失回退计算并回填
2025-11-05 00:52:24 +08:00
x1ao4
e4c14ef3a1 同步删除 TMDB 不存在的季内集,保持本地 DB 与 TMDB 一致
在 CalendarDB 新增 prune_season_episodes_not_in;在季数据拉取/刷新路径统一调用,先删后写,消除 “幽灵集” 导致的计数/展示偏差
2025-11-04 18:47:22 +08:00
x1ao4
643ee8e592 修正模态框资源搜索下拉框 Spinner 的左边距 2025-10-15 20:30:23 +08:00
x1ao4
593ff1f728 资源聚合去重时保留多来源,展示为 “CloudSaver · PanSou”
来源徽标支持多来源显示,多来源统一使用 multi-source class
2025-10-15 19:45:19 +08:00
x1ao4
080c73fc07 引入全局 SSE 单例,统一 onopen/onerror,任务列表与日历共用连接,切页不丢事件
- 进入日历页即时 tick 与本地补拉,消除 60s 等待
- 校正可见性回退判断为 appSSE;清理重复 SSE 回调设置
- 保留原轮询兜底与可见性恢复逻辑,确保 SSE 异常时行为一致
2025-10-15 19:10:11 +08:00
x1ao4
2d944600e6 优化海报管理功能,支持用户自定义海报保护和自动清理孤立文件
- 新增 is_custom_poster 数据库字段,标记用户自定义海报
- 实现自定义海报保护机制,防止被 TMDB 自动更新覆盖
- 添加孤立文件自动清理功能,优化存储空间管理
- 优化海报更新逻辑,支持旧文件删除和新文件下载
- 提供手动清理孤立文件的 API 接口
- 保持向后兼容,旧版本数据无缝升级

解决用户自定义海报被覆盖和孤立文件积累的问题
2025-10-12 16:28:12 +08:00
x1ao4
3898c6d41c 修复追剧日历页面当日更新标识热更新延迟的问题
- 问题:追剧日历页面当日更新标识热更新有60秒延迟,任务列表页面能实时更新
- 原因:转存记录创建/更新时未触发SSE通知,前端只能依赖轮询检测变化
- 解决:
  * 后端:转存记录创建/更新时触发SSE通知 (transfer_record_created/updated)
  * 后端:批量重命名完成时触发SSE通知 (batch_rename_completed)
  * 前端:SSE处理中优先更新今日更新数据
  * 修复:添加安全的导入函数避免模块导入错误
- 效果:实现追剧日历页面当日更新标识实时热更新,与任务列表页面体验一致

涉及文件:
- quark_auto_save.py: 添加SSE通知触发和安全导入函数
- app/run.py: 批量重命名SSE通知
- app/templates/index.html: 前端SSE处理优化
2025-10-12 14:57:49 +08:00
x1ao4
7e12a2da9b 调整创建/编辑任务模态框的警告提示样式 2025-10-10 00:45:19 +08:00