mirror of
https://github.com/Cp0204/quark-auto-save.git
synced 2026-01-17 09:50:42 +08:00
Compare commits
4 Commits
32e4984438
...
81d5d3c1c7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81d5d3c1c7 | ||
|
|
0f6b6839c4 | ||
|
|
e67d95a82b | ||
|
|
78581b15a7 |
29
app/run.py
29
app/run.py
@ -235,15 +235,18 @@ def get_task_suggestions():
|
|||||||
return jsonify({"success": False, "message": "未登录"})
|
return jsonify({"success": False, "message": "未登录"})
|
||||||
query = request.args.get("q", "").lower()
|
query = request.args.get("q", "").lower()
|
||||||
deep = request.args.get("d", "").lower()
|
deep = request.args.get("d", "").lower()
|
||||||
|
net_data = config_data.get("source", {}).get("net", {})
|
||||||
cs_data = config_data.get("source", {}).get("cloudsaver", {})
|
cs_data = config_data.get("source", {}).get("cloudsaver", {})
|
||||||
ps_data = config_data.get("source", {}).get("pansou", {})
|
ps_data = config_data.get("source", {}).get("pansou", {})
|
||||||
|
|
||||||
def net_search():
|
def net_search():
|
||||||
base_url = base64.b64decode("aHR0cHM6Ly9zLjkxNzc4OC54eXo=").decode()
|
if str(net_data.get("enable", "true")).lower() != "false":
|
||||||
url = f"{base_url}/task_suggestions?q={query}&d={deep}"
|
base_url = base64.b64decode("aHR0cHM6Ly9zLjkxNzc4OC54eXo=").decode()
|
||||||
response = requests.get(url)
|
url = f"{base_url}/task_suggestions?q={query}&d={deep}"
|
||||||
return response.json()
|
response = requests.get(url)
|
||||||
|
return response.json()
|
||||||
|
return []
|
||||||
|
|
||||||
def cs_search():
|
def cs_search():
|
||||||
if (
|
if (
|
||||||
cs_data.get("server")
|
cs_data.get("server")
|
||||||
@ -264,13 +267,13 @@ def get_task_suggestions():
|
|||||||
search_results = cs.clean_search_results(search.get("data"))
|
search_results = cs.clean_search_results(search.get("data"))
|
||||||
return search_results
|
return search_results
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def ps_search():
|
def ps_search():
|
||||||
if (ps_data.get("server")):
|
if ps_data.get("server"):
|
||||||
ps = PanSou(ps_data.get("server"))
|
ps = PanSou(ps_data.get("server"))
|
||||||
return ps.search(query)
|
return ps.search(query, deep == "1")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
search_results = []
|
search_results = []
|
||||||
with ThreadPoolExecutor(max_workers=3) as executor:
|
with ThreadPoolExecutor(max_workers=3) as executor:
|
||||||
@ -281,17 +284,17 @@ def get_task_suggestions():
|
|||||||
for future in as_completed(features):
|
for future in as_completed(features):
|
||||||
result = future.result()
|
result = future.result()
|
||||||
search_results.extend(result)
|
search_results.extend(result)
|
||||||
|
|
||||||
# 按时间排序并去重
|
# 按时间排序并去重
|
||||||
results = []
|
results = []
|
||||||
link_array = []
|
link_array = []
|
||||||
search_results.sort(key=lambda x: x.get("datetime", ""), reverse=True)
|
search_results.sort(key=lambda x: x.get("datetime", ""), reverse=True)
|
||||||
for item in search_results:
|
for item in search_results:
|
||||||
url = item.get("shareurl", "")
|
url = item.get("shareurl", "")
|
||||||
if url != "" and url not in link_array:
|
if url != "" and url not in link_array:
|
||||||
link_array.append(url)
|
link_array.append(url)
|
||||||
results.append(item)
|
results.append(item)
|
||||||
|
|
||||||
return jsonify({"success": True, "data": results})
|
return jsonify({"success": True, "data": results})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({"success": True, "message": f"error: {str(e)}"})
|
return jsonify({"success": True, "message": f"error: {str(e)}"})
|
||||||
|
|||||||
@ -11,5 +11,6 @@ def iso_to_cst(iso_time_str: str) -> str:
|
|||||||
str: CST(China Standard Time) 时间字符串
|
str: CST(China Standard Time) 时间字符串
|
||||||
"""
|
"""
|
||||||
dt = datetime.fromisoformat(iso_time_str)
|
dt = datetime.fromisoformat(iso_time_str)
|
||||||
dt_cst = dt.astimezone(timezone(timedelta(hours=8)))
|
tz = timezone(timedelta(hours=8))
|
||||||
|
dt_cst = dt if dt.astimezone(tz) > datetime.now(tz) else dt.astimezone(tz)
|
||||||
return dt_cst.strftime("%Y-%m-%d %H:%M:%S") if dt_cst.year >= 1970 else ""
|
return dt_cst.strftime("%Y-%m-%d %H:%M:%S") if dt_cst.year >= 1970 else ""
|
||||||
|
|||||||
@ -14,7 +14,7 @@ class PanSou:
|
|||||||
self.server = server
|
self.server = server
|
||||||
self.session = requests.Session()
|
self.session = requests.Session()
|
||||||
|
|
||||||
def search(self, keyword: str) -> list:
|
def search(self, keyword: str, refresh: bool = False) -> list:
|
||||||
"""搜索资源
|
"""搜索资源
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -25,7 +25,7 @@ class PanSou:
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
url = f"{self.server.rstrip('/')}/api/search"
|
url = f"{self.server.rstrip('/')}/api/search"
|
||||||
params = {"kw": keyword, "cloud_types": ["quark"], "res": "merge", "refresh": True}
|
params = {"kw": keyword, "cloud_types": ["quark"], "res": "merge", "refresh": refresh}
|
||||||
response = self.session.get(url, params=params)
|
response = self.session.get(url, params=params)
|
||||||
result = response.json()
|
result = response.json()
|
||||||
if result.get("code") == 0:
|
if result.get("code") == 0:
|
||||||
|
|||||||
@ -198,43 +198,70 @@
|
|||||||
|
|
||||||
<div class="row title" title="资源搜索服务配置,用于任务名称智能搜索">
|
<div class="row title" title="资源搜索服务配置,用于任务名称智能搜索">
|
||||||
<div class="col-10">
|
<div class="col-10">
|
||||||
<h2 style="display: inline-block;"><i class="bi bi-search"></i> CloudSaver</h2>
|
<h2 style="display: inline-block;"><i class="bi bi-search"></i> 资源搜索</h2>
|
||||||
<span class="badge badge-pill badge-light">
|
|
||||||
<a href="https://github.com/Cp0204/quark-auto-save/wiki/CloudSaver搜索源" target="_blank">?</a>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row mb-0" style="display:flex; align-items:center;">
|
||||||
<label class="col-sm-2 col-form-label">服务器</label>
|
<div data-toggle="collapse" data-target="#collapse_net" aria-expanded="true" aria-controls="collapse_net">
|
||||||
<div class="col-sm-10">
|
<div class="btn btn-block text-left">
|
||||||
<input type="text" v-model="formData.source.cloudsaver.server" class="form-control" placeholder="资源搜索服务器地址,如 http://172.17.0.1:8008">
|
<i class="bi bi-caret-right-fill"></i> 网络公开搜索
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="collapse show ml-3" id="collapse_net">
|
||||||
<label class="col-sm-2 col-form-label">用户名</label>
|
<div class="form-group row">
|
||||||
<div class="col-sm-10">
|
<label class="col-sm-2 col-form-label">启用</label>
|
||||||
<input type="text" v-model="formData.source.cloudsaver.username" class="form-control" placeholder="用户名">
|
<div class="col-sm-10 d-flex align-items-center">
|
||||||
|
<input type="checkbox" class="form-check-input" v-model="formData.source.net.enable" placeholder="是否启用网络公开搜索,默认启用">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row mb-0" style="display:flex; align-items:center;">
|
||||||
<label class="col-sm-2 col-form-label">密码</label>
|
<div data-toggle="collapse" data-target="#collapse_cloudsaver" aria-expanded="true" aria-controls="collapse_cloudsaver">
|
||||||
<div class="col-sm-10">
|
<div class="btn btn-block text-left">
|
||||||
<input type="password" v-model="formData.source.cloudsaver.password" class="form-control" placeholder="密码">
|
<i class="bi bi-caret-right-fill"></i> CloudSaver
|
||||||
|
<span class="badge badge-pill badge-light">
|
||||||
|
<a href="https://github.com/Cp0204/quark-auto-save/wiki/CloudSaver搜索源" target="_blank">?</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="collapse show ml-3" id="collapse_cloudsaver">
|
||||||
<div class="row title" title="资源搜索服务配置,用于任务名称智能搜索">
|
<div class="form-group row">
|
||||||
<div class="col-10">
|
<label class="col-sm-2 col-form-label">服务器</label>
|
||||||
<h2 style="display: inline-block;"><i class="bi bi-search"></i> PanSou</h2>
|
<div class="col-sm-10">
|
||||||
<span class="badge badge-pill badge-light">
|
<input type="text" v-model="formData.source.cloudsaver.server" class="form-control" placeholder="资源搜索服务器地址,如 http://172.17.0.1:8008">
|
||||||
<a href="https://github.com/fish2018/pansou" target="_blank">?</a>
|
</div>
|
||||||
</span>
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-2 col-form-label">用户名</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" v-model="formData.source.cloudsaver.username" class="form-control" placeholder="用户名">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-2 col-form-label">密码</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="password" v-model="formData.source.cloudsaver.password" class="form-control" placeholder="密码">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row mb-0" style="display:flex; align-items:center;">
|
||||||
<label class="col-sm-2 col-form-label">服务器</label>
|
<div data-toggle="collapse" data-target="#collapse_pansou" aria-expanded="true" aria-controls="collapse_pansou">
|
||||||
<div class="col-sm-10">
|
<div class="btn btn-block text-left">
|
||||||
<input type="text" v-model="formData.source.pansou.server" class="form-control" placeholder="资源搜索服务器地址,如 https://so.252035.xyz">
|
<i class="bi bi-caret-right-fill"></i> PanSou
|
||||||
|
<span class="badge badge-pill badge-light">
|
||||||
|
<a href="https://github.com/fish2018/pansou" target="_blank">?</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="collapse show ml-3" id="collapse_pansou">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-2 col-form-label">服务器</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" v-model="formData.source.pansou.server" class="form-control" placeholder="资源搜索服务器地址,如 https://so.252035.xyz">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -325,7 +352,7 @@
|
|||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" name="shareurl[]" class="form-control" v-model="task.shareurl" placeholder="必填" @blur="changeShareurl(task)">
|
<input type="text" name="shareurl[]" class="form-control" v-model="task.shareurl" placeholder="必填" @blur="changeShareurl(task)">
|
||||||
<div class="input-group-append" v-if="task.shareurl">
|
<div class="input-group-append" v-if="task.shareurl">
|
||||||
<button type="button" class="btn btn-outline-secondary" @click="fileSelect.selectDir=true;fileSelect.previewRegex=false;fileSelect.sortBy='file_name';fileSelect.sortOrder='desc';showShareSelect(index)" title="选择文件夹"><i class="bi bi-folder"></i></button>
|
<button type="button" class="btn btn-outline-secondary" @click="fileSelect.selectDir=true;fileSelect.switchShare=false;fileSelect.previewRegex=false;fileSelect.sortBy='file_name';fileSelect.sortOrder='desc';showShareSelect(index)" title="选择文件夹"><i class="bi bi-folder"></i></button>
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<a target="_blank" :href="task.shareurl"><i class="bi bi-box-arrow-up-right"></i></a>
|
<a target="_blank" :href="task.shareurl"><i class="bi bi-box-arrow-up-right"></i></a>
|
||||||
</div>
|
</div>
|
||||||
@ -350,7 +377,7 @@
|
|||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=true;fileSelect.previewRegex=true;fileSelect.sortBy='file_name';fileSelect.sortOrder='asc';showShareSelect(index)" title="预览正则处理效果">正则处理</button>
|
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=true;fileSelect.switchShare=false;fileSelect.previewRegex=true;fileSelect.sortBy='file_name';fileSelect.sortOrder='asc';showShareSelect(index)" title="预览正则处理效果">正则处理</button>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式" list="magicRegex">
|
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式" list="magicRegex">
|
||||||
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式">
|
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式">
|
||||||
@ -371,7 +398,7 @@
|
|||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" class="form-control" placeholder="可选,只转存修改日期>此文件的文件" name="startfid[]" v-model="task.startfid">
|
<input type="text" class="form-control" placeholder="可选,只转存修改日期>此文件的文件" name="startfid[]" v-model="task.startfid">
|
||||||
<div class="input-group-append" v-if="task.shareurl">
|
<div class="input-group-append" v-if="task.shareurl">
|
||||||
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=false;fileSelect.previewRegex=false;fileSelect.sortBy='updated_at';fileSelect.sortOrder='desc';showShareSelect(index)">选择</button>
|
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=false;fileSelect.switchShare=false;fileSelect.previewRegex=false;fileSelect.sortBy='updated_at';fileSelect.sortOrder='desc';showShareSelect(index)">选择</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -468,6 +495,34 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body small">
|
<div class="modal-body small">
|
||||||
|
<!-- 分享链接来源 -->
|
||||||
|
<div class="mb-3 row" v-if="fileSelect.switchShare">
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<div>
|
||||||
|
<b>名称:</b>
|
||||||
|
<span :title="fileSelect.share.content">{{ fileSelect.share.taskname }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<b>链接:</b>
|
||||||
|
<a :href="fileSelect.share.shareurl" target="_blank" @click.stop>{{ fileSelect.share.shareurl }}</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<b>来源:</b>
|
||||||
|
<span class="badge bg-transparent border border-success text-success">{{ fileSelect.share.source || "网络公开" }}</span>
|
||||||
|
<span class="badge bg-transparent border border-info text-info" v-if="fileSelect.share.channel">{{ fileSelect.share.channel }}</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="fileSelect.share.datetime">
|
||||||
|
<b>时间:</b>
|
||||||
|
<span>{{ fileSelect.share.datetime }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4 text-right">
|
||||||
|
<div class="btn-group" title="资源搜索结果切换">
|
||||||
|
<button type="button" class="btn btn-sm btn-outline-primary" @click="switchShare(-1)">上一个</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-outline-primary" @click="switchShare(1)">下一个</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="alert alert-warning" v-if="fileSelect.error" v-html="fileSelect.error"></div>
|
<div class="alert alert-warning" v-if="fileSelect.error" v-html="fileSelect.error"></div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<!-- 正则处理表达式 -->
|
<!-- 正则处理表达式 -->
|
||||||
@ -555,6 +610,9 @@
|
|||||||
tasklist: [],
|
tasklist: [],
|
||||||
magic_regex: {},
|
magic_regex: {},
|
||||||
source: {
|
source: {
|
||||||
|
net: {
|
||||||
|
enable: ""
|
||||||
|
},
|
||||||
cloudsaver: {
|
cloudsaver: {
|
||||||
server: "",
|
server: "",
|
||||||
username: "",
|
username: "",
|
||||||
@ -595,12 +653,14 @@
|
|||||||
configModified: false,
|
configModified: false,
|
||||||
fileSelect: {
|
fileSelect: {
|
||||||
index: null,
|
index: null,
|
||||||
|
share: {},
|
||||||
shareurl: "",
|
shareurl: "",
|
||||||
stoken: "",
|
stoken: "",
|
||||||
fileList: [],
|
fileList: [],
|
||||||
paths: [],
|
paths: [],
|
||||||
selectDir: true,
|
selectDir: true,
|
||||||
selectShare: true,
|
selectShare: true,
|
||||||
|
switchShare: false,
|
||||||
previewRegex: false,
|
previewRegex: false,
|
||||||
sortBy: "updated_at",
|
sortBy: "updated_at",
|
||||||
sortOrder: "desc"
|
sortOrder: "desc"
|
||||||
@ -702,6 +762,11 @@
|
|||||||
server: ""
|
server: ""
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
if (!config_data.source.net) {
|
||||||
|
config_data.source.net = {
|
||||||
|
enable: ""
|
||||||
|
};
|
||||||
|
}
|
||||||
this.formData = config_data;
|
this.formData = config_data;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.configModified = false;
|
this.configModified = false;
|
||||||
@ -986,7 +1051,9 @@
|
|||||||
selectSuggestion(index, suggestion) {
|
selectSuggestion(index, suggestion) {
|
||||||
this.smart_param.showSuggestions = false;
|
this.smart_param.showSuggestions = false;
|
||||||
this.fileSelect.selectDir = true;
|
this.fileSelect.selectDir = true;
|
||||||
|
this.fileSelect.switchShare = true;
|
||||||
this.fileSelect.previewRegex = false;
|
this.fileSelect.previewRegex = false;
|
||||||
|
this.fileSelect.share = suggestion;
|
||||||
this.showShareSelect(index, suggestion.shareurl);
|
this.showShareSelect(index, suggestion.shareurl);
|
||||||
},
|
},
|
||||||
addMagicRegex() {
|
addMagicRegex() {
|
||||||
@ -1047,6 +1114,7 @@
|
|||||||
showSavepathSelect(index) {
|
showSavepathSelect(index) {
|
||||||
this.fileSelect.selectShare = false;
|
this.fileSelect.selectShare = false;
|
||||||
this.fileSelect.selectDir = true;
|
this.fileSelect.selectDir = true;
|
||||||
|
this.fileSelect.switchShare = false;
|
||||||
this.fileSelect.previewRegex = false;
|
this.fileSelect.previewRegex = false;
|
||||||
this.fileSelect.error = undefined;
|
this.fileSelect.error = undefined;
|
||||||
this.fileSelect.fileList = [];
|
this.fileSelect.fileList = [];
|
||||||
@ -1094,6 +1162,23 @@
|
|||||||
$('#fileSelectModal').modal('toggle');
|
$('#fileSelectModal').modal('toggle');
|
||||||
this.getShareDetail();
|
this.getShareDetail();
|
||||||
},
|
},
|
||||||
|
switchShare(index) {
|
||||||
|
currentIndex = this.smart_param.taskSuggestions.data.indexOf(this.fileSelect.share);
|
||||||
|
nextIndex = currentIndex + index;
|
||||||
|
if (nextIndex < 0) {
|
||||||
|
alert("没有上一个啦");
|
||||||
|
} else if (nextIndex >= this.smart_param.taskSuggestions.data.length) {
|
||||||
|
alert("没有下一个啦");
|
||||||
|
} else {
|
||||||
|
this.fileSelect.error = "";
|
||||||
|
this.fileSelect.stoken = "";
|
||||||
|
this.fileSelect.share = this.smart_param.taskSuggestions.data[nextIndex];
|
||||||
|
this.fileSelect.shareurl = this.smart_param.taskSuggestions.data[nextIndex].shareurl;
|
||||||
|
this.fileSelect.paths = [];
|
||||||
|
this.fileSelect.fileList = [];
|
||||||
|
this.getShareDetail();
|
||||||
|
}
|
||||||
|
},
|
||||||
navigateTo(fid, name) {
|
navigateTo(fid, name) {
|
||||||
dir = { fid: fid, name: name }
|
dir = { fid: fid, name: name }
|
||||||
if (this.fileSelect.selectShare) {
|
if (this.fileSelect.selectShare) {
|
||||||
|
|||||||
@ -164,7 +164,7 @@ class MagicRename:
|
|||||||
"{YEAR}": [r"(?<!\d)(18|19|20)\d{2}(?!\d)"],
|
"{YEAR}": [r"(?<!\d)(18|19|20)\d{2}(?!\d)"],
|
||||||
"{S}": [r"(?<=[Ss])\d{1,2}(?=[EeXx])", r"(?<=[Ss])\d{1,2}"],
|
"{S}": [r"(?<=[Ss])\d{1,2}(?=[EeXx])", r"(?<=[Ss])\d{1,2}"],
|
||||||
"{SXX}": [r"[Ss]\d{1,2}(?=[EeXx])", r"[Ss]\d{1,2}"],
|
"{SXX}": [r"[Ss]\d{1,2}(?=[EeXx])", r"[Ss]\d{1,2}"],
|
||||||
"{E}": [
|
"{E+}": [
|
||||||
r"(?<=[Ss]\d\d[Ee])\d{1,3}",
|
r"(?<=[Ss]\d\d[Ee])\d{1,3}",
|
||||||
r"(?<=[Ee])\d{1,3}",
|
r"(?<=[Ee])\d{1,3}",
|
||||||
r"(?<=[Ee][Pp])\d{1,3}",
|
r"(?<=[Ee][Pp])\d{1,3}",
|
||||||
@ -224,7 +224,7 @@ class MagicRename:
|
|||||||
return file_name
|
return file_name
|
||||||
# 预处理替换变量
|
# 预处理替换变量
|
||||||
for key, p_list in self.magic_variable.items():
|
for key, p_list in self.magic_variable.items():
|
||||||
if key in replace:
|
if match_key := re.search(key, replace):
|
||||||
# 正则类替换变量
|
# 正则类替换变量
|
||||||
if p_list and isinstance(p_list, list):
|
if p_list and isinstance(p_list, list):
|
||||||
for p in p_list:
|
for p in p_list:
|
||||||
@ -240,7 +240,10 @@ class MagicRename:
|
|||||||
value = (
|
value = (
|
||||||
str(datetime.now().year)[: (8 - len(value))] + value
|
str(datetime.now().year)[: (8 - len(value))] + value
|
||||||
)
|
)
|
||||||
replace = replace.replace(key, value)
|
# 集数零填充处理
|
||||||
|
elif key == "{E+}":
|
||||||
|
value = value.lstrip("0").zfill(match_key.group().count("E"))
|
||||||
|
replace = re.sub(key, value, replace)
|
||||||
break
|
break
|
||||||
# 非正则类替换变量
|
# 非正则类替换变量
|
||||||
if key == "{TASKNAME}":
|
if key == "{TASKNAME}":
|
||||||
@ -251,7 +254,7 @@ class MagicRename:
|
|||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
# 清理未匹配的 magic_variable key
|
# 清理未匹配的 magic_variable key
|
||||||
replace = replace.replace(key, "")
|
replace = re.sub(key, "", replace)
|
||||||
if pattern and replace:
|
if pattern and replace:
|
||||||
file_name = re.sub(pattern, replace, file_name)
|
file_name = re.sub(pattern, replace, file_name)
|
||||||
else:
|
else:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user