From 14648d6401a471935ee766bd4f3f41113a82bfca Mon Sep 17 00:00:00 2001 From: xream Date: Thu, 26 Oct 2023 11:26:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=A2=E9=98=85=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=82=E6=95=B0(=E4=BE=8B:=20https://foo.c?= =?UTF-8?q?om#noCache=20=E5=85=B3=E9=97=AD=E7=BC=93=E5=AD=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/utils/download.js | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index 54d7554..9af0ba8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.77", + "version": "2.14.78", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/utils/download.js b/backend/src/utils/download.js index 8540bf5..433e409 100644 --- a/backend/src/utils/download.js +++ b/backend/src/utils/download.js @@ -8,6 +8,25 @@ import $ from '@/core/app'; const tasks = new Map(); export default async function download(url, ua) { + let $arguments = {}; + const rawArgs = url.split('#'); + if (rawArgs.length > 1) { + try { + // 支持 `#${encodeURIComponent(JSON.stringify({arg1: "1"}))}` + $arguments = JSON.parse(decodeURIComponent(rawArgs[1])); + } catch (e) { + for (const pair of rawArgs[1].split('&')) { + const key = pair.split('=')[0]; + const value = pair.split('=')[1]; + // 部分兼容之前的逻辑 const value = pair.split('=')[1] || true; + $arguments[key] = + value == null || value === '' + ? true + : decodeURIComponent(value); + } + } + } + const downloadUrlMatch = url.match(/^\/api\/(file|module)\/(.+)/); if (downloadUrlMatch) { let type = downloadUrlMatch?.[1]; @@ -41,7 +60,7 @@ export default async function download(url, ua) { const result = new Promise((resolve, reject) => { // try to find in app cache const cached = resourceCache.get(id); - if (cached) { + if (!$arguments?.noCache && cached) { resolve(cached); } else { http.get(url)