Commit Graph

674 Commits

Author SHA1 Message Date
x1ao4
96aa822673
Merge pull request #76 from x1ao4/dev
重写 README 文档
2026-01-03 15:46:50 +08:00
x1ao4
c1ef5fdda6 重写 README 文档 2026-01-03 15:39:43 +08:00
x1ao4
0cc4230916
Merge pull request #75 from x1ao4/dev
修复当 TMDB 上集的 air_date 被删除时 air_date_local 未同步清空的问题
2025-12-25 16:38:07 +08:00
x1ao4
7abb33f7ce 规范文件格式 2025-12-25 16:14:06 +08:00
x1ao4
d550de4e9f 修复当 TMDB 上集的 air_date 被删除时 air_date_local 未同步清空的问题
问题描述:
- 当 TMDB 上某一集的播出日期被删除后,本地数据库的 air_date 会在刷新时被清空
- 但对应的 air_date_local 没有被清空,导致已播出集数计算不准确

修复内容:
- 修改 update_episodes_air_date_local 函数,在所有三个分支中添加对 air_date 为空的处理
- 当 air_date 为空时,自动清空对应的 air_date_local
- 确保 air_date_local 始终与 air_date 保持一致

影响范围:
- 修复后,当 TMDB 上集的播出日期被删除时,air_date_local 会被正确清空
- is_episode_aired 函数会正确返回 False,已播出集数计算会及时更新
2025-12-25 10:55:37 +08:00
x1ao4
ce8659bb01
Merge pull request #74 from x1ao4/dev
新增运行日志、播出时间相关功能及其他优化
2025-12-24 23:02:17 +08:00
x1ao4
297282f24b 新增执行周期、运行日志和播出时间的功能说明 2025-12-24 22:28:29 +08:00
x1ao4
91de6e2ae3
新增执行周期、运行日志和播出时间的功能说明 2025-12-24 22:25:58 +08:00
x1ao4
f0b5a98cf8 为模态框统一添加取消按钮
- 为 "选择需转存的文件夹"、"选择保存到的文件夹"、"选择起始文件" 模态框添加取消按钮
- 为 "剧集/顺序/正则命名预览" 模态框(创建/编辑任务模式)添加 footer 和取消按钮
- 统一所有取消按钮样式和格式,与编辑任务模态框保持一致
- 确保取消按钮始终位于右下角第一个位置(在 "上一个/下一个" 按钮之前)
- 添加通用CSS样式,确保样式一致性
2025-12-23 17:33:29 +08:00
x1ao4
f7814dd0a3 优化模态框表格展开功能,实现与转存记录页面一致的行级展开行为
- 修改 toggleModalExpand 函数,点击展开按钮时展开同一行的所有超长字段
- 点击收起按钮时收起同一行的所有字段
- 统一展开按钮图标显示逻辑,该行有字段展开时所有按钮显示向上箭头
- 添加事件参数处理,确保代码安全性和一致性
2025-12-23 16:23:42 +08:00
x1ao4
4771f2545d 修复追剧日历月份显示 BUG 并支持跨月自动切换
- 修复 12 月后显示 13/1 的 bug:从日期字符串中正确解析月份,替代错误的月份计算方式
- 点击跨月日期时自动切换月份视图:检测点击日期是否在当前月份,如不在则自动切换到对应月份
- 新增 getDateMonthFromString 方法:从 YYYY-MM-DD 格式日期字符串中提取月份
- 优化 selectCalendarDate 方法:增加跨月检测和自动切换逻辑,提升用户体验
2025-12-23 16:05:53 +08:00
x1ao4
b682017499 在追剧日历页面增加计数模块和日期悬停信息
- 在追剧日历页面右上角排序组件后方增加计数模块,样式与任务列表一致
- 海报/日历视图:显示选中日期当天的节目数和集数(合并集按实际分集数计算)
- 内容管理模式:显示匹配和未匹配任务总数,悬停显示详细匹配情况
- 日历视图日期号数和海报视图日期导航增加悬停信息,显示对应日期的计数信息
2025-12-23 15:54:51 +08:00
x1ao4
b3e525bb9b 统一不可操作元素的鼠标指针样式
将背景色为 --button-gray-background-color 但不可操作的标题和内容元素的鼠标指针从文本指针改为普通指针,提升用户体验和界面一致性。

