优化ui
This commit is contained in:
+35
-2
@@ -14,6 +14,7 @@ type ClashSettings = {
|
||||
template: string;
|
||||
extraProxyGroups: string;
|
||||
profileName: string;
|
||||
mainProxyGroupMemberSlugs: string[];
|
||||
proxyGroups: ProxyGroupConfig[];
|
||||
};
|
||||
|
||||
@@ -63,6 +64,34 @@ function renderGroupEntry(name: string, proxyNames: string[]) {
|
||||
].join("\n");
|
||||
}
|
||||
|
||||
function orderNodesBySlugs(nodes: Hy2NodeRow[], orderedSlugs: string[]) {
|
||||
if (orderedSlugs.length === 0) {
|
||||
return nodes;
|
||||
}
|
||||
|
||||
const nodesBySlug = new Map(nodes.map((node) => [node.slug, node]));
|
||||
const seen = new Set<string>();
|
||||
const orderedNodes: Hy2NodeRow[] = [];
|
||||
|
||||
for (const slug of orderedSlugs) {
|
||||
const node = nodesBySlug.get(slug);
|
||||
if (!node || seen.has(slug)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
orderedNodes.push(node);
|
||||
seen.add(slug);
|
||||
}
|
||||
|
||||
for (const node of nodes) {
|
||||
if (!seen.has(node.slug)) {
|
||||
orderedNodes.push(node);
|
||||
}
|
||||
}
|
||||
|
||||
return orderedNodes;
|
||||
}
|
||||
|
||||
export function encodeRFC5987ValueChars(value: string) {
|
||||
return encodeURIComponent(value)
|
||||
.replace(/['()]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`)
|
||||
@@ -141,11 +170,15 @@ export function buildSubscriptionConfig(input: {
|
||||
const eligibleNodes = input.nodes.filter(
|
||||
(node) => node.enabled && node.server_host && node.server_port > 0,
|
||||
);
|
||||
const orderedEligibleNodes = orderNodesBySlugs(
|
||||
eligibleNodes,
|
||||
input.settings.mainProxyGroupMemberSlugs,
|
||||
);
|
||||
const nodeNameBySlug = new Map(
|
||||
eligibleNodes.map((node) => [node.slug, node.client_name || node.name]),
|
||||
);
|
||||
const proxyNames = eligibleNodes.map((node) => node.client_name || node.name);
|
||||
const proxiesBlock = eligibleNodes.map((node) => renderProxy(node, authString)).join("\n");
|
||||
const proxyNames = orderedEligibleNodes.map((node) => node.client_name || node.name);
|
||||
const proxiesBlock = orderedEligibleNodes.map((node) => renderProxy(node, authString)).join("\n");
|
||||
const defaultTemplate = input.settings.template.trimEnd() || readDefaultTemplate();
|
||||
const renderedGroups = [
|
||||
renderGroupEntry(input.settings.profileName || "FeieProxy", proxyNames),
|
||||
|
||||
Reference in New Issue
Block a user