新增电影命名规则配置功能

- 在系统配置中新增电影命名规则设置,包含匹配表达式和替换表达式两个输入框
- 默认匹配表达式:^(.*)\.([^.]+),替换表达式:片名 (年份).\2
- 影视发现页面的电影类榜单(热门电影、最新电影、豆瓣高分、冷门佳片)创建任务时自动应用电影命名规则
- 支持智能填充片名和年份变量,保持文件扩展名
- 向后兼容,老用户更新后自动获得默认配置
This commit is contained in:
x1ao4 2025-08-09 00:02:27 +08:00
parent e3428e8eda
commit 86533d1f29

View File

@ -656,6 +656,16 @@
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">电影命名规则</span>
</div>
<input type="text" class="form-control" v-model="formData.task_settings.movie_naming_pattern" placeholder="^(.*)\.([^.]+)" title="设置电影类型内容的默认文件命名规则的匹配表达式,在影视发现页面创建电影任务时自动填充">
<input type="text" class="form-control" v-model="formData.task_settings.movie_naming_replace" placeholder="片名 (年份).\2" title="设置电影类型内容的默认文件命名规则的替换表达式,在影视发现页面创建电影任务时自动填充。支持变量:片名、年份等">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
@ -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 || {};