修改内容:
- CSS样式调整:
  * 任务数量指示器、表头、输入组文本等不可操作元素使用 cursor: default
  * 系统配置页面模块大标题、模态框标题使用普通指针
  * 海报卡片下方的类型/集数信息使用普通指针
  * 保持可点击元素(按钮、链接、图标)的指针样式不变

- HTML模板调整:
  * 为"账号设置"、"Cookie"、"定时规则"三个大标题添加 title 属性
  * 使其与问号图标的悬停提示信息保持一致

影响范围:
- 任务列表页面、影视发现页面、追剧日历页面
- 系统配置页面、所有模态框
- 表格表头、输入组前缀文本等

安全性:
- 仅修改视觉样式,不影响功能逻辑
- 向后兼容,无破坏性变更
2025-12-23 02:14:35 +08:00
x1ao4
05002019fb 修复排序组件悬停指针样式
- 将任务列表和追剧日历页面的排序下拉框(未下拉状态)的悬停指针从手型改为普通指针
- 保持与下拉菜单交互的一致性
2025-12-23 01:31:08 +08:00
x1ao4
3d3e5fb233 为桌面端追剧日历视图增加选中日期功能
- 桌面端日历视图选中日期的号数高亮显示(使用 focus-border-color)
- 默认进入日历视图时当天日期自动选中并高亮
- 支持点击日历单元格选中日期,再次点击已选中日期可取消选择并恢复为当天
- 在日历视图日期切换组件中增加前后一天按钮(与海报视图一致)
- 支持通过前后一天按钮切换选中日期,跨月时自动切换月份视图
- 移动端选中日期功能保持不变(背景色高亮)
2025-12-23 01:13:58 +08:00
x1ao4
0972a60d91 优化追剧日历海报视图的日期导航交互
主要改进:
1. 日期导航项支持点击选择,选中状态使用 var(--focus-border-color) 高亮显示
2. 悬停样式与分类按钮(全部/剧集/动画/综艺)保持一致
3. 日期偏移逻辑优化:以选中的日期为基准进行前后一天/周偏移
4. 智能视图调整:新日期在视图范围内时只更新选中状态,超出范围时自动调整视图

详细修改:

HTML (app/templates/index.html):
- 日期导航项添加 @click 事件和 :class 选中状态绑定
- 新增 selectPosterDate 函数处理海报视图日期选择

CSS (app/static/css/main.css):
- 日期项添加 cursor: pointer 和过渡动画
- 添加悬停样式(:hover:not(.selected))与分类按钮一致
- 添加选中样式(.selected)使用 focus-border-color 高亮
- 移除原有的 .today 固定高亮样式

JavaScript (app/templates/index.html):
- 新增 selectPosterDate 函数:处理海报视图日期点击选择
- 优化 changeCalendarDate 函数:
  * 海报视图模式下以 selectedDate 为基准计算偏移
  * 检查新日期是否在视图范围内,智能决定是否调整视图
  * 添加完善的错误处理和日期验证
- 优化 goToToday 函数:同步更新 selectedDate 为今天

安全性:
- 所有日期解析操作都有 try-catch 保护
- 日期格式验证和有效性检查
- 解析失败时回退到安全的默认行为

兼容性:
- 日历视图模式保持原有逻辑不变
- 不影响其他功能模块
- 桌面端和移动端均正常工作
2025-12-23 00:35:24 +08:00
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
664b818f03
Merge pull request #73 from x1ao4/dev
新增任务数量指示器和任务状态筛选功能
2025-11-25 15:52:34 +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