From 36ff691a041ce9e868d63dc0a7d4ca0ef88f544a Mon Sep 17 00:00:00 2001 From: Baoshuo Date: Sat, 8 Apr 2023 15:45:35 +0800 Subject: [PATCH] feat(remote_judger): submitProblem status report --- remote_judger/src/providers/atcoder.ts | 6 +++++- remote_judger/src/providers/codeforces.ts | 8 ++++++-- remote_judger/src/providers/loj.ts | 6 +++++- remote_judger/src/providers/luogu.ts | 2 ++ remote_judger/src/providers/qoj.ts | 2 ++ remote_judger/src/providers/uoj.ts | 4 ++++ 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/remote_judger/src/providers/atcoder.ts b/remote_judger/src/providers/atcoder.ts index 53317d7..e4bfdaa 100644 --- a/remote_judger/src/providers/atcoder.ts +++ b/remote_judger/src/providers/atcoder.ts @@ -205,6 +205,8 @@ export default class AtcoderProvider implements IBasicProvider { `(S2OJ Submission #${submissionId})` ); + await next({ status: 'Submitting to AtCoder...' }); + // TODO: check submit time to ensure submission const res = await this.post(`/contests/${contestId}/submit`).send({ csrf_token: csrf, @@ -227,6 +229,8 @@ export default class AtcoderProvider implements IBasicProvider { this.cookie = res.header['set-cookie']; } + await next({ status: 'Submitted to AtCoder' }); + const { text: status, header: status_header } = await this.get( `/contests/${contestId}/submissions/me` ).retry(3); @@ -280,7 +284,7 @@ export default class AtcoderProvider implements IBasicProvider { statusElem.title === 'Waiting for Re-judging' || ['WJ', 'WR'].includes(statusElem.innerHTML.trim()) ) { - await next({ test_id: 0 }); + await next({ status: '[AtCoder] Waiting for Judging' }); continue; } diff --git a/remote_judger/src/providers/codeforces.ts b/remote_judger/src/providers/codeforces.ts index e4985aa..0da2b0f 100644 --- a/remote_judger/src/providers/codeforces.ts +++ b/remote_judger/src/providers/codeforces.ts @@ -277,6 +277,8 @@ export default class CodeforcesProvider implements IBasicProvider { `(S2OJ Submission #${submissionId})` ); + await next({ status: 'Submitting to Codeforces...' }); + // TODO: check submit time to ensure submission const { text: submit, error } = await this.post( `/${ @@ -328,6 +330,8 @@ export default class CodeforcesProvider implements IBasicProvider { return null; } + await next({ status: 'Submitted to Codeforces' }); + const { text: status } = await this.get( type !== 'GYM' ? '/problemset/status?my=on' : `/gym/${contestId}/my` ).retry(3); @@ -350,9 +354,9 @@ export default class CodeforcesProvider implements IBasicProvider { let count = 0; let fail = 0; - while (count < 180 && fail < 10) { + while (count < 360 && fail < 60) { count++; - await sleep(1000); + await sleep(500); try { const { body } = await this.post('/data/submitSource') diff --git a/remote_judger/src/providers/loj.ts b/remote_judger/src/providers/loj.ts index d50ed0d..7cf06c2 100644 --- a/remote_judger/src/providers/loj.ts +++ b/remote_judger/src/providers/loj.ts @@ -249,6 +249,8 @@ export default class LibreojProvider implements IBasicProvider { `(S2OJ Submission #${submissionId})` ); + await next({ status: 'Submitting to LibreOJ...' }); + const { body, error } = await this.post('/submission/submit').send({ problemId: id, content: { @@ -268,6 +270,8 @@ export default class LibreojProvider implements IBasicProvider { return null; } + await next({ status: 'Submitted to LibreOJ' }); + return body.submissionId; } @@ -345,7 +349,7 @@ export default class LibreojProvider implements IBasicProvider { } await next({ - status: `${body.progress.progressType}`, + status: `[LibreOJ] ${body.progress.progressType}`, }); if (body.progress.progressType !== 'Finished') { diff --git a/remote_judger/src/providers/luogu.ts b/remote_judger/src/providers/luogu.ts index 2a74315..374cf7c 100644 --- a/remote_judger/src/providers/luogu.ts +++ b/remote_judger/src/providers/luogu.ts @@ -319,6 +319,8 @@ export default class LuoguProvider implements IBasicProvider { code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; } + await next({ status: 'Submitting to Luogu...' }); + if (this.account.type == 'luogu-api') { const result = await this.post('/judge/problem').send({ pid: id, diff --git a/remote_judger/src/providers/qoj.ts b/remote_judger/src/providers/qoj.ts index 8d5578b..15a69c4 100644 --- a/remote_judger/src/providers/qoj.ts +++ b/remote_judger/src/providers/qoj.ts @@ -200,6 +200,8 @@ export default class QOJProvider extends UOJProvider implements IBasicProvider { code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; } + await next({ status: 'Submitting to QOJ...' }); + const _token = await this.getCsrfToken(`/problem/${id}`); const { text } = await this.post(`/problem/${id}`).send({ _token, diff --git a/remote_judger/src/providers/uoj.ts b/remote_judger/src/providers/uoj.ts index a8ffda7..6787493 100644 --- a/remote_judger/src/providers/uoj.ts +++ b/remote_judger/src/providers/uoj.ts @@ -217,6 +217,8 @@ export default class UOJProvider implements IBasicProvider { code = `${comment[0]} ${msg} ${comment[1]}\n${code}`; } + await next({ status: 'Submitting to UniversalOJ...' }); + const _token = await this.getCsrfToken(`/problem/${id}`); const { text } = await this.post(`/problem/${id}`).send({ _token, @@ -228,6 +230,8 @@ export default class UOJProvider implements IBasicProvider { if (!text.includes('我的提交记录')) throw new Error('Submit failed'); + await next({ status: 'Submitted to UniversalOJ' }); + const { text: status } = await this.get( `/submissions?problem_id=${id}&submitter=${this.account.handle}` );