x1ao4
|
9f2b2c7bfe
|
完善孤立内容清理逻辑,自动清理孤立的 shows 和海报文件
- 在 cleanup_orphan_data 中添加清理孤立 shows 的逻辑
- 当任务被删除或修改时,自动清理不再被任何任务引用的 shows
- 在清理孤立数据后自动清理孤立的海报文件
- 确保数据库和文件系统中的孤立数据都能被及时清理
|
2025-11-28 11:00:46 +08:00 |
|
x1ao4
|
0c81dd48b7
|
为转存记录添加状态筛选功能
|
2025-11-25 15:01:27 +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
|
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
|
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
|
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
|
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
|
593ff1f728
|
资源聚合去重时保留多来源,展示为 “CloudSaver · PanSou”
来源徽标支持多来源显示,多来源统一使用 multi-source class
|
2025-10-15 19:45:19 +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
|
1f99f66ce5
|
新增字幕命名规则功能,支持在全局设置字幕文件的语言代码后缀
- 添加字幕文件语言代码后缀自动添加功能
- 支持 .srt/.ass/.ssa/.vtt/.sup 等常见字幕格式
- 在系统配置中提供语言代码设置和启用开关
- 覆盖所有重命名场景:预览界面、任务执行、文件整理
- 支持顺序命名、剧集命名、正则表达式命名模式
- 避免重复添加语言代码后缀
- 默认语言代码为 "zh",默认禁用状态
功能说明:
- 用户可在系统配置中设置字幕文件的语言代码(如 "zh")
- 启用后,所有字幕文件重命名时自动添加语言代码后缀
- 例如:`movie.srt` → `movie.zh.srt`
- 支持所有命名模式和预览功能
- 向后兼容,不影响现有功能
|
2025-09-29 15:19:11 +08:00 |
|
x1ao4
|
da051409df
|
为重置文件夹功能增加 SSE 推送,支持相关数据的实时更新
|
2025-09-23 14:10:27 +08:00 |
|
x1ao4
|
27ee3948b8
|
优化集编号识别规则与逻辑,修复文件整理页面命名预览模态框重命名列的排序问题
|
2025-09-23 09:14:04 +08:00 |
|
x1ao4
|
f7371b660b
|
将 TMDB 及网络重试日志的输出调整为 DEBUG 级别
- tmdb_service 中主/备地址失败与切换日志改为 debug
- run.py 设置 urllib3/requests 日志级别为 ERROR
- 为 urllib3.connectionpool 添加过滤器,自动将 “Retrying (...)” 告警降为 DEBUG
|
2025-09-22 23:37:34 +08:00 |
|
x1ao4
|
8036e3256b
|
移除更换海报的日志输出
- 移除 “成功保存自定义海报: …” 与 “成功更新自定义海报: …” 的 info 日志输出,改为静默处理
- 不影响海报保存、数据库同步与 `poster_updated:<tmdb_id>` 通知链路,功能保持不变,减少无意义日志噪音
|
2025-09-16 01:46:54 +08:00 |
|
x1ao4
|
842730e3dd
|
优化任务海报的加载逻辑,启用长缓存并保留更换海报的精确热更新
将 `/cache/images` 改为 `Cache-Control: public, max-age=31536000, immutable` 提升切页性能;在自定义海报、刷新剧目、批量重下海报时发送 `poster_updated:<tmdb_id>`,前端 SSE 监听后对目标节目设置 `imageCacheBustById`,仅变更项追加 `?t=` 强制刷新,未变更项命中缓存。
|
2025-09-16 01:20:42 +08:00 |
|
x1ao4
|
9fd9d5cd74
|
在编辑元数据模态框内增加了更换海报功能
|
2025-09-15 15:49:17 +08:00 |
|
x1ao4
|
41b2cd7727
|
修复最近转存文件只包含日期信息时集数统计和转存进度丢失的问题
- 修复后端 enrich_tasks_with_calendar_meta 函数,增加对只有日期情况的处理
- 修复前端任务列表页面数据加载,确保 episodes 数据和进度映射正确构建
- 解决刷新页面后已转存集数变为0的问题
- 保持向后兼容,不影响包含集数的文件处理
问题:最近转存文件中不包含集数但包含播出日期时,任务列表页面的集数统计和转存进度在刷新后会丢失
解决:完善后端数据处理逻辑,确保前端页面能正确加载和构建所需的数据映射
|
2025-09-15 01:25:39 +08:00 |
|
x1ao4
|
8f0c60957d
|
新增海报语言设置功能
|
2025-09-13 20:26:27 +08:00 |
|
x1ao4
|
2db4e1587d
|
在任务列表页面新增创建任务按钮,优化热更新和季数匹配逻辑
|
2025-09-13 19:08:44 +08:00 |
|
x1ao4
|
7f42f694ce
|
新增追剧日历功能
|
2025-09-09 16:24:58 +08:00 |
|
x1ao4
|
a89ad08ae8
|
修正 Cookie 状态判断逻辑,准确反映账号功能支持情况
1. 修正后端get_user_info接口
- 为成功获取账号信息的情况添加has_mparam字段
- 确保前端能正确判断账号是否包含移动端参数
2. 修正前端Cookie状态判断逻辑
- 根据账号索引位置判断功能支持情况
- 第一个账号(index=0)支持转存和签到
- 其他账号只支持签到功能
- 修正了第一个账号被错误识别为'仅支持转存'的问题
3. 完善状态提示信息
- 账号已登录,支持转存和签到 (第一个账号,有移动端参数)
- 账号已登录,仅支持转存功能 (第一个账号,无移动端参数)
- 账号已登录,仅支持签到功能 (其他账号,有移动端参数)
- 账号已登录,不支持转存和签到 (其他账号,无移动端参数)
- 账号已失效,请重新获取Cookie
- 仅支持签到功能 (无昵称,有移动端参数)
- 账号未登录,请获取Cookie (无昵称,无移动端参数)
|
2025-08-31 03:23:17 +08:00 |
|
x1ao4
|
5216fa981d
|
修复资源搜索结果在大样本下超时后重复追加,导致重复渲染与计数膨胀的问题
- 前端:引入搜索 “会话号 + validating” 双重校验,超时立即取消当前会话,并在批处理/渲染前校验,阻断超时后的继续写入;保留稳定 v-for key 确保渲染一致性
- 后端:`get_detail` 增强容错,避免无 `code`/网络异常引发 KeyError;`/get_share_detail` 统一错误返回结构,前端稳定处理
|
2025-08-27 23:33:53 +08:00 |
|
x1ao4
|
3ccaeeae15
|
优化资源搜索结果的去重逻辑,改为去重时保留最新记录
- PanSou:按 shareurl 归并,保留 publish_date 最新记录
- CloudSaver:按 shareurl 归并,保留 datetime 最新记录
- 聚合层(/task_suggestions):
- 首轮:按 shareurl 归并取最新;仅在无链接时用指纹兜底
- 二次:按“标准化标题+时间戳”归并(兼容多种时间格式)
- 同秒平手:优先 CloudSaver,其次内容更丰富
- 最终仍按 publish_date 倒序展示
|
2025-08-27 22:23:01 +08:00 |
|
x1ao4
|
8304d8e8fd
|
新增推送通知类型选择功能
- 新增推送通知类型配置选项
- 支持三种模式:
- 完整信息(转存成功、转存失败、资源失效)
- 仅成功信息(仅转存成功)
- 排除失效信息(转存成功、转存失败)
- 优化通知过滤逻辑,提升用户体验
|
2025-08-27 02:32:42 +08:00 |
|
x1ao4
|
5c50453acd
|
修复资源搜索结果发布日期时区(显示)错误的问题
|
2025-08-27 01:05:19 +08:00 |
|
x1ao4
|
101abb0247
|
优化资源搜索结果的去重逻辑
|
2025-08-26 17:20:34 +08:00 |
|
x1ao4
|
7bf5e7423a
|
为资源搜索功能新增了 PanSou 服务器支持,优化了搜索结果的展示与排序方式,调整了系统配置页面的模块顺序
|
2025-08-26 01:57:34 +08:00 |
|
x1ao4
|
a27c76637b
|
新增插件配置模式设置功能,支持全局配置
- 插件配置支持独立配置或全局配置,默认为独立配置
- 独立配置模式下每个任务可单独设置插件参数,互不影响
- 全局配置模式下所有任务共用同一套插件参数,只能在系统配置页面修改,并会覆盖已有任务的配置,新建任务也会自动继承相应配置
- 支持 aria2、alist_strm_gen、emby 插件
|
2025-08-25 17:01:25 +08:00 |
|
x1ao4
|
9e32ef7997
|
新增高级过滤功能
支持使用保留词和过滤词实现更为复杂的过滤逻辑
|
2025-08-24 00:02:51 +08:00 |
|
x1ao4
|
5a4afbe737
|
修复空文件夹数据的异常显示问题
- 修复空文件夹显示 "undefined 项" 而非 "0 项" 的问题
- 修复空文件夹分页显示 "1-0 项" 而非 "0-0 项" 的问题
- 在后端 API 中添加 include_items 字段的数据验证和处理
|
2025-08-06 12:37:20 +08:00 |
|
Cp0204
|
c83f20b414
|
解决和原版 Cookie 冲突,避免双持用户相互挤掉登录
|
2025-07-14 13:22:25 +08:00 |
|
x1ao4
|
2896b801d6
|
将 douban_service.py 移动到 sdk 目录
- 将 app/douban_service.py 移动到 app/sdk/douban_service.py
- 更新 app/run.py 中的导入路径为 sdk.douban_service
- 优化代码组织结构,统一 SDK 模块管理
|
2025-07-14 00:12:25 +08:00 |
|
x1ao4
|
2fbfd393c1
|
新增影视发现功能
|
2025-07-13 23:03:40 +08:00 |
|
x1ao4
|
76af4db149
|
优化获取最近更新日期的任务范围
|
2025-07-06 19:56:09 +08:00 |
|
x1ao4
|
bc31e6aee8
|
优化最近转存文件和最近更新日期的显示逻辑和顺序,避免重复显示剧名或季数
|
2025-07-05 19:47:38 +08:00 |
|