feat: 支持主分组隐藏节点并保留排序
This commit is contained in:
+23
-3
@@ -77,6 +77,7 @@ export type SubscriptionSettings = {
|
||||
extraProxyGroups: string;
|
||||
profileName: string;
|
||||
mainProxyGroupMemberSlugs: string[];
|
||||
mainProxyGroupHiddenSlugs: string[];
|
||||
proxyGroups: ProxyGroupConfig[];
|
||||
};
|
||||
|
||||
@@ -1193,6 +1194,9 @@ export async function getSubscriptionSettings() {
|
||||
mainProxyGroupMemberSlugs: JSON.parse(
|
||||
map.get("main_proxy_group_member_slugs_json") ?? "[]",
|
||||
) as string[],
|
||||
mainProxyGroupHiddenSlugs: JSON.parse(
|
||||
map.get("main_proxy_group_hidden_slugs_json") ?? "[]",
|
||||
) as string[],
|
||||
proxyGroups: JSON.parse(
|
||||
map.get("proxy_groups_json") ?? "[]",
|
||||
) as ProxyGroupConfig[],
|
||||
@@ -1234,10 +1238,13 @@ export async function saveProxyGroups(proxyGroups: ProxyGroupConfig[]) {
|
||||
).run("proxy_groups_json", JSON.stringify(proxyGroups), now);
|
||||
}
|
||||
|
||||
export async function saveMainProxyGroupMemberSlugs(memberSlugs: string[]) {
|
||||
export async function saveMainProxyGroupMemberSlugs(
|
||||
memberSlugs: string[],
|
||||
hiddenSlugs?: string[],
|
||||
) {
|
||||
const db = await ensureDb();
|
||||
const now = dbNow();
|
||||
db.prepare(
|
||||
const upsert = db.prepare(
|
||||
`
|
||||
INSERT INTO app_settings (key, value, updated_at)
|
||||
VALUES (?, ?, ?)
|
||||
@@ -1245,7 +1252,20 @@ export async function saveMainProxyGroupMemberSlugs(memberSlugs: string[]) {
|
||||
value = excluded.value,
|
||||
updated_at = excluded.updated_at
|
||||
`,
|
||||
).run("main_proxy_group_member_slugs_json", JSON.stringify(memberSlugs), now);
|
||||
);
|
||||
db.transaction(() => {
|
||||
upsert.run(
|
||||
"main_proxy_group_member_slugs_json",
|
||||
JSON.stringify(memberSlugs),
|
||||
now,
|
||||
);
|
||||
if (hiddenSlugs !== undefined)
|
||||
upsert.run(
|
||||
"main_proxy_group_hidden_slugs_json",
|
||||
JSON.stringify([...new Set(hiddenSlugs)]),
|
||||
now,
|
||||
);
|
||||
})();
|
||||
}
|
||||
|
||||
export async function listSubscriptionNodes() {
|
||||
|
||||
+9
-2
@@ -13,6 +13,7 @@ type ClashSettings = {
|
||||
extraProxyGroups: string;
|
||||
profileName: string;
|
||||
mainProxyGroupMemberSlugs: string[];
|
||||
mainProxyGroupHiddenSlugs?: string[];
|
||||
proxyGroups: ProxyGroupConfig[];
|
||||
};
|
||||
|
||||
@@ -225,14 +226,20 @@ export function buildSubscriptionConfig(input: {
|
||||
const nodeNameBySlug = new Map(
|
||||
eligibleNodes.map((node) => [node.slug, getNodeProxyName(node)]),
|
||||
);
|
||||
const proxyNames = orderedEligibleNodes.map((node) => getNodeProxyName(node));
|
||||
const hidden = new Set(input.settings.mainProxyGroupHiddenSlugs ?? []);
|
||||
const proxyNames = orderedEligibleNodes
|
||||
.filter((node) => !hidden.has(node.slug))
|
||||
.map((node) => getNodeProxyName(node));
|
||||
const proxiesBlock = orderedEligibleNodes
|
||||
.map((node) => renderSubscriptionProxy(node, authString, input.user))
|
||||
.join("\n");
|
||||
const defaultTemplate =
|
||||
input.settings.template.trimEnd() || readDefaultTemplate();
|
||||
const renderedGroups = [
|
||||
renderGroupEntry(input.settings.profileName || "FeieProxy", proxyNames),
|
||||
renderGroupEntry(
|
||||
input.settings.profileName || "FeieProxy",
|
||||
proxyNames.length ? proxyNames : ["DIRECT"],
|
||||
),
|
||||
...input.settings.proxyGroups
|
||||
.map((group) => {
|
||||
const members = group.memberSlugs
|
||||
|
||||
Reference in New Issue
Block a user