diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index b7b5b5719..43407fdc2 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.4.26", + "version": "3.4.27", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index 50c2a7d2a..e01beee6e 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -328,7 +328,9 @@ export class ContestCodeHandler extends Handler { const rnames = {}; for (const tsdoc of tsdocs) { for (const pid in tsdoc.detail || {}) { - rnames[tsdoc.detail[pid].rid] = `U${tsdoc.uid}_P${pid}_R${tsdoc.detail[pid].rid}`; + let name = `U${tsdoc.uid}_P${pid}_R${tsdoc.detail[pid].rid}`; + if (typeof tsdoc.detail[pid].score === 'number') name += `_S${tsdoc.detail[pid].status}@${tsdoc.detail[pid].score}`; + rnames[tsdoc.detail[pid].rid] = name; } } const zip = new AdmZip(); diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index b7c2af989..025609c7f 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -23,6 +23,7 @@ import domain from '../model/domain'; import * as oplog from '../model/oplog'; import problem from '../model/problem'; import record from '../model/record'; +import * as setting from '../model/setting'; import solution from '../model/solution'; import storage from '../model/storage'; import * as system from '../model/system'; @@ -436,7 +437,10 @@ export class ProblemSubmitHandler extends ProblemDetailHandler { if (this.response.body.pdoc.config?.langs && !this.response.body.pdoc.config.langs.includes(lang)) { throw new BadRequestError('Language not allowed.'); } - if (pretest && !['default', 'fileio'].includes(this.response.body.pdoc.config?.type)) throw new BadRequestError('unable to run pretest'); + if (pretest && setting.langs[lang]?.pretest) lang = setting.langs[lang].pretest; + if (pretest && !['default', 'fileio', 'remote_judge'].includes(this.response.body.pdoc.config?.type)) { + throw new BadRequestError('unable to run pretest'); + } await this.limitRate('add_record', 60, system.get('limit.submission')); const rid = await record.add(domainId, this.pdoc.docId, this.user._id, lang, code, true, pretest ? input : tid, tid && !pretest); const rdoc = await record.get(domainId, rid); diff --git a/packages/hydrooj/src/model/record.ts b/packages/hydrooj/src/model/record.ts index 2baeab4b0..df653a078 100644 --- a/packages/hydrooj/src/model/record.ts +++ b/packages/hydrooj/src/model/record.ts @@ -75,7 +75,7 @@ class RecordModel { source = `${pdoc.domainId}/${pdoc.docId}`; data = pdoc.data; if (typeof pdoc.config === 'string') throw new Error(pdoc.config); - if (pdoc.config.type === 'remote_judge') { + if (pdoc.config.type === 'remote_judge' && rdoc.contest.toHexString() !== '0'.repeat(24)) { return await task.add({ ...omit(rdoc, ['_id']), priority, diff --git a/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx b/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx index 342e6322f..89383d9c9 100644 --- a/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx +++ b/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx @@ -87,7 +87,10 @@ export default connect(mapStateToProps, mapDispatchToProps)(class ScratchpadTool } const keys = Object.keys(LANGS); if (!keys.includes(this.props.editorLang)) this.props.setEditorLanguage(keys[0]); - const canUsePretest = ['default', 'fileio'].includes(UiContext.pdoc.config?.type); + let canUsePretest = ['default', 'fileio'].includes(UiContext.pdoc.config?.type); + if (UiContext.pdoc.config?.type === 'remote_judge') { + if (window.LANGS[this.props.editorLang].pretest) canUsePretest = true; + } return ( {canUsePretest && ( diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 7f16b1d16..7ee317277 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.31.16", + "version": "4.31.17", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/components/problem.html b/packages/ui-default/templates/components/problem.html index e0be07c4f..ff39c7d7f 100644 --- a/packages/ui-default/templates/components/problem.html +++ b/packages/ui-default/templates/components/problem.html @@ -5,7 +5,7 @@ {% if pdoc.domainId !== handler.domainId %}{{ set(_linkArgs, 'domainId', pdoc.domainId) }}{% endif %} {%- endif -%} -{%- if pdoc.domainId !== handler.domainId -%}{{ pdoc.domainId }}#{%- endif -%} +{%- if pdoc.domainId !== handler.domainId -%}{{ pdoc.domainId }}#{%- endif -%} {{ pdoc.pid or 'P'+pdoc.docId if pdoc.domainId === handler.domainId else pdoc.docId }} {%- if not small -%}  {{ pdoc.title }}{%- endif -%} {%- if not invalid -%}