diff --git a/parser/src/test/java/cn/qaiu/parser/PanDomainTemplateTest.java b/parser/src/test/java/cn/qaiu/parser/PanDomainTemplateTest.java
index 0ed4ec6..d0eb78c 100644
--- a/parser/src/test/java/cn/qaiu/parser/PanDomainTemplateTest.java
+++ b/parser/src/test/java/cn/qaiu/parser/PanDomainTemplateTest.java
@@ -170,6 +170,10 @@ public class PanDomainTemplateTest {
assertTrue("YE should match redirected mshare URL", redirectedUrl.find());
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");
assertTrue("YE should match html URL with query", htmlUrl.find());
assertEquals("lN7UVv-pbYJ", htmlUrl.group("KEY"));
diff --git a/web-front/src/parserUrl1.js b/web-front/src/parserUrl1.js
index c3e38a9..506d9fe 100644
--- a/web-front/src/parserUrl1.js
+++ b/web-front/src/parserUrl1.js
@@ -246,8 +246,8 @@
storage: 'hash'
},
'123pan': {
- reg: /((?:https?:\/\/)?www\.(123pan|123865|123684)\.com\/s\/[\w-]{6,})/,
- host: /www\.123pan\.com/,
+ 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: /(?:[a-zA-Z\d-]+\.(?:m?share)\.123pan\.cn|(?:www\.)?(?:123panpay|123pan|123\d{3})\.(?:com|cn))/i,
input: ['.ca-fot input', ".appinput .appinput"],
button: ['.ca-fot button', ".appinput button"],
name: '123云盘',
@@ -377,6 +377,7 @@
parseLink(text = '') {
let obj = {name: '', link: '', storage: '', storagePwdName: ''};
if (text) {
+ text = String(text).trim();
try {
text = decodeURIComponent(text);
} catch {
@@ -390,6 +391,9 @@
let matches = text.match(val.reg);
obj.name = val.name;
obj.link = matches[0];
+ if (obj.link && !/^https?:\/\//i.test(obj.link)) {
+ obj.link = 'https://' + obj.link.replace(/^\/\//, '');
+ }
obj.storage = val.storage;
obj.storagePwdName = val.storagePwdName || null;
if (val.replaceHost) {
diff --git a/web-front/src/views/Home.vue b/web-front/src/views/Home.vue
index aca2358..bd45069 100644
--- a/web-front/src/views/Home.vue
+++ b/web-front/src/views/Home.vue
@@ -90,7 +90,7 @@
-
+
分享链接
读取剪切板
@@ -1143,10 +1143,24 @@ export default {
normalizeShortcutInput() {
if (!this.link) return
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)
@@ -1420,7 +1434,7 @@ export default {
// 获取剪切板内容
async getPaste(isManual = false) {
try {
- const text = await navigator.clipboard.readText()
+ const text = (await navigator.clipboard.readText() || '').trim()
const shortInfo = this.expandShortFormat(text)
if (shortInfo) {
diff --git a/web-service/pom.xml b/web-service/pom.xml
index 597206b..42c7f39 100644
--- a/web-service/pom.xml
+++ b/web-service/pom.xml
@@ -91,7 +91,8 @@
${project.basedir}/src/main/generated
- -AoutputDirectory=${project.basedir}/src/main -Xlint:unchecked
+ -AoutputDirectory=${project.basedir}/src/main
+ -Xlint:unchecked