From 86533d1f29e7dbc621f1b6b4d7f2c063b5edfa46 Mon Sep 17 00:00:00 2001 From: x1ao4 Date: Sat, 9 Aug 2025 00:02:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=B5=E5=BD=B1=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E8=A7=84=E5=88=99=E9=85=8D=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在系统配置中新增电影命名规则设置,包含匹配表达式和替换表达式两个输入框 - 默认匹配表达式:^(.*)\.([^.]+),替换表达式:片名 (年份).\2 - 影视发现页面的电影类榜单(热门电影、最新电影、豆瓣高分、冷门佳片)创建任务时自动应用电影命名规则 - 支持智能填充片名和年份变量,保持文件扩展名 - 向后兼容,老用户更新后自动获得默认配置 --- app/templates/index.html | 62 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/app/templates/index.html b/app/templates/index.html index d2e37bc..2a1231b 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -656,6 +656,16 @@ +
+
+
+ 电影命名规则 +
+ + +
+
+
@@ -2068,6 +2078,8 @@ anime_save_path: "动画目录前缀/剧名 (年份)/剧名 - S季数", variety_save_path: "综艺目录前缀/剧名 (年份)/剧名 - S季数", documentary_save_path: "纪录片目录前缀/剧名 (年份)/剧名 - S季数", + movie_naming_pattern: "^(.*)\.([^.]+)", + movie_naming_replace: "片名 (年份).\\2", tv_naming_rule: "剧名 - S季数E[]", tv_ignore_extension: true }, @@ -3163,11 +3175,20 @@ anime_save_path: "动画目录前缀/剧名 (年份)/剧名 - S季数", variety_save_path: "综艺目录前缀/剧名 (年份)/剧名 - S季数", documentary_save_path: "纪录片目录前缀/剧名 (年份)/剧名 - S季数", + movie_naming_pattern: "^(.*)\.([^.]+)", + movie_naming_replace: "片名 (年份).\\2", tv_naming_rule: "剧名 - S季数E[]", tv_ignore_extension: true, auto_search_resources: "enabled" }; } + // 确保电影命名规则字段存在 + if (!config_data.task_settings.movie_naming_pattern) { + config_data.task_settings.movie_naming_pattern = "^(.*)\.([^.]+)"; + } + if (!config_data.task_settings.movie_naming_replace) { + config_data.task_settings.movie_naming_replace = "片名 (年份).\\2"; + } // 确保电视忽略后缀设置存在 if (config_data.task_settings.tv_ignore_extension === undefined) { config_data.task_settings.tv_ignore_extension = true; @@ -7499,8 +7520,25 @@ if (contentType === 'movie') { this.createTask.taskData.taskname = title; this.createTask.taskData.savepath = this.generateMovieSavePath(savePathTemplate, title, year); - this.createTask.taskData.pattern = ""; - this.createTask.taskData.replace = ""; + + // 应用电影命名规则 + const movieNamingPattern = taskSettings.movie_naming_pattern && taskSettings.movie_naming_pattern.trim() !== "" + ? taskSettings.movie_naming_pattern + : ""; + const movieNamingReplace = taskSettings.movie_naming_replace && taskSettings.movie_naming_replace.trim() !== "" + ? taskSettings.movie_naming_replace + : ""; + + if (movieNamingPattern && movieNamingReplace) { + // 生成智能填充的替换表达式 + const generatedReplace = this.generateMovieNamingRule(movieNamingReplace, title, year); + this.createTask.taskData.pattern = movieNamingPattern; + this.createTask.taskData.replace = generatedReplace; + } else { + this.createTask.taskData.pattern = ""; + this.createTask.taskData.replace = ""; + } + this.createTask.taskData.use_sequence_naming = false; this.createTask.taskData.use_episode_naming = false; this.createTask.taskData.sequence_naming = ""; @@ -7698,6 +7736,26 @@ return namingRule; }, + generateMovieNamingRule(replaceTemplate, movieTitle, year) { + // 生成电影命名规则 + let namingRule = replaceTemplate; + + // 替换片名 + namingRule = namingRule.replace(/片名/g, movieTitle); + + // 替换年份 + if (year) { + namingRule = namingRule.replace(/年份/g, year); + } else { + // 如果没有年份,移除包含年份的部分 + namingRule = namingRule.replace(/\s*\(年份\)/g, ''); + namingRule = namingRule.replace(/\s*(年份)/g, ''); + } + + // 注意:正则表达式的反向引用(如\2)保持不变,将在实际重命名时由正则引擎处理 + + return namingRule; + }, generateCustomFolderPath(taskData) { // 根据任务设置生成自定义文件夹路径 const taskSettings = this.formData.task_settings || {};