From 11a406e9b66348a9d950d07dfdda4307fd48ac00 Mon Sep 17 00:00:00 2001 From: Hmjz100 <98228280+hmjz100@users.noreply.github.com> Date: Thu, 1 Jan 2026 21:53:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E9=80=90=E4=B8=AA?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- (改)网盘直链下载助手.user.js | 231 +++++++++++++++++---------------- 1 file changed, 120 insertions(+), 111 deletions(-) diff --git a/(改)网盘直链下载助手.user.js b/(改)网盘直链下载助手.user.js index 9ff7996..6efcd88 100644 --- a/(改)网盘直链下载助手.user.js +++ b/(改)网盘直链下载助手.user.js @@ -845,34 +845,37 @@ * @returns {Promise<"success"|"fail">} 发送态结果 */ async sendLinkToAria2(link, filename, headers) { - let list = base.getValue("setting_aria2_rpc"); - let selected = list.find(i => i.default); - let rpc = { - domain: selected.domain, - port: selected.port, - path: selected.path, - dir: selected.dir, - token: selected.token - }; - let url = `${rpc.domain}:${rpc.port}${rpc.path}`; - let dir = (rpc.dir !== null && rpc.dir !== "") ? rpc.dir : undefined; - let data = { - id: new Date().getTime(), - jsonrpc: "2.0", - method: "aria2.addUri", - params: [`token:${rpc.token}`, [link], { - dir, - out: filename, - header: headers - }] - }; - try { - let res = await base.post(url, data, {}, ""); - if (res.result) return "success"; - return "fail"; - } catch (e) { - return "fail"; - } + if (!this.sendLinkToAria2.lock) this.sendLinkToAria2.lock = Promise.resolve(); + return this.sendLinkToAria2.lock = this.sendLinkToAria2.lock.then(async () => { + let list = base.getValue("setting_aria2_rpc"); + let selected = list.find(i => i.default); + let rpc = { + domain: selected.domain, + port: selected.port, + path: selected.path, + dir: selected.dir, + token: selected.token + }; + let url = `${rpc.domain}:${rpc.port}${rpc.path}`; + let dir = (rpc.dir !== null && rpc.dir !== "") ? rpc.dir : undefined; + let data = { + id: new Date().getTime(), + jsonrpc: "2.0", + method: "aria2.addUri", + params: [`token:${rpc.token}`, [link], { + dir, + out: filename, + header: headers + }] + }; + try { + let res = await base.post(url, data, {}, ""); + if (res.result) return "success"; + return "fail"; + } catch (e) { + return "fail"; + } + }); }, /** @@ -885,40 +888,43 @@ * @returns {Promise<"success"|"fail">} 发送态结果 */ async sendLinkToBitcomet(link, filename, headers) { - let list = base.getValue("setting_bitcomet_rpc"); - let selected = list.find(i => i.default); - let rpc = { - domain: selected.domain, - port: selected.port, - path: selected.path, - dir: selected.dir, - authName: selected.authName, - authPass: selected.authPass, - }; - let url = `${rpc.domain}:${rpc.port}${rpc.path}`; - let data = new URLSearchParams(); - data.append("url", link); - if (rpc.dir !== null && rpc.dir !== "") data.append("save_path", rpc.dir); - data.append("file_name", filename); - data.append("connection", 200); - if (headers && base.isType(headers) === "object") { - for (var [key, value] of Object.entries(headers)) { - data.append(key, value); + if (!this.sendLinkToBitcomet.lock) this.sendLinkToBitcomet.lock = Promise.resolve(); + return this.sendLinkToBitcomet.lock = this.sendLinkToBitcomet.lock.then(async () => { + let list = base.getValue("setting_bitcomet_rpc"); + let selected = list.find(i => i.default); + let rpc = { + domain: selected.domain, + port: selected.port, + path: selected.path, + dir: selected.dir, + authName: selected.authName, + authPass: selected.authPass, + }; + let url = `${rpc.domain}:${rpc.port}${rpc.path}`; + let data = new URLSearchParams(); + data.append("url", link); + if (rpc.dir !== null && rpc.dir !== "") data.append("save_path", rpc.dir); + data.append("file_name", filename); + data.append("connection", 200); + if (headers && base.isType(headers) === "object") { + for (var [key, value] of Object.entries(headers)) { + data.append(key, value); + } } - } - try { - let res = await base.post(url, data, { - "Authorization": `Basic ${base.encodeBase(rpc.authName + ":" + rpc.authPass)}`, - "Content-Type": "application/x-www-form-urlencoded" - }, "blob"); - if (res.response && res?.responseText?.includes("Add task failed!")) { - return "fail"; - } else { + try { + let res = await base.post(url, data, { + "Authorization": `Basic ${base.encodeBase(rpc.authName + ":" + rpc.authPass)}`, + "Content-Type": "application/x-www-form-urlencoded" + }, "blob"); + if (res.response && res?.responseText?.includes("Add task failed!")) { + return "fail"; + } else { + return "success"; + } + } catch (e) { return "success"; } - } catch (e) { - return "success"; - } + }); }, /** @@ -931,37 +937,40 @@ * @returns {Promise<"success"|"fail">} 发送态结果 */ async sendLinkToABDM(link, filename, headers) { - let newHeaders = {}; - for (let key in headers) { - newHeaders[key.toLowerCase().split("-").map(word => word.charAt(0).toUpperCase() + word.slice(1)).join("-")] = headers[key]; - } - headers = { "User-Agent": navigator.userAgent, "Origin": location.origin, "Referer": `${location.origin}/`, "DNT": "1", ...newHeaders }; - let list = base.getValue("setting_abdm_rpc"); - let selected = list.find(i => i.default); - let rpc = { - domain: selected.domain, - port: selected.port, - dir: selected.dir - }; - let url = `${rpc.domain}:${rpc.port}/start-headless-download`; - let data = { - "downloadSource": { - "name": filename, - "description": "LinkSwift", - "link": link, - "headers": headers, - "downloadPage": headers["Referer"] - }, - "name": filename - } - if (rpc.dir) data.folder = rpc.dir; - try { - let res = await base.post(url, data, { "Content-Type": "text/plain;charset=UTF-8" }, "text"); - if (res === "OK") return "success"; - return "fail"; - } catch (e) { - return "fail"; - } + if (!this.sendLinkToBitcomet.lock) this.sendLinkToBitcomet.lock = Promise.resolve(); + return this.sendLinkToBitcomet.lock = this.sendLinkToBitcomet.lock.then(async () => { + let newHeaders = {}; + for (let key in headers) { + newHeaders[key.toLowerCase().split("-").map(word => word.charAt(0).toUpperCase() + word.slice(1)).join("-")] = headers[key]; + } + headers = { "User-Agent": navigator.userAgent, "Origin": location.origin, "Referer": `${location.origin}/`, "DNT": "1", ...newHeaders }; + let list = base.getValue("setting_abdm_rpc"); + let selected = list.find(i => i.default); + let rpc = { + domain: selected.domain, + port: selected.port, + dir: selected.dir + }; + let url = `${rpc.domain}:${rpc.port}/start-headless-download`; + let data = { + "downloadSource": { + "name": filename, + "description": "LinkSwift", + "link": link, + "headers": headers, + "downloadPage": headers["Referer"] + }, + "name": filename + } + if (rpc.dir) data.folder = rpc.dir; + try { + let res = await base.post(url, data, { "Content-Type": "text/plain;charset=UTF-8" }, "text"); + if (res === "OK") return "success"; + return "fail"; + } catch (e) { + return "fail"; + } + }); }, /** @@ -3170,8 +3179,8 @@