mirror of
https://github.com/Cp0204/quark-auto-save.git
synced 2026-01-16 09:20:43 +08:00
合并命名模式的设置框,并实现自动切换
This commit is contained in:
parent
243ddff74d
commit
6f969f9416
@ -257,24 +257,18 @@
|
|||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-2 col-form-label">命名方式</label>
|
<label class="col-sm-2 col-form-label">命名方式</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<div class="input-group mb-3">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<button type="button" class="btn" :class="!task.use_sequence_naming ? 'btn-primary' : 'input-group-text'" @click="toggleNamingMode(task, false)">正则命名</button>
|
<span class="input-group-text">{{ task.use_sequence_naming ? '顺序命名' : '正则命名' }}</span>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式" list="magicRegex" :disabled="task.use_sequence_naming">
|
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式 (E{} 或 S01E{} 表示顺序命名模式)" list="magicRegex" @input="detectNamingMode(task)">
|
||||||
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式" :disabled="task.use_sequence_naming">
|
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式 (正则模式时有效)" @input="detectNamingMode(task)">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<input type="checkbox" title="忽略后缀" v-model="task.ignore_extension"> 忽略后缀
|
<input type="checkbox" title="忽略后缀" v-model="task.ignore_extension"> 忽略后缀
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group">
|
|
||||||
<div class="input-group-prepend">
|
|
||||||
<button type="button" class="btn" :class="task.use_sequence_naming ? 'btn-primary' : 'input-group-text'" @click="toggleNamingMode(task, true)">顺序命名</button>
|
|
||||||
</div>
|
|
||||||
<input type="text" class="form-control" v-model="task.sequence_naming" :placeholder='`例如: 雁回时 - S01E{},{}将被替换为序号,支持识别第X期/集/话、SXXEXX、纯数字序号、日期等格式排序`' :disabled="!task.use_sequence_naming">
|
|
||||||
</div>
|
|
||||||
<datalist id="magicRegex">
|
<datalist id="magicRegex">
|
||||||
<option v-for="(value, key) in formData.magic_regex" :key="key" :value="`${key}`" v-html="`${value.pattern.replace('<', '<\u200B')} → ${value.replace}`"></option>
|
<option v-for="(value, key) in formData.magic_regex" :key="key" :value="`${key}`" v-html="`${value.pattern.replace('<', '<\u200B')} → ${value.replace}`"></option>
|
||||||
</datalist>
|
</datalist>
|
||||||
@ -475,19 +469,6 @@
|
|||||||
return size + unitArr[index];
|
return size + unitArr[index];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
|
||||||
'task.use_sequence_naming': function(newVal, oldVal) {
|
|
||||||
if (newVal) {
|
|
||||||
if (!this.task.sequence_naming) {
|
|
||||||
this.task.sequence_naming = this.task.taskname + " - E{}";
|
|
||||||
}
|
|
||||||
this.task.pattern_disabled = true;
|
|
||||||
} else {
|
|
||||||
this.task.sequence_naming = null;
|
|
||||||
this.task.pattern_disabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchData();
|
this.fetchData();
|
||||||
this.checkNewVersion();
|
this.checkNewVersion();
|
||||||
@ -498,6 +479,24 @@
|
|||||||
this.smart_param.showSuggestions = false;
|
this.smart_param.showSuggestions = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 初始化时检查所有任务的命名模式
|
||||||
|
setTimeout(() => {
|
||||||
|
if (this.formData.tasklist && this.formData.tasklist.length > 0) {
|
||||||
|
this.formData.tasklist.forEach(task => {
|
||||||
|
// 检查现有的顺序命名设置
|
||||||
|
if (task.use_sequence_naming && task.sequence_naming) {
|
||||||
|
// 已经设置过顺序命名的,将顺序命名模式转换为匹配表达式
|
||||||
|
if (!task.pattern || task._pattern_backup) {
|
||||||
|
task.pattern = task.sequence_naming;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 检测是否包含顺序命名模式
|
||||||
|
this.detectNamingMode(task);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
changeTab(tab) {
|
changeTab(tab) {
|
||||||
@ -558,6 +557,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
saveConfig() {
|
saveConfig() {
|
||||||
|
// 保存前处理每个任务的命名模式
|
||||||
|
if (this.formData.tasklist && this.formData.tasklist.length > 0) {
|
||||||
|
this.formData.tasklist.forEach(task => {
|
||||||
|
// 如果是顺序命名模式,确保sequence_naming字段已正确设置
|
||||||
|
if (task.use_sequence_naming && task.pattern && task.pattern.includes('E{}')) {
|
||||||
|
task.sequence_naming = task.pattern;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
axios.post('/update', this.formData)
|
axios.post('/update', this.formData)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
alert(response.data);
|
alert(response.data);
|
||||||
@ -598,7 +607,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始化新任务的命名模式相关字段
|
||||||
|
if (newTask.taskname) {
|
||||||
|
// 默认使用正则命名模式
|
||||||
|
newTask.pattern = ".*"; // 默认匹配所有文件
|
||||||
|
newTask.replace = ""; // 默认保持原文件名
|
||||||
|
newTask.use_sequence_naming = false;
|
||||||
|
newTask.sequence_naming = "";
|
||||||
|
}
|
||||||
|
|
||||||
this.formData.tasklist.push(newTask);
|
this.formData.tasklist.push(newTask);
|
||||||
|
|
||||||
// 滚到最下
|
// 滚到最下
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
$('#collapse_' + (this.formData.tasklist.length - 1)).collapse('show').on('shown.bs.collapse', () => {
|
$('#collapse_' + (this.formData.tasklist.length - 1)).collapse('show').on('shown.bs.collapse', () => {
|
||||||
@ -807,29 +827,71 @@
|
|||||||
this.changeShareurl(task);
|
this.changeShareurl(task);
|
||||||
this.smart_param.showSuggestions = false;
|
this.smart_param.showSuggestions = false;
|
||||||
},
|
},
|
||||||
toggleNamingMode(task, use_sequence_naming) {
|
detectNamingMode(task) {
|
||||||
// 设置命名模式
|
// 检测是否为顺序命名模式
|
||||||
task.use_sequence_naming = use_sequence_naming;
|
const sequencePatterns = ['E{}', 'EP{}', 'S\\d+E{}', '第{}集', '第{}话', '第{}期'];
|
||||||
|
let isSequenceNaming = false;
|
||||||
|
|
||||||
if (use_sequence_naming) {
|
// 保存当前值以支持撤销操作
|
||||||
// 启用顺序命名
|
const currentValue = task.pattern;
|
||||||
if (!task.sequence_naming) {
|
|
||||||
task.sequence_naming = task.taskname ? (task.taskname + " - E{}") : "E{}";
|
if (task.pattern) {
|
||||||
}
|
// 检查是否包含任何顺序命名模式
|
||||||
// 禁用正则匹配
|
isSequenceNaming = sequencePatterns.some(pattern => {
|
||||||
task._pattern_backup = task.pattern;
|
const regexPattern = pattern.replace('{}', '\\{\\}');
|
||||||
task._replace_backup = task.replace;
|
return new RegExp(regexPattern).test(task.pattern);
|
||||||
task.pattern = "";
|
});
|
||||||
task.replace = "";
|
|
||||||
} else {
|
// 或者用户直接输入包含{}的格式,且替换表达式为空
|
||||||
// 禁用顺序命名
|
if (!isSequenceNaming && task.pattern.includes('{}') && (!task.replace || task.replace === '')) {
|
||||||
task._sequence_backup = task.sequence_naming;
|
isSequenceNaming = true;
|
||||||
// 恢复正则匹配
|
|
||||||
if (task._pattern_backup) {
|
|
||||||
task.pattern = task._pattern_backup;
|
|
||||||
task.replace = task._replace_backup;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理模式切换
|
||||||
|
if (isSequenceNaming) {
|
||||||
|
// 如果当前不是顺序命名模式,则保存现有的正则表达式
|
||||||
|
if (!task.use_sequence_naming) {
|
||||||
|
task._pattern_backup = task.pattern;
|
||||||
|
task._replace_backup = task.replace;
|
||||||
|
task.use_sequence_naming = true;
|
||||||
|
}
|
||||||
|
// 设置序列命名模式
|
||||||
|
task.sequence_naming = task.pattern;
|
||||||
|
} else {
|
||||||
|
// 如果当前是顺序命名模式,但现在检测不到顺序命名模式
|
||||||
|
if (task.use_sequence_naming) {
|
||||||
|
// 如果用户正在删除内容(当前值为空或比上一次更短)
|
||||||
|
if (!currentValue || (task._lastPatternValue && currentValue.length < task._lastPatternValue.length)) {
|
||||||
|
// 保持当前编辑状态,不切换模式
|
||||||
|
task.sequence_naming = currentValue;
|
||||||
|
// 只有当完全删除后才切换回正则模式
|
||||||
|
if (!currentValue) {
|
||||||
|
task.use_sequence_naming = false;
|
||||||
|
if (task._pattern_backup) {
|
||||||
|
task.pattern = "";
|
||||||
|
task.replace = task._replace_backup || "";
|
||||||
|
}
|
||||||
|
task.sequence_naming = null;
|
||||||
|
}
|
||||||
|
} else if (task._pattern_backup && !task.pattern.includes('{}')) {
|
||||||
|
// 正常切换回正则命名模式(非删除操作)
|
||||||
|
task.use_sequence_naming = false;
|
||||||
|
task.pattern = task._pattern_backup;
|
||||||
|
task.replace = task._replace_backup;
|
||||||
|
task._sequence_backup = task.sequence_naming;
|
||||||
|
task.sequence_naming = null;
|
||||||
|
} else if (!task._pattern_backup && !task.pattern.includes('{}')) {
|
||||||
|
// 没有备份,但需要切换回正则模式
|
||||||
|
task.use_sequence_naming = false;
|
||||||
|
task.sequence_naming = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存当前值,用于下次比较
|
||||||
|
task._lastPatternValue = currentValue;
|
||||||
|
|
||||||
// 强制Vue更新视图
|
// 强制Vue更新视图
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user