diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index 95a394a43..149123e2c 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -990,17 +990,15 @@ export class ProblemPrefixListHandler extends Handler { @param('prefix', Types.Name) async get(domainId: string, prefix: string) { const pdocs = await problem.getPrefixList(domainId, prefix); - if (!Number.isNaN(+prefix)) { + if (!Number.isNaN(+prefix) && !pdocs.filter((i) => i.docId === +prefix)) { const pdoc = await problem.get(domainId, +prefix, ['domainId', 'docId', 'pid', 'title']); if (pdoc) pdocs.unshift(pdoc); } - const search = global.Hydro.lib.problemSearch; if (pdocs.length < 20) { - if (search) { - const result = await search(domainId, prefix, { limit: 20 - pdocs.length }); - const docs = await problem.getMulti(domainId, { docId: { $in: result.hits.map((i) => +i.split('/')[1]) } }).toArray(); - pdocs.push(...docs); - } + const search = global.Hydro.lib.problemSearch || defaultSearch; + const result = await search(domainId, prefix, { limit: 20 - pdocs.length }); + const docs = await problem.getMulti(domainId, { docId: { $in: result.hits.map((i) => +i.split('/')[1]) } }).toArray(); + pdocs.push(...docs); } this.response.body = pdocs; } diff --git a/packages/hydrooj/src/loader.ts b/packages/hydrooj/src/loader.ts index edfff0c01..922d6ba1b 100644 --- a/packages/hydrooj/src/loader.ts +++ b/packages/hydrooj/src/loader.ts @@ -70,7 +70,7 @@ export async function load() { addon(path.resolve(__dirname, '..'), true); Error.stackTraceLimit = 50; require('./entry/worker').load(); - if (global.gc) global.gc(); + global.gc?.(); } export async function loadCli() { diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index 90001aa35..282129c26 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -340,7 +340,8 @@ export class ProblemModel { prefix = prefix.toLowerCase(); const $regex = new RegExp(`\\A${escapeRegExp(prefix)}`, 'gmi'); const filter = { $or: [{ pid: { $regex } }, { title: { $regex } }] }; - return await document.getMulti(domainId, document.TYPE_PROBLEM, filter, ['domainId', 'docId', 'pid', 'title']).toArray(); + return await document.getMulti(domainId, document.TYPE_PROBLEM, filter, ['domainId', 'docId', 'pid', 'title']) + .limit(20).toArray(); } static async getListStatus(domainId: string, uid: number, pids: number[]) { diff --git a/packages/hydrooj/src/ui.ts b/packages/hydrooj/src/ui.ts index c7609da21..3a29c5225 100644 --- a/packages/hydrooj/src/ui.ts +++ b/packages/hydrooj/src/ui.ts @@ -33,7 +33,7 @@ async function executeCommand(input: string) { } process.stdin.setEncoding('utf-8'); -if (process.stdin.setRawMode) process.stdin.setRawMode(false); +process.stdin.setRawMode?.(false); process.stdin.on('data', (buf) => { const input = buf.toString(); executeCommand(input); diff --git a/packages/hydrooj/src/upgrade.ts b/packages/hydrooj/src/upgrade.ts index 9b3e13b5e..9e83bdc72 100644 --- a/packages/hydrooj/src/upgrade.ts +++ b/packages/hydrooj/src/upgrade.ts @@ -842,6 +842,11 @@ const scripts: UpgradeScript[] = [ } return true; }, + async function _68_69() { + const _FRESH_INSTALL_IGNORE = 1; + await db.collection('cache' as any).deleteMany({}); + return true; + }, ]; export default scripts;