feat: 手动设置的订阅流量信息会附加到订阅自己的流量信息之前

This commit is contained in:
xream 2024-11-17 22:53:22 +08:00
parent dea937df66
commit b6110e86c9
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
3 changed files with 48 additions and 51 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "sub-store", "name": "sub-store",
"version": "2.14.420", "version": "2.14.421",
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
"main": "src/main.js", "main": "src/main.js",
"scripts": { "scripts": {

View File

@ -213,7 +213,12 @@ async function downloadSubscription(req, res) {
} }
} }
if (sub.subUserinfo) { if (sub.subUserinfo) {
res.set('subscription-userinfo', sub.subUserinfo); res.set(
'subscription-userinfo',
[sub.subUserinfo, res.get('subscription-userinfo')]
.filter((i) => i)
.join('; '),
);
} }
if (platform === 'JSON') { if (platform === 'JSON') {
@ -411,7 +416,12 @@ async function downloadCollection(req, res) {
} }
} }
if (sub.subUserinfo) { if (sub.subUserinfo) {
res.set('subscription-userinfo', sub.subUserinfo); res.set(
'subscription-userinfo',
[sub.subUserinfo, res.get('subscription-userinfo')]
.filter((i) => i)
.join('; '),
);
} }
} }

View File

@ -125,66 +125,53 @@ async function getFlowInfo(req, res) {
); );
return; return;
} }
if (sub.subUserinfo) { const flowHeaders = await getFlowHeaders(
try { $arguments?.insecure ? `${url}#insecure` : url,
const remainingDays = getRmainingDays({ $arguments.flowUserAgent,
resetDay: $arguments.resetDay, undefined,
startDate: $arguments.startDate, sub.proxy,
cycleDays: $arguments.cycleDays, $arguments.flowUrl,
}); );
const result = { if (!flowHeaders && !sub.subUserinfo) {
...parseFlowHeaders(sub.subUserinfo), failed(
}; res,
if (remainingDays != null) { new InternalServerError(
result.remainingDays = remainingDays; 'NO_FLOW_INFO',
} 'No flow info',
success(res, result); `Failed to fetch flow headers`,
} catch (e) { ),
$.error(
`Failed to parse flow info for local subscription ${name}: ${
e.message ?? e
}`,
);
failed(
res,
new RequestInvalidError(
'NO_FLOW_INFO',
'N/A',
`Failed to parse flow info`,
),
);
}
} else {
const flowHeaders = await getFlowHeaders(
$arguments?.insecure ? `${url}#insecure` : url,
$arguments.flowUserAgent,
undefined,
sub.proxy,
$arguments.flowUrl,
); );
if (!flowHeaders) { return;
failed( }
res, try {
new InternalServerError(
'NO_FLOW_INFO',
'No flow info',
`Failed to fetch flow headers`,
),
);
return;
}
const remainingDays = getRmainingDays({ const remainingDays = getRmainingDays({
resetDay: $arguments.resetDay, resetDay: $arguments.resetDay,
startDate: $arguments.startDate, startDate: $arguments.startDate,
cycleDays: $arguments.cycleDays, cycleDays: $arguments.cycleDays,
}); });
const result = { const result = {
...parseFlowHeaders(flowHeaders), ...parseFlowHeaders(
[sub.subUserinfo, flowHeaders].filter((i) => i).join('; '),
),
}; };
if (remainingDays != null) { if (remainingDays != null) {
result.remainingDays = remainingDays; result.remainingDays = remainingDays;
} }
success(res, result); success(res, result);
} catch (e) {
$.error(
`Failed to parse flow info for local subscription ${name}: ${
e.message ?? e
}`,
);
failed(
res,
new RequestInvalidError(
'NO_FLOW_INFO',
'N/A',
`Failed to parse flow info`,
),
);
} }
} catch (err) { } catch (err) {
failed( failed(