diff --git a/packages/vjudge/src/model.ts b/packages/vjudge/src/model.ts index c31901d0d..4f45aeea4 100644 --- a/packages/vjudge/src/model.ts +++ b/packages/vjudge/src/model.ts @@ -2,7 +2,7 @@ import os from 'os'; import { Context, db, DomainModel, JudgeHandler, Logger, - ProblemModel, RecordModel, Service, sleep, STATUS, TaskModel, Time, + ProblemModel, RecordModel, Service, SettingModel, sleep, STATUS, TaskModel, Time, } from 'hydrooj'; import { BasicProvider, IBasicProvider, RemoteAccount } from './interface'; import providers from './providers/index'; @@ -39,6 +39,12 @@ class AccountService { const end = (payload) => JudgeHandler.end({ ...payload, rid: task.rid }); await next({ status: STATUS.STATUS_FETCHED }); try { + const comment = SettingModel.langs[task.lang].comment; + if (comment) { + const msg = `Hydro submission #${task.rid}@${new Date().getTime()}`; + if (typeof comment === 'string') task.code = `${comment} ${msg}\n${task.code}`; + else if (comment instanceof Array) task.code = `${comment[0]} ${msg} ${comment[1]}\n${task.code}`; + } const rid = await this.api.submitProblem(task.target, task.lang, task.code, task, next, end); if (!rid) return; await next({ status: STATUS.STATUS_JUDGING, message: `ID = ${rid}` }); diff --git a/packages/vjudge/src/providers/codeforces.ts b/packages/vjudge/src/providers/codeforces.ts index 00476f523..9f72f86a7 100644 --- a/packages/vjudge/src/providers/codeforces.ts +++ b/packages/vjudge/src/providers/codeforces.ts @@ -3,7 +3,7 @@ import { PassThrough } from 'stream'; import yaml from 'js-yaml'; import { JSDOM } from 'jsdom'; import { - buildContent, Logger, SettingModel, sleep, STATUS, + buildContent, Logger, sleep, STATUS, } from 'hydrooj'; import { BasicFetcher } from '../fetch'; import { IBasicProvider, RemoteAccount } from '../interface'; @@ -272,12 +272,6 @@ export default class CodeforcesProvider extends BasicFetcher implements IBasicPr async submitProblem(id: string, lang: string, code: string, info, next, end) { const programTypeId = lang.includes('codeforces.') ? lang.split('codeforces.')[1] : '54'; - const comment = SettingModel.langs[lang].comment; - if (comment) { - const msg = `Hydro submission #${info.rid}@${new Date().getTime()}`; - if (typeof comment === 'string') code = `${comment} ${msg}\n${code}`; - else if (comment instanceof Array) code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; - } const [type, contestId, problemId] = parseProblemId(id); const endpoint = type === 'GYM' ? `/gym/${contestId}/submit` diff --git a/packages/vjudge/src/providers/hustoj.ts b/packages/vjudge/src/providers/hustoj.ts index f5c897c0c..50292987e 100644 --- a/packages/vjudge/src/providers/hustoj.ts +++ b/packages/vjudge/src/providers/hustoj.ts @@ -1,5 +1,5 @@ import { - _, Logger, SettingModel, sleep, STATUS, + _, Logger, sleep, STATUS, } from 'hydrooj'; import { BasicFetcher } from '../fetch'; import { IBasicProvider, RemoteAccount } from '../interface'; @@ -134,16 +134,9 @@ export class HUSTOJ extends BasicFetcher implements IBasicProvider { } async submitProblem(id: string, lang: string, code: string, info, next) { - const langId = lang.split('.')[1]; - const comment = SettingModel.langs[lang].comment; - if (comment) { - const msg = `Hydro submission #${info.rid}@${Date.now()}`; - if (typeof comment === 'string') code = `${comment} ${msg}\n${code}`; - else if (comment instanceof Array) code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; - } const res = await this.post(this.config.submit.endpoint).send({ [this.config.submit.idField]: id, - [this.config.submit.langField]: langId, + [this.config.submit.langField]: lang.split('.')[1], [this.config.submit.codeField]: code, ...this.config.submit.extra, }); diff --git a/packages/vjudge/src/providers/luogu.ts b/packages/vjudge/src/providers/luogu.ts index 77eae8ac6..203c2228d 100644 --- a/packages/vjudge/src/providers/luogu.ts +++ b/packages/vjudge/src/providers/luogu.ts @@ -1,6 +1,6 @@ /* eslint-disable no-await-in-loop */ import { - _, Logger, SettingModel, sleep, STATUS, + _, Logger, sleep, STATUS, } from 'hydrooj'; import { BasicFetcher } from '../fetch'; import { IBasicProvider, RemoteAccount } from '../interface'; @@ -87,7 +87,6 @@ export default class LuoguProvider extends BasicFetcher implements IBasicProvide async submitProblem(id: string, lang: string, code: string, info, next, end) { let enableO2 = 0; - const comment = SettingModel.langs[lang]?.comment; if (code.length < 10) { end({ status: STATUS.STATUS_COMPILE_ERROR, message: 'Code too short' }); return null; @@ -96,11 +95,6 @@ export default class LuoguProvider extends BasicFetcher implements IBasicProvide end({ status: STATUS.STATUS_COMPILE_ERROR, message: `Language not supported: ${lang}` }); return null; } - if (comment) { - const msg = `Hydro submission #${info.rid}@${new Date().toLocaleString()}`; - if (typeof comment === 'string') code = `${comment} ${msg}\n${code}`; - else if (comment instanceof Array) code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; - } if (lang.endsWith('o2')) { enableO2 = 1; lang = lang.slice(0, -2); diff --git a/packages/vjudge/src/providers/poj.ts b/packages/vjudge/src/providers/poj.ts index 96e5b8402..0b86b1c39 100644 --- a/packages/vjudge/src/providers/poj.ts +++ b/packages/vjudge/src/providers/poj.ts @@ -2,7 +2,7 @@ import { PassThrough } from 'stream'; import { JSDOM } from 'jsdom'; import { - htmlEncode, Logger, parseMemoryMB, parseTimeMS, SettingModel, sleep, STATUS, + htmlEncode, Logger, parseMemoryMB, parseTimeMS, sleep, STATUS, } from 'hydrooj'; import { BasicFetcher } from '../fetch'; import { IBasicProvider, RemoteAccount } from '../interface'; @@ -195,15 +195,9 @@ export default class POJProvider extends BasicFetcher implements IBasicProvider .map((i) => `P${+i.children[0].innerHTML ? i.children[0].innerHTML : i.children[1].innerHTML}`); } - async submitProblem(id: string, lang: string, code: string, info) { + async submitProblem(id: string, lang: string, code: string) { await this.ensureLogin(); const language = lang.includes('poj.') ? lang.split('poj.')[1] : '0'; - const comment = SettingModel.langs[lang].comment; - if (comment) { - const msg = `Hydro submission #${info.rid}@${new Date().getTime()}`; - if (typeof comment === 'string') code = `${comment} ${msg}\n${code}`; - else if (comment instanceof Array) code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; - } code = Buffer.from(code).toString('base64'); const { text } = await this.post('/submit').send({ problem_id: id.split('P')[1], diff --git a/packages/vjudge/src/providers/spoj.ts b/packages/vjudge/src/providers/spoj.ts index f00898af1..0754fbb96 100644 --- a/packages/vjudge/src/providers/spoj.ts +++ b/packages/vjudge/src/providers/spoj.ts @@ -2,7 +2,7 @@ import { PassThrough } from 'stream'; import { JSDOM } from 'jsdom'; import { - Logger, parseMemoryMB, SettingModel, sleep, STATUS, + Logger, parseMemoryMB, sleep, STATUS, } from 'hydrooj'; import { BasicFetcher } from '../fetch'; import { IBasicProvider, RemoteAccount } from '../interface'; @@ -94,12 +94,6 @@ langs: ${JSON.stringify(langs)}`), } async submitProblem(problemcode: string, lang: string, code: string, info, next, end) { - const comment = SettingModel.langs[lang]?.comment; - if (comment) { - const msg = `Hydro submission #${info.rid}@${new Date().getTime()}`; - if (typeof comment === 'string') code = `${comment} ${msg}\n${code}`; - else if (comment instanceof Array) code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; - } // TODO check submit time to ensure submission const { text } = await this.post('/submit/complete/').send({ submit: 'Submit!', diff --git a/packages/vjudge/src/providers/uoj.ts b/packages/vjudge/src/providers/uoj.ts index 880262fe6..34af7cc6f 100644 --- a/packages/vjudge/src/providers/uoj.ts +++ b/packages/vjudge/src/providers/uoj.ts @@ -2,7 +2,7 @@ import { PassThrough } from 'stream'; import { JSDOM } from 'jsdom'; import { - Logger, parseMemoryMB, parseTimeMS, SettingModel, sleep, STATUS, + Logger, parseMemoryMB, parseTimeMS, sleep, STATUS, } from 'hydrooj'; import { BasicFetcher } from '../fetch'; import { IBasicProvider, RemoteAccount } from '../interface'; @@ -142,15 +142,9 @@ export default class UOJProvider extends BasicFetcher implements IBasicProvider return Array.from($dom.window.document.querySelectorAll('tbody>tr>td>a')).map((i) => `P${i.getAttribute('href').split('/')[4]}`); } - async submitProblem(id: string, lang: string, code: string, info) { + async submitProblem(id: string, lang: string, code: string) { let programTypeId = lang.includes('uoj.') ? lang.split('uoj.')[1] : 'C++11'; if (programTypeId === 'Python27') programTypeId = 'Python2.7'; - const comment = SettingModel.langs[lang].comment; - if (comment) { - const msg = `Hydro submission #${info.rid}@${new Date().getTime()}`; - if (typeof comment === 'string') code = `${comment} ${msg}\n${code}`; - else if (comment instanceof Array) code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; - } const _token = await this.getCsrfToken(`/problem/${id.split('P')[1]}`); const { text } = await this.post(`/problem/${id.split('P')[1]}`).send({ _token,