mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2026-08-26 03:22:02 +00:00
fix: recognize 123pan uid.share links and trim paste input
Clipboard auto-detect now matches {userId}.share.123pan.cn/123pan/{key}, and the share URL field is trimmed on paste and blur. Split web-service compiler args so IDE rebuilds no longer wipe classes.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -170,6 +170,10 @@ public class PanDomainTemplateTest {
|
|||||||
assertTrue("YE should match redirected mshare URL", redirectedUrl.find());
|
assertTrue("YE should match redirected mshare URL", redirectedUrl.find());
|
||||||
assertEquals("lN7UVv-pbYJ", redirectedUrl.group("KEY"));
|
assertEquals("lN7UVv-pbYJ", redirectedUrl.group("KEY"));
|
||||||
|
|
||||||
|
Matcher shareUrl = yePattern.matcher("https://1815268665.share.123pan.cn/123pan/iaKtVv-r4aCd");
|
||||||
|
assertTrue("YE should match uid.share.123pan.cn URL", shareUrl.find());
|
||||||
|
assertEquals("iaKtVv-r4aCd", shareUrl.group("KEY"));
|
||||||
|
|
||||||
Matcher htmlUrl = yePattern.matcher("https://www.123278.com/s/lN7UVv-pbYJ.html?pwd=abcd");
|
Matcher htmlUrl = yePattern.matcher("https://www.123278.com/s/lN7UVv-pbYJ.html?pwd=abcd");
|
||||||
assertTrue("YE should match html URL with query", htmlUrl.find());
|
assertTrue("YE should match html URL with query", htmlUrl.find());
|
||||||
assertEquals("lN7UVv-pbYJ", htmlUrl.group("KEY"));
|
assertEquals("lN7UVv-pbYJ", htmlUrl.group("KEY"));
|
||||||
|
|||||||
@@ -246,8 +246,8 @@
|
|||||||
storage: 'hash'
|
storage: 'hash'
|
||||||
},
|
},
|
||||||
'123pan': {
|
'123pan': {
|
||||||
reg: /((?:https?:\/\/)?www\.(123pan|123865|123684)\.com\/s\/[\w-]{6,})/,
|
reg: /((?:https?:\/\/)?(?:[a-zA-Z\d-]+\.(?:m?share)\.123pan\.cn\/123pan\/[\w-]+|(?:www\.)?(?:123panpay|123pan|123\d{3})\.(?:com|cn)\/s\/[\w-]{6,}(?:\.html)?)(?:\?[^#\s]*)?)/i,
|
||||||
host: /www\.123pan\.com/,
|
host: /(?:[a-zA-Z\d-]+\.(?:m?share)\.123pan\.cn|(?:www\.)?(?:123panpay|123pan|123\d{3})\.(?:com|cn))/i,
|
||||||
input: ['.ca-fot input', ".appinput .appinput"],
|
input: ['.ca-fot input', ".appinput .appinput"],
|
||||||
button: ['.ca-fot button', ".appinput button"],
|
button: ['.ca-fot button', ".appinput button"],
|
||||||
name: '123云盘',
|
name: '123云盘',
|
||||||
@@ -377,6 +377,7 @@
|
|||||||
parseLink(text = '') {
|
parseLink(text = '') {
|
||||||
let obj = {name: '', link: '', storage: '', storagePwdName: ''};
|
let obj = {name: '', link: '', storage: '', storagePwdName: ''};
|
||||||
if (text) {
|
if (text) {
|
||||||
|
text = String(text).trim();
|
||||||
try {
|
try {
|
||||||
text = decodeURIComponent(text);
|
text = decodeURIComponent(text);
|
||||||
} catch {
|
} catch {
|
||||||
@@ -390,6 +391,9 @@
|
|||||||
let matches = text.match(val.reg);
|
let matches = text.match(val.reg);
|
||||||
obj.name = val.name;
|
obj.name = val.name;
|
||||||
obj.link = matches[0];
|
obj.link = matches[0];
|
||||||
|
if (obj.link && !/^https?:\/\//i.test(obj.link)) {
|
||||||
|
obj.link = 'https://' + obj.link.replace(/^\/\//, '');
|
||||||
|
}
|
||||||
obj.storage = val.storage;
|
obj.storage = val.storage;
|
||||||
obj.storagePwdName = val.storagePwdName || null;
|
obj.storagePwdName = val.storagePwdName || null;
|
||||||
if (val.replaceHost) {
|
if (val.replaceHost) {
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
<!-- 开关按钮,控制是否自动读取剪切板 -->
|
<!-- 开关按钮,控制是否自动读取剪切板 -->
|
||||||
<el-switch v-model="autoReadClipboard" active-text="自动识别剪切板"></el-switch>
|
<el-switch v-model="autoReadClipboard" active-text="自动识别剪切板"></el-switch>
|
||||||
|
|
||||||
<el-input placeholder="请粘贴分享链接(http://或https://)" v-model="link" id="url" @paste="onPaste">
|
<el-input placeholder="请粘贴分享链接(http://或https://)" v-model="link" id="url" @paste="onPaste" @blur="normalizeShortcutInput">
|
||||||
<template #prepend>分享链接</template>
|
<template #prepend>分享链接</template>
|
||||||
<template #append v-if="!autoReadClipboard">
|
<template #append v-if="!autoReadClipboard">
|
||||||
<el-button @click="getPaste(true)">读取剪切板</el-button>
|
<el-button @click="getPaste(true)">读取剪切板</el-button>
|
||||||
@@ -1143,10 +1143,24 @@ export default {
|
|||||||
normalizeShortcutInput() {
|
normalizeShortcutInput() {
|
||||||
if (!this.link) return
|
if (!this.link) return
|
||||||
const trimmed = this.link.trim()
|
const trimmed = this.link.trim()
|
||||||
if (!trimmed) return
|
if (!trimmed) {
|
||||||
|
this.link = ''
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.link = trimmed
|
||||||
|
|
||||||
// 已经是直接链接,跳过
|
// 已经是直接链接:仍尝试从整段文本中抽出标准分享地址
|
||||||
if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) return
|
if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {
|
||||||
|
const linkInfo = parserUrl.parseLink(trimmed)
|
||||||
|
if (linkInfo.link) {
|
||||||
|
this.link = linkInfo.link
|
||||||
|
const pwd = parserUrl.parsePwd(trimmed)
|
||||||
|
if (!this.password && pwd) {
|
||||||
|
this.password = pwd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 尝试短格式
|
// 尝试短格式
|
||||||
const shortInfo = this.expandShortFormat(trimmed)
|
const shortInfo = this.expandShortFormat(trimmed)
|
||||||
@@ -1420,7 +1434,7 @@ export default {
|
|||||||
// 获取剪切板内容
|
// 获取剪切板内容
|
||||||
async getPaste(isManual = false) {
|
async getPaste(isManual = false) {
|
||||||
try {
|
try {
|
||||||
const text = await navigator.clipboard.readText()
|
const text = (await navigator.clipboard.readText() || '').trim()
|
||||||
|
|
||||||
const shortInfo = this.expandShortFormat(text)
|
const shortInfo = this.expandShortFormat(text)
|
||||||
if (shortInfo) {
|
if (shortInfo) {
|
||||||
|
|||||||
+2
-1
@@ -91,7 +91,8 @@
|
|||||||
${project.basedir}/src/main/generated
|
${project.basedir}/src/main/generated
|
||||||
</generatedSourcesDirectory>
|
</generatedSourcesDirectory>
|
||||||
<compilerArgs>
|
<compilerArgs>
|
||||||
<arg>-AoutputDirectory=${project.basedir}/src/main -Xlint:unchecked</arg>
|
<arg>-AoutputDirectory=${project.basedir}/src/main</arg>
|
||||||
|
<arg>-Xlint:unchecked</arg>
|
||||||
</compilerArgs>
|
</compilerArgs>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|||||||
Reference in New Issue
Block a user