增加顺序命名与剧集命名模式#75
Open
x1ao4 wants to merge 462 commits into
Open
Conversation
Owner
|
收到,感谢你对这个项目的喜欢和热情! 自 #63 以来,有关注到你的分支。 对我个人来说,不存在不喜欢大家对这个项目的修改,既然开源了,是欢迎大家 fork 各显神通的,能回馈到主分支更好。 但是同时我也要权衡这些修改对项目整体的影响(结合得是不是巧妙优雅、代码量和功能性价比、好不好维护、是不是大多数用户需要,特别是我需要😜),而不是全盘接受,就变成了今天A糊一点,明天B糊一点(没有针对谁),最后我自己都不认识这套代码。 顺序命名是综艺党大喜!我有考虑过,也有类似需求,只是没那么强。目前看代码确实是比较乱的,没法合并和 pick up ,如果你不介意的话,未来可能会直接复制你的代码片段。当然,具体去做还是要看我需求(动力)和精力。 |
Author
理解,没问题的,如果有你需要的代码,可以随便取用。 |
- 新增推送通知类型配置选项 - 支持三种模式: - 完整信息(转存成功、转存失败、资源失效) - 仅成功信息(仅转存成功) - 排除失效信息(转存成功、转存失败) - 优化通知过滤逻辑,提升用户体验
- PanSou:按 shareurl 归并,保留 publish_date 最新记录
- CloudSaver:按 shareurl 归并,保留 datetime 最新记录
- 聚合层(/task_suggestions):
- 首轮:按 shareurl 归并取最新;仅在无链接时用指纹兜底
- 二次:按“标准化标题+时间戳”归并(兼容多种时间格式)
- 同秒平手:优先 CloudSaver,其次内容更丰富
- 最终仍按 publish_date 倒序展示
- 前端:引入搜索 “会话号 + validating” 双重校验,超时立即取消当前会话,并在批处理/渲染前校验,阻断超时后的继续写入;保留稳定 v-for key 确保渲染一致性 - 后端:`get_detail` 增强容错,避免无 `code`/网络异常引发 KeyError;`/get_share_detail` 统一错误返回结构,前端稳定处理
新增高级过滤、插件配置模式设置、推送通知类型选择功能和 PanSou 资源搜索支持及其他修复和优化
- 新增:在 `getSavepathDetail` 失败时自动无感重试一次 - 仅在 `#fileSelectModal` 仍显示时触发重试,避免误重试 - 为请求参数追加 `_ts` 时间戳,绕过浏览器/代理缓存导致的伪重试 - 新增:在 `getShareDetail` 失败时自动无感重试一次 - 重试前强制清空 `this.fileSelect.stoken`,让后端重新获取有效 `stoken` - 仅在 `#fileSelectModal` 仍显示时触发重试 - 超过最大重试次数后,立即提示“获取文件夹列表失败,请关闭窗口再试一次”,不再继续等待 原因: - 原有“等待1秒再调一次”的重试在令牌失效或缓存命中时无效,用户需手动关窗再点 - 本次改动通过刷新 `stoken` 与规避缓存,实现与“手动关窗再点”接近的效果,且对用户无感
- retry: 在 `getShareDetail` 将 “非法token/Bad Parameter/request error” 纳入可恢复错误 - 模态仍显示时清空 `stoken` 并延迟 600ms 自动重试一次 - 重试失败统一提示 “获取文件夹列表失败,请关闭窗口再试一次”
- keep: 打开/关闭选择需转存的文件夹模态不再自动关闭下拉 - add: 点击模态右上角关闭按钮或模态内部区域不关闭下拉 - change: 仅在 “转存当前文件夹/保存到当前文件夹” 确认时,同时关闭模态与下拉 - fix: 在多处初始化分支补充 “点击发生在 #fileSelectModal 内部时不关闭下拉” 的判断 - chore: 在 `selectCurrentFolder()` 中显式关闭下拉,避免确认后下拉残留
优化文件夹/分享详情加载的重试机制,调整资源搜索下拉与文件夹选择模态交互,优化关闭时机
- 在前端 formatPublishDate 函数中添加时区修复逻辑 - 智能识别 UTC 时间(包含 T 或 Z)并自动 +8 小时转换为北京时间 - 保持标准北京时间格式不变 - 解决发布时间显示提早 8 小时的问题
- 为插件配置添加详细的占位符文本和悬停帮助信息 - 为 Cookie 配置部分添加智能状态悬停提示
1. 修正后端get_user_info接口 - 为成功获取账号信息的情况添加has_mparam字段 - 确保前端能正确判断账号是否包含移动端参数 2. 修正前端Cookie状态判断逻辑 - 根据账号索引位置判断功能支持情况 - 第一个账号(index=0)支持转存和签到 - 其他账号只支持签到功能 - 修正了第一个账号被错误识别为'仅支持转存'的问题 3. 完善状态提示信息 - 账号已登录,支持转存和签到 (第一个账号,有移动端参数) - 账号已登录,仅支持转存功能 (第一个账号,无移动端参数) - 账号已登录,仅支持签到功能 (其他账号,有移动端参数) - 账号已登录,不支持转存和签到 (其他账号,无移动端参数) - 账号已失效,请重新获取Cookie - 仅支持签到功能 (无昵称,有移动端参数) - 账号未登录,请获取Cookie (无昵称,无移动端参数)
- 简化时间处理规则:只有 TG 来源需要 +8 小时 - 其他所有来源(Unknown、Plugin 等)都不 +8 小时 - 修正前端 formatPublishDate 函数的判断逻辑 - 确保时间显示准确,避免错误的时间转换
修复资源搜索结果发布时间时区显示错误的问题,为系统配置页面的插件配置和 Cookie 增加占位提示与悬停信息
- 修改前端 parsePublishTs 函数,在排序时也考虑 +8 小时时区转换 - 确保 TG 来源的搜索结果按北京时间正确排序 - 保持其他来源的排序逻辑不变 - 解决排序使用原始时间而非转换后时间的问题
修复资源搜索结果排序时未进行时区转换的问题
- 添加对 "inner error" 类型错误的识别和处理 - 将 "inner error" 归类为可恢复的网络错误而非资源失效 - 前端多个方法中添加对 "inner error" 的识别和忽略 - 后端添加 is_recoverable_error 工具方法 - 后端 _send_request 方法中自动转换 "inner error" 为 "request error" - 后端 get_detail 方法中添加重试机制处理临时网络问题 - 避免因临时网络问题误判资源状态,提升用户体验
- 后端 sort_file_by_name 补充支持独立(上/中/下)括号标记参与细分排序 - 后端 sort_file_by_name 补充支持括号内罗马数字序号(ⅠⅡⅢ/ I II III),支持大小写与混用 - 同步更新前端 app/static/js/sort_file_by_name.js,确保 “起始文件选择/列表显示/排序” 与后端预览与处理逻辑一致
完善顺序命名细分排序逻辑(上/下与罗马数字)
统一增强 Plex 与 AList 插件的路径处理安全性:Plex 刷新请求改为使用 requests params 进行 URL 编码,避免 #/?/& 等特殊符号导致路径截断;同时两插件的路径归属判断改为目录边界匹配,防止 /media/tv 误匹配 /media/tv2,保持原有刷新流程不变
在签到任务中重构夸克会员识别逻辑,支持 `普通用户/88VIP/SVIP/SVIP+` 完整识别,通过多信号综合判定并按最高等级输出
修复 Plex 与 AList 插件的路径编码与匹配问题,完善签到任务的夸克会员等级识别逻辑
在剧集识别中新增电视节目任务识别规则,支持用户追加关键词扩展电视节目保存路径判定范围,留空时保持内置关键词逻辑
在编辑任务时,优化电视任务的智能填充逻辑:保持原有剧名/季数提取与季数默认补 `S01` 能力,同时补齐倒数第二级目录的年份信息(缺失时自动使用当年),确保最末两级目录可稳定重构。新增路径保护机制,智能填充会避开电视类保存路径模板中的用户前缀目录,以及电视识别关键词命中的上级目录;当保护范围后的层级不足两级时,自动追加目录后再填充,避免覆盖关键前缀并防止任务类型误判回退。
在任务名不含季信息时,电视任务智能填充改为优先使用任务设置中的剧集保存路径与电视命名规则模板(以前缀后部分为准,支持多级目录)。仅当模板包含年份变量时才自动补全年份;未配置自定义模板或仍为默认模板时回退到默认填充逻辑,并保持前缀保护机制不被破坏。
修复在自定义模板和非标准季数格式下,保存路径与命名规则季数无法稳定双向同步的问题。季数提取优先使用模板变量,未命中时使用通用规则兜底,确保任务名称、保存路径、命名规则三方季数保持一致。
- 新增 “编辑任务时自动搜索资源” 配置项,支持启用/禁用 - 为旧配置补充 `auto_search_resources_on_edit` 默认值,保证向后兼容 - 调整任务名称变更触发逻辑:编辑场景(含创建/添加任务时修改任务名)受该开关统一控制
- 调整自动搜索资源配置网格最小宽度,提升窄屏适配性 - 为配置项输入组添加 min-width: 0,避免子项撑破容器 - 在小屏断点下改为单列布局,确保右边距与换行显示正确
新增电视任务识别规则及自动搜索资源开关
通过引入任务聚焦上下文键,修复创建/编辑任务模态框因 index=-1 导致的搜索结果串用问题;现在与列表视图一致:同一任务保留结果,切换任务清空结果。
在系统配置中为三个可多项配置模块增加 “最少保留一项” 机制:仅当项数大于 1 时显示删除按钮,并在删除方法中增加兜底校验,避免误删唯一项导致 WebUI 无法继续新增。
统一资源搜索入口行为,在按钮触发搜索时补充写入 focusContextKey,避免后续输入框聚焦误判为任务切换导致搜索结果被清空。
统一资源搜索结果在列表与模态框的保留/清空逻辑,优化资源搜索结果的显示效果
更新目录(update_subdir) - 正则:匹配到的子文件夹无论本地是否已有同名目录,均在分享侧递归转存,避免只转存文件夹 fid 导致子目录(如「1-8季」)为空。 - 顺序/剧集:子任务用 .* 递归;不再把子文件夹 fid 重复加入顶层 need_save_list;剧集子文件夹不再缺少 save_name 触发 KeyError。 顺序/剧集 + 更新目录时的重命名 - do_rename_task 仅在根路径(subdir_path 为空)执行;子路径直接返回,子树不重命名。do_save 不再对更新目录子路径递归重命名;自动解压子目录在此组合下不再套顺序/剧集规则。 通知与稳定性 - 有 update_subdir 时不以仅根目录 ls 的 new_tree 覆盖合并树;顺序/剧集通知与正则一致走完整目录树。 - 过滤词统计与 query_task 轮询进度仅在 dir_check_and_save 顶层打印;子路径 quiet 轮询。建树 save_name 回退、identifier 先 str 再前缀判断,防异常。 未配置更新目录时,顶层转存与重命名主逻辑不变;子路径仅减少日志,不改变过滤与转存结果。
- 在 `process_season_episode_info` 中,当主文件名为 1~4 位纯数字时,规范为 `Exx` 展示字符串,便于与现有 `E` 集号逻辑一致。 - 在 `TaskExtractor.extract_progress_from_latest_file` 中增加整串纯数字兜底,与后端其它入口(如未经过 `process_season_episode_info` 的原始基名)对齐。 - 在前端 `buildProgressByTaskNameFromLatestFiles` 的 `parseOne` 中增加相同规则,避免与 `season_counts` / 已转存映射不一致。 - 不改变磁盘上的文件名,仅影响展示与「已转存集数」等解析;原有 `SxxExxx`、`Exx`、中文集/期及日期类解析顺序与行为保持不变。
由「已转存集数 / 已播出集数 / 节目总集数:a / b / c」改为「已转存a集 / 已播出b集 / 节目共c集」
修复更新目录功能失效等问题
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
首先感谢作者开源这个项目,这个项目非常好,很方便,之前使用其他同类项目的时候,我就希望能有正则的功能,但由于其他项目的作者没有增加,并且项目是闭源的,也无法自己增加,所以一直无法使用自定义的正则重命名,导致个别任务需要手动干预。
因此发现这个项目的时候挺惊喜的。但是由于个人的需求可能需要处理一些影视内容,正则重命名虽然非常强大,但有时候也会觉得略显繁琐。另外还有一些需求无法通过正则来实现,因此我自己对 v0.5.3.1 这个版本进行了一些修改,增加了几个功能。
代码是靠 AI 完成的,也许会有些乱,因为功能修改可能也和原始版本冲突比较多,不过我就是想交流分享一下思路,作者你看或不看,考虑或不考虑都是没有关系的哈,不强加,因为这个版本我基本上也是打算改成一个自用版本了。
两个主要功能
文件排序和剧集编号提取我都做成了全局函数。如果我的修改能给作者带来一些新思路也好,如果作者不喜欢我的修改,也可以直接忽略我哈。下面有些功能用作者的原版也是可以实现的,只是我觉得这样修改会更方便一些,对小白也更友好一点。先来个汇总,主要的新增功能如下:
过滤规则里设置过滤词来过滤不需要转存的文件或文件夹。{}的表达式(如乘风2025 - S06E{})自动切换为顺序命名模式,该模式将通过文件名与上传时间等信息对文件进行智能排序,然后按顺序对每个文件的{}赋予序号,实现顺序命名。[]的表达式(如黑镜 - S06E[])自动切换为剧集命名模式,该模式将从原始文件名中提取剧集编号,然后把提取的编号代入对应文件名的[]中,实现自动按剧集编号命名。正则命名模式,现在会通过用户输入的匹配表达式自动实时判断和切换对应的模式。集编号识别规则表达式,扩展识别范围。具体的说明和示例如下:
2.3 过滤规则
通过在
过滤规则一栏输入过滤词汇,可以过滤掉文件名(文件夹名、扩展名)中包含过滤词汇的项目,也就是不转存名称包含过滤词的项目。多个过滤词用逗号(,或,)隔开,如纯享,txt,超前企划,在同时需要过滤文件和使用正则重命名时比较方便,用来过滤综艺节目的非正片也比较简单。2.4 顺序命名
当在
保存规则的匹配表达式输入框内输入包含{}的表达式时(如乘风2025 - S06E{}、黑镜.S07E{}、雁回时 - S01E{} - 第{}集等等),将会自动切换为顺序命名模式,该模式将通过文件名与上传时间等信息对文件进行智能排序,然后按顺序对每个文件的{}赋予序号,实现顺序命名。新增文件的序号会在目标目录中已保存文件的最大序号的基础上递增,文件夹为空文件夹(新增文件夹)时会从 1 开始排序,已经保存过的文件不会重复保存(通过文件信息判断,不是通过文件名判断)。该模式会自动过滤/排除分享链接中的文件夹(不转存文件夹和文件夹中的内容)。
通过与
过滤规则搭配使用,该模式可以解决部分综艺节目的命名问题,先通过过滤规则排除非正片,然后对正片进行排序,该模式可以自动识别第1期、第2期、第3期以及第1期上、第1期中、第1期下和日期等文件名的顺序,可将大部分文件按照播出顺序排序,而不是单纯通过文本和上传时间来判断顺序。例如:2.5 剧集命名
当在
保存规则的匹配表达式输入框内输入包含[]的表达式时(如黑镜 - S06E[]、黑镜.S07E[]、雁回时 - S01E[] - 第[]集等等),将会自动切换为剧集命名模式,该模式将从原始文件名中提取剧集编号(若存在可提取的编号),然后把提取的编号代入对应文件名的[]中,实现自动按剧集编号命名。已经保存过的文件不会重复保存(通过文件信息判断,不是通过文件名判断)。该模式会自动过滤/排除分享链接中的文件夹(不转存文件夹和文件夹中的内容)。
该模式主要用于自动提取电视剧集的集编号,有点类似于
$TV这个模式,不需要根据不同的资源名单独编辑表达式,并且只要通过一个剧集命名表达式就可以设置重命名的格式(不需要替换表达式就可以自定义格式)。应该可以识别大部分资源名。例如:你可以在
系统配置的剧集识别部分查看和编辑用于识别剧集编号的正则表达式:集编号识别规则,若你要转存的资源名不受支持,也可以自行增加表达式。多个表达式用|隔开。表达式的顺序代表了识别的优先级,越靠前越优先。每个表达式都需要包含一个(\d+)捕获组,它代表数字编号,表达式只需要包含(\d+)和数字编号前后的字符即可,注意特殊符号需要转义。若修改后出现问题可以改回默认值。默认的集编号识别规则为:
第(\d+)集|第(\d+)期|第(\d+)话|(\d+)集|(\d+)期|(\d+)话|[Ee][Pp]?(\d+)|(\d+)[-_\\s]*4[Kk]|\[(\d+)\]|【(\d+)】|_?(\d+)_?,含义如下:第(\d+)集第05集第(\d+)期第05期第(\d+)话第05话(\d+)集05集(\d+)期05期(\d+)话05话[Ee][Pp]?(\d+)E05、EP05、e05、ep05(\d+)[-_\\s]*4[Kk]05-4K、05_4K、05 4K、05-4k、05_4k、05 4k\[(\d+)\][05]【(\d+)】【05】_?(\d+)_?_05_、_05、05_、05