Compare commits

..

3 Commits

Author SHA1 Message Date
Cp0204
546f4300a1 🎨 增强正则预览使用魔法匹配时的表达式提示
Some checks failed
Docker Publish / build-and-push (push) Has been cancelled
2025-04-25 12:28:52 +08:00
Cp0204
b724fbb98a 增强路径名称中的特殊字符处理
- 修复选择转存目录时带提取码的链接处理
- 修复返回空路径时的错误提示
2025-04-25 12:26:50 +08:00
Cp0204
9222a703b4 🐛 修复手动填写链接时自动检查失效 #72 2025-04-25 12:21:13 +08:00
3 changed files with 40 additions and 35 deletions

View File

@ -277,7 +277,7 @@ def get_share_detail():
# 正则处理预览
def preview_regex(share_detail):
regex = request.json.get("regex")
regex = request.json.get("regex", {})
pattern, replace = account.magic_regex_func(
regex.get("pattern", ""),
regex.get("replace", ""),
@ -292,7 +292,8 @@ def get_share_detail():
)
return share_detail
share_detail = preview_regex(share_detail)
if request.json.get("regex"):
share_detail = preview_regex(share_detail)
return jsonify({"success": True, "data": share_detail})

View File

@ -448,8 +448,12 @@
</nav>
<!-- 文件列表 -->
<div class="mb-3" v-if="fileSelect.previewRegex">
<div><b>匹配表达式:</b><span class="badge badge-info" v-html="formData.tasklist[fileSelect.index].pattern"></span></div>
<div><b>替换表达式:</b><span class="badge badge-info" v-html="formData.tasklist[fileSelect.index].replace"></span></div>
<div><b>匹配表达式:</b><span class="badge badge-info" v-html="formData.tasklist[fileSelect.index].pattern"></span>
<span class="badge badge-info" v-if="formData.tasklist[fileSelect.index].pattern in formData.magic_regex">{{ formData.magic_regex[formData.tasklist[fileSelect.index].pattern].pattern }}</span>
</div>
<div><b>替换表达式:</b><span class="badge badge-info" v-if="formData.tasklist[fileSelect.index].replace" v-html="formData.tasklist[fileSelect.index].replace"></span>
<span class="badge badge-info" v-else-if="formData.tasklist[fileSelect.index].pattern in formData.magic_regex">{{ formData.magic_regex[formData.tasklist[fileSelect.index].pattern].replace }}</span>
</div>
</div>
<table class="table table-hover table-sm">
<thead>
@ -763,28 +767,28 @@
console.error("Error decodeURIComponent:", e);
}
// 从分享中提取任务名
axios.get('/get_share_detail', { params: { shareurl: task.shareurl } })
.then(response => {
share_detail = response.data.data
if (!response.data.success) {
if (share_detail.error.includes("提取码")) {
const passcode = prompt("检查失败[" + share_detail.error + "],请输入提取码:");
if (passcode != null) {
task.shareurl = task.shareurl.replace(/pan.quark.cn\/s\/(\w+)(\?pwd=\w*)*/, `pan.quark.cn/s/$1?pwd=${passcode}`);
this.changeShareurl(task);
return;
}
axios.post('/get_share_detail', {
shareurl: task.shareurl
}).then(response => {
share_detail = response.data.data
if (!response.data.success) {
if (share_detail.error.includes("提取码")) {
const passcode = prompt("检查失败[" + share_detail.error + "],请输入提取码:");
if (passcode != null) {
task.shareurl = task.shareurl.replace(/pan.quark.cn\/s\/(\w+)(\?pwd=\w*)*/, `pan.quark.cn/s/$1?pwd=${passcode}`);
this.changeShareurl(task);
return;
}
this.$set(task, "shareurl_ban", share_detail.error);
} else {
task.taskname = task.taskname == "" ? share_detail.share.title : task.taskname;
task.savepath = task.savepath.replace(/TASKNAME/g, share_detail.share.title);
this.$set(task, "shareurl_ban", undefined);
}
})
.catch(error => {
console.error('Error get_share_detail:', error);
});
this.$set(task, "shareurl_ban", share_detail.error);
} else {
task.taskname = task.taskname == "" ? share_detail.share.title : task.taskname;
task.savepath = task.savepath.replace(/TASKNAME/g, share_detail.share.title);
this.$set(task, "shareurl_ban", undefined);
}
}).catch(error => {
console.error('Error get_share_detail:', error);
});
},
clearData(target) {
this[target] = "";
@ -964,7 +968,7 @@
params: params
}).then(response => {
this.fileSelect.fileList = response.data.data.list
if (response.data.data.paths.length > 0) {
if (response.data.data.paths?.length > 0) {
this.fileSelect.paths = response.data.data.paths
}
this.modalLoading = false;
@ -1026,9 +1030,9 @@
this.getShareDetail();
},
navigateTo(fid, name) {
path = { fid: fid, name: name }
dir = { fid: fid, name: name }
if (this.fileSelect.selectShare) {
this.fileSelect.shareurl = this.getShareurl(this.fileSelect.shareurl, path);
this.fileSelect.shareurl = this.getShareurl(this.fileSelect.shareurl, dir);
this.getShareDetail();
} else {
if (fid == "0") {
@ -1060,15 +1064,15 @@
Vue.set(this.formData.tasklist[this.fileSelect.index], 'startfid', fid);
$('#fileSelectModal').modal('hide')
},
getShareurl(shareurl, path = {}) {
if (path == {} || path.fid == 0) {
shareurl = shareurl.match(`.*s/[a-z0-9]+`)[0]
} else if (shareurl.includes(path.fid)) {
shareurl = shareurl.match(`.*/${path.fid}[^\/]*`)[0]
getShareurl(shareurl, dir = {}) {
if (dir == {} || dir.fid == 0) {
shareurl = shareurl.match(`.*s/[a-z0-9]+(\\?pwd=[^#]+)?`)[0]
} else if (shareurl.includes(dir.fid)) {
shareurl = shareurl.match(`.*/${dir.fid}[^/]*`)[0]
} else if (shareurl.includes('#/list/share')) {
shareurl = `${shareurl}/${path.fid}-${path.name}`
shareurl = `${shareurl}/${dir.fid}-${dir.name?.replace('-', '*101')}`
} else {
shareurl = `${shareurl}#/list/share/${path.fid}-${path.name}`
shareurl = `${shareurl}#/list/share/${dir.fid}-${dir.name?.replace('-', '*101')}`
}
return shareurl;
}

View File

@ -556,7 +556,7 @@ class Quark:
matches = re.findall(r"/(\w{32})-?([^/]+)?", url)
for match in matches:
fid = match[0]
name = urllib.parse.unquote(match[1])
name = urllib.parse.unquote(match[1]).replace("*101", "-")
paths.append({"fid": fid, "name": name})
pdir_fid = paths[-1]["fid"] if matches else 0
return pwd_id, passcode, pdir_fid, paths