From e6d0bb51d42d13361815e9b16ce1b322e5537182 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 5 Jun 2022 13:21:33 +0800 Subject: [PATCH] core: homework: fix duration setting --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/homework.ts | 4 ++++ packages/hydrooj/src/model/contest.ts | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 373e1719e..9efe2076d 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.13.15", + "version": "3.13.16", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index 023aef574..08e5349b7 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -78,6 +78,10 @@ class HomeworkDetailHandler extends Handler { const psdict = {}; let rdict = {}; if (tsdoc) { + if (tsdoc.attend && !tsdoc.startAt && contest.isOngoing(tdoc)) { + await contest.setStatus(domainId, tid, this.user._id, { startAt: new Date() }); + tsdoc.startAt = new Date(); + } for (const pdetail of tsdoc.journal || []) { psdict[pdetail.pid] = pdetail; rdict[pdetail.rid] = { _id: pdetail.rid }; diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index d9a5bd699..52ebf24d0 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -557,13 +557,13 @@ export function isNotStarted(tdoc: Tdoc) { export function isOngoing(tdoc: Tdoc, tsdoc?: any) { const now = new Date(); - if (tsdoc && tsdoc.startAt <= new Date(Date.now() - Math.floor(tdoc.duration * Time.hour))) return false; + if (tsdoc && tdoc.duration && tsdoc.startAt <= new Date(Date.now() - Math.floor(tdoc.duration * Time.hour))) return false; return (tdoc.beginAt <= now && now < tdoc.endAt); } export function isDone(tdoc: Tdoc, tsdoc?: any) { if (tdoc.endAt <= new Date()) return true; - if (tsdoc && tsdoc.startAt <= new Date(Date.now() - Math.floor(tdoc.duration * Time.hour))) return true; + if (tsdoc && tdoc.duration && tsdoc.startAt <= new Date(Date.now() - Math.floor(tdoc.duration * Time.hour))) return true; return false; }