From 581037193438031ee6227ba156006e5c4cca81b0 Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 18 Nov 2025 18:15:48 +0800 Subject: [PATCH] add option to use xcpcio as default scoreboard --- packages/onsite-toolkit/index.ts | 7 ------- packages/scoreboard-xcpcio/index.ts | 11 +++++++++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/onsite-toolkit/index.ts b/packages/onsite-toolkit/index.ts index 5a773baa8..99ec9a0a1 100644 --- a/packages/onsite-toolkit/index.ts +++ b/packages/onsite-toolkit/index.ts @@ -378,11 +378,4 @@ export function apply(ctx: Context, config: ReturnType) { ); }); } - - ctx.on('handler/before/ContestScoreboard#get', (that) => { - if (that.request.path.endsWith('/scoreboard')) { - that.response.redirect = `${that.request.path}/xcpcio`; - return 'cleanup'; - } - }); } diff --git a/packages/scoreboard-xcpcio/index.ts b/packages/scoreboard-xcpcio/index.ts index e8f15ae62..055fc2495 100644 --- a/packages/scoreboard-xcpcio/index.ts +++ b/packages/scoreboard-xcpcio/index.ts @@ -91,6 +91,7 @@ export const name = 'scoreboard-xcpcio'; export const Config = Schema.object({ cacheTTL: Schema.number().default(0).description('Cache TTL in milliseconds'), cacheSize: Schema.number().default(100).description('Cache size'), + asDefault: Schema.boolean().default(false).description('As default scoreboard'), }); export async function apply(ctx: Context, config: ReturnType) { @@ -126,6 +127,16 @@ export async function apply(ctx: Context, config: ReturnType) { }); } + if (config.asDefault) { + // eslint-disable-next-line consistent-return + ctx.on('handler/before/ContestScoreboard#get', (that) => { + if (that.request.path.endsWith('/scoreboard') && that.tdoc?.rule === 'acm') { + that.response.redirect = `${that.request.path}/xcpcio`; + return 'cleanup'; + } + }); + } + ctx.inject(['scoreboard'], ({ scoreboard }) => { scoreboard.addView('xcpcio', 'XCPCIO', { tdoc: 'tdoc',