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): def preview_regex(share_detail):
regex = request.json.get("regex") regex = request.json.get("regex", {})
pattern, replace = account.magic_regex_func( pattern, replace = account.magic_regex_func(
regex.get("pattern", ""), regex.get("pattern", ""),
regex.get("replace", ""), regex.get("replace", ""),
@ -292,6 +292,7 @@ def get_share_detail():
) )
return share_detail return share_detail
if request.json.get("regex"):
share_detail = preview_regex(share_detail) share_detail = preview_regex(share_detail)
return jsonify({"success": True, "data": share_detail}) return jsonify({"success": True, "data": share_detail})

View File

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

View File

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