x1ao4
|
9ac84e22c7
|
使用 CSS 变量统一管理模态框和登录模块的圆角
- 在 :root 中添加 --modal-border-radius 变量,默认值为 12px
- 将所有模态框弹窗和登录模块的圆角值替换为 var(--modal-border-radius)
- 现在可以通过修改一个变量来统一调整所有相关圆角
|
2025-12-22 23:51:40 +08:00 |
|
x1ao4
|
8b2a88897a
|
移除追剧日历内容管理模式海报悬停信息中节目名称的显示行数限制
|
2025-12-22 17:20:53 +08:00 |
|
x1ao4
|
62d2b6e739
|
为海报卡片悬停信息添加行数限制
为多个页面的海报卡片悬停信息添加显示行数限制,超长内容显示省略号,提升界面整洁度和可读性。
修改内容:
1. 任务列表页面海报视图的任务海报卡片悬停信息:
- 第二行(匹配到的节目名称):限制为1行
- 第三行(季标题):限制为1行
2. 追剧日历页面海报视图的集海报卡片悬停信息:
- 第一行(集标题):限制为2行
3. 追剧日历页面内容管理模式的节目海报卡片悬停信息:
- 第一行(匹配到的节目名称):限制为2行
- 第三行(季标题):限制为1行
4. 影视发现页面的海报卡片悬停信息:
- 制片国家/地区:限制为1行
- 类型:限制为2行
- 导演:限制为1行(移除之前的数量限制,改为行数限制)
- 主演:限制为2行
技术实现:
HTML修改:
- 为指定元素添加 info-line-single 或 info-line-double CSS类
- 任务列表、追剧日历页面:直接在HTML元素上添加类名
- 影视发现页面:通过动态类绑定,根据信息类型应用相应样式
CSS修改:
- 新增 .info-line-single 样式:单行限制,使用 white-space: nowrap 和 text-overflow: ellipsis
- 新增 .info-line-double 样式:双行限制,使用 -webkit-line-clamp: 2 实现多行截断
- 样式作用域限定在 .discovery-poster-overlay 和 .calendar-poster-overlay 内
JavaScript修改:
- 修改 getMovieDetails 函数:返回对象数组而非字符串数组
- 每个对象包含 text(文本内容)和 type(信息类型)字段
- 通过 detail.type 判断信息类型,确保即使某些信息缺失也能正确识别
影响范围:
- 仅影响指定位置的海报悬停信息显示
- 不影响其他功能和其他页面的海报悬停信息
- 正确处理边界情况(信息缺失、格式不完整等)
|
2025-12-21 23:53:52 +08:00 |
|
x1ao4
|
c999913e9e
|
优化播出状态刷新任务日志,添加集号显示
问题描述:
当同一天有多集播出时,播出状态刷新任务的日志会重复显示相同的节目名和季号,
用户无法区分是哪一集触发的刷新任务。
修改内容:
1. 修改 recompute_show_aired_progress 函数:
- 添加可选的 season_number 和 episode_number 参数
- 当提供 episode_number 时,日志中显示集号信息
- 当提供 season_number 时,只处理指定的季
2. 修改 schedule_airtime_based_refresh_jobs 函数:
- 在按播出时间安排任务时,传递 season_number 和 episode_number 参数
- 确保自动运行的任务日志包含集号信息
效果:
- 之前:日志显示 "[节目名 · 第 X 季] 播出状态刷新任务"
- 现在:日志显示 "[节目名 · 第 X 季 · 第 Y 集] 播出状态刷新任务"
兼容性:
- 所有现有调用点保持兼容(新参数为可选参数)
- 补偿刷新、手动刷新等场景不受影响(这些场景应刷新整个节目)
安全性:
- 使用参数化查询,防止 SQL 注入
- 保持原有异常处理逻辑
- Lambda 函数使用默认参数避免闭包问题
|
2025-12-21 23:02:39 +08:00 |
|
x1ao4
|
e6634a361e
|
修复服务器休眠唤醒后 SSE 无法自动重连导致已播出状态不更新的问题
问题描述:
- 服务器休眠后唤醒时,SSE 连接断开
- 原代码在 onerror 中立即调用 close(),阻止了 EventSource 的自动重连
- 导致无法接收到唤醒后的补偿运行通知(daily_aired_update)
- 已播出状态需要手动刷新页面才能更新,而已转存状态可以实时更新
解决方案:
1. 修改 onerror 处理逻辑:移除 close() 调用,让 EventSource 自动重连
2. 页面可见性变化时:从隐藏变为可见时主动尝试重连 SSE
3. 切换到追剧日历页面时:如果 SSE 断开,主动尝试重连
技术细节:
- 不在 onerror 中调用 close(),利用 EventSource 的内置自动重连机制
- 保留轮询作为兜底,确保 SSE 断开时功能仍然可用
- 重连成功后,onopen 会触发,自动停止轮询
影响范围:
- 仅影响 SSE 连接的重连机制
- 不影响其他功能(轮询、监听器、任务列表等)
- 已播出状态现在可以像已转存状态一样实时更新
|
2025-12-21 18:12:16 +08:00 |
|
x1ao4
|
3adcc2cc50
|
修复文件命名中没有季编号的节目无法显示待播集日期的问题
在追剧日历的内容管理模式下,部分综艺节目(如 “你好,星期六”)由于文件名仅包含日期而不包含季号(Sxx),导致前端无法解析出 season_number。 此前后端未将数据库匹配到的 latest_season_number 返回给前端,导致前端在计算下一集播出时间时因缺少季号而失败。
本次修改在 enrich_tasks_with_calendar_meta 中明确注入了 latest_season_number 字段,确保前端在文件名解析失败时能正确回退使用数据库记录的最新季号。
|
2025-12-21 01:48:01 +08:00 |
|
x1ao4
|
d1ae3a26dd
|
在追剧日历页面增加了排序功能并优化了内容管理页面的卡片悬停信息
新增功能
- 在追剧日历页面右上角添加排序控制组件(样式与任务列表页面一致)
- 支持两种排序方式:节目名称、播出时间
- 支持升降序切换,默认按节目名称升序排列
- 排序选项支持持久化到 localStorage
排序逻辑实现
- 日历视图:集卡片支持按节目名称和播出时间排序
- 海报视图:集卡片支持按节目名称和播出时间排序
- 内容管理模式:节目卡片支持按节目名称和播出时间排序
- 播出时间排序逻辑与任务列表一致(除日期提取方式)
- 优先按下一个待播集的播出日期排序,其次按播出时间排序
- 无播出日期但有播出时间的任务按播出时间排序
- 既无日期也无时间的任务回退到名称排序
UI 优化
- 调整内容管理页面海报悬停信息顺序:
- 下一个待播集的播出日期和时间显示为倒数第二行
- 已转存/已播出/总集数显示为最后一行
技术实现
- 添加排序状态管理:calendar.sortBy 和 calendar.sortOrder
- 实现获取下一个待播集播出日期的函数:getTaskNextAirDateForSort
- 实现悬停信息显示函数:getTaskNextAirDateTimeDisplayForCalendar
- 添加排序选项变化监听器,确保视图实时更新
|
2025-12-20 01:08:23 +08:00 |
|
x1ao4
|
645ef231bc
|
在任务列表页面新增按播出时间排序功能
- 新增任务列表排序字段 airtime,支持升降序
- 基于 “已转存集数下一集” 的播出日期和本地播出时间作为排序键
- 优先按日期排序,其次按时间,无播出日期的任务统一排在末尾,完全无日期和时间时回退到任务名称排序
- 列表视图和海报视图共用同一排序逻辑,保持显示一致性
|
2025-12-18 16:00:16 +08:00 |
|
x1ao4
|
12346fe5ec
|
在追剧日历的集数悬停信息中增加节目级播出时间信息
|
2025-12-17 18:24:57 +08:00 |
|
x1ao4
|
d19f8f3383
|
增加已播出但未转存集的显示样式
功能改进:
- 日历视图:为已播出但未转存的集增加浅绿色背景(#e6f7ee)
- 已转存:浅蓝色背景(#e6f1ff)
- 已播出未转存:浅绿色背景(#e6f7ee)
- 未播出未转存:浅灰色背景(#f7f7f9)
- 移动端表格:已播出未转存集显示绿色条(#28a745)
- 海报视图:
- 已转存集:右上角显示 bi-check2-all 图标
- 已播出未转存集:右上角显示 bi-check2 图标
- 未播出未转存集:不显示标识
技术实现:
- 后端:在 /api/calendar/episodes_local 接口中为每集添加 is_aired 字段
- 使用 is_episode_aired 函数精确计算(考虑播出时间)
- 实现批量查询优化,将数据库查询从 1000+ 次降到 2-3 次
- 添加完整的异常处理和回退机制
- 前端:新增 isEpisodeAiredForDisplay 方法判断已播出状态
- 优先使用后端返回的 is_aired 字段,保证前后端一致
- 兼容旧版本数据(无 is_aired 时回退到日期比较)
- 在日历视图和海报视图中应用新的样式逻辑
|
2025-12-17 17:48:38 +08:00 |
|
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
|
1dbdef2b0f
|
新增状态筛选功能说明
|
2025-11-25 15:36:25 +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
|
a05ed17596
|
统一推送与控制台空行分隔,优化可读性
|
2025-11-10 18:27:14 +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 |
|