From 1139c0ea57c979f30d5e30074201e8fdb40ba019 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 27 Jun 2021 23:30:05 +0800 Subject: [PATCH] vjudge: better sync method --- packages/vjudge/package.json | 2 +- packages/vjudge/src/interface.ts | 2 +- packages/vjudge/src/model.ts | 7 ++++--- packages/vjudge/src/providers/codeforces.ts | 3 ++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/vjudge/package.json b/packages/vjudge/package.json index 507b6ccb4..a242a8cb0 100644 --- a/packages/vjudge/package.json +++ b/packages/vjudge/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/vjudge", - "version": "1.0.13", + "version": "1.0.14", "description": "Submit problems to remote oj", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro.git", diff --git a/packages/vjudge/src/interface.ts b/packages/vjudge/src/interface.ts index 6383825b5..0cae96675 100644 --- a/packages/vjudge/src/interface.ts +++ b/packages/vjudge/src/interface.ts @@ -25,7 +25,7 @@ export interface IBasicProvider { tag: string[]; content: string; }>; - listProblem(page: number): Promise; + listProblem(page: number, resync: boolean): Promise; submitProblem(id: string, lang: string, code: string, info): Promise; waitForSubmission(id: string, next: any, end: any): Promise; } diff --git a/packages/vjudge/src/model.ts b/packages/vjudge/src/model.ts index 899bfdc72..a63371ecc 100644 --- a/packages/vjudge/src/model.ts +++ b/packages/vjudge/src/model.ts @@ -32,9 +32,9 @@ class Service { await this.api.waitForSubmission(rid, next, end); } - async sync(domainId: string) { + async sync(domainId: string, resync = false) { let page = 1; - let pids = await this.api.listProblem(page); + let pids = await this.api.listProblem(page, resync); while (pids.length) { logger.info(`${domainId}: Syncing page ${page}`); for (const pid of pids) { @@ -68,7 +68,8 @@ class Service { TaskModel.consume({ type: 'remotejudge', subType: this.account.type }, this.judge.bind(this)); const ddocs = await DomainModel.getMulti({ mount: this.account.type }).toArray(); for (const ddoc of ddocs) { - if (!ddoc.syncDone) await this.sync(ddoc._id); + if (!ddoc.syncDone) await this.sync(ddoc._id, false); + else await this.sync(ddoc._id, true); await DomainModel.edit(ddoc._id, { syncDone: true }); } } diff --git a/packages/vjudge/src/providers/codeforces.ts b/packages/vjudge/src/providers/codeforces.ts index bef8ca77c..91c8d00b3 100644 --- a/packages/vjudge/src/providers/codeforces.ts +++ b/packages/vjudge/src/providers/codeforces.ts @@ -182,7 +182,8 @@ export default class CodeforcesProvider implements IBasicProvider { }; } - async listProblem(page: number) { + async listProblem(page: number, resync = false) { + if (resync && page > 1) return []; const res = await this.get(`/problemset/page/${page}`); const $dom = new JSDOM(res.text); const index = $dom.window.document.querySelector('.page-index.active').getAttribute('pageindex');