diff --git a/app/templates/index.html b/app/templates/index.html
index 5700e92..31c46bf 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -1596,6 +1596,17 @@
// 检测任务名称中剧名和季序号之间的分隔符
const separatorMatch = cleanTaskName.match(/^(.*?)([\s\.\-_]+)(?:S(\d+)|Season\s*(\d+))/i);
let showName, seasonNumber, nameSeparator = ' - '; // 默认分隔符
+ let isTVShow = false; // 标记是否为电视节目
+
+ // 判断保存路径是否包含电视节目相关的关键词
+ if (task.savepath) {
+ const tvKeywords = ["影视", "电视", "节目", "剧", "动漫", "动画", "番", "综艺", "真人秀", "TV", "Tv", "tv", "Series", "series", "Show", "show"];
+ isTVShow = tvKeywords.some(keyword => task.savepath.includes(keyword));
+ }
+
+ // 当任务名称包含季信息或保存路径有电视剧关键词时,按电视节目处理
+ const hasSeason = separatorMatch && (separatorMatch[3] || separatorMatch[4]);
+ isTVShow = isTVShow || hasSeason;
if (separatorMatch) {
// 提取剧名(去除末尾空格和特殊符号)
@@ -1634,12 +1645,19 @@
const newPathParts = newPath.split('/');
pathParts[pathParts.length - 1] = newPathParts[newPathParts.length - 1];
} else {
- // 直接使用任务名称中提取的信息构建最后一级
- pathParts[pathParts.length - 1] = showName + nameSeparator + 'S' + seasonNumber.padStart(2, '0');
+ // 根据是否为电视节目决定处理方式
+ if (isTVShow) {
+ // 电视节目格式:剧名 + 分隔符 + S季序号
+ pathParts[pathParts.length - 1] = showName + nameSeparator + 'S' + seasonNumber.padStart(2, '0');
+ } else {
+ // 非电视节目直接使用任务名称
+ pathParts[pathParts.length - 1] = cleanTaskName;
+ }
}
// 处理倒数第二级目录(剧名+年份)- 无论是否使用智能路径,都更新
- if (pathParts.length >= 3) {
+ if (pathParts.length >= 3 && isTVShow) {
+ // 只有电视节目才更新倒数第二级目录
const parentDir = pathParts[pathParts.length - 2];
// 提取年份信息
const yearMatch = parentDir.match(/\((\d{4})\)|\((\d{4})\)|[\s\-_]+(\d{4})(?:[\s\-_]+|$)/);
@@ -1656,17 +1674,50 @@
// 更新命名规则 - 始终使用当前任务名称中的信息
if (task.pattern) {
- // 处理剧集命名模式
- if (task.use_episode_naming) {
- // 直接使用任务名称中提取的信息构建命名规则
- task.pattern = showName + nameSeparator + 'S' + seasonNumber.padStart(2, '0') + 'E[]';
- task.episode_naming = task.pattern;
- }
- // 处理顺序命名模式
- else if (task.use_sequence_naming) {
- // 直接使用任务名称中提取的信息构建命名规则
- task.pattern = showName + nameSeparator + 'S' + seasonNumber.padStart(2, '0') + 'E{}';
- task.sequence_naming = task.pattern;
+ // 根据是否为电视节目决定处理方式
+ if (isTVShow) {
+ // 处理剧集命名模式
+ if (task.use_episode_naming) {
+ // 直接使用任务名称中提取的信息构建命名规则
+ task.pattern = showName + nameSeparator + 'S' + seasonNumber.padStart(2, '0') + 'E[]';
+ task.episode_naming = task.pattern;
+ }
+ // 处理顺序命名模式
+ else if (task.use_sequence_naming) {
+ // 直接使用任务名称中提取的信息构建命名规则
+ task.pattern = showName + nameSeparator + 'S' + seasonNumber.padStart(2, '0') + 'E{}';
+ task.sequence_naming = task.pattern;
+ }
+ } else {
+ // 非电视节目,仅在使用剧集或顺序命名时更新
+ if (task.use_episode_naming) {
+ // 如果原模式是纯E[],直接使用任务名称
+ if (task.pattern.trim() === 'E[]') {
+ task.pattern = cleanTaskName + 'E[]';
+ } else if (task.pattern.includes('[]')) {
+ // 尝试保留原有格式,但更新剧名部分
+ const patternParts = task.pattern.split(/E\[\]/i);
+ if (patternParts.length > 0) {
+ task.pattern = cleanTaskName + 'E[]' + (patternParts[1] || '');
+ } else {
+ task.pattern = cleanTaskName + 'E[]';
+ }
+ }
+ task.episode_naming = task.pattern;
+ } else if (task.use_sequence_naming) {
+ // 同样处理顺序命名
+ if (task.pattern.trim() === 'E{}' || task.pattern.trim() === '{}') {
+ task.pattern = cleanTaskName + 'E{}';
+ } else if (task.pattern.includes('{}')) {
+ const patternParts = task.pattern.split(/E\{\}/i);
+ if (patternParts.length > 0) {
+ task.pattern = cleanTaskName + 'E{}' + (patternParts[1] || '');
+ } else {
+ task.pattern = cleanTaskName + 'E{}';
+ }
+ }
+ task.sequence_naming = task.pattern;
+ }
}
}
},