From 824ccc935bd0010bb0d7d5b93837097c146161b6 Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 14 Jan 2021 22:33:25 +0800 Subject: [PATCH] core: add hook: system/setting --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/manage.ts | 10 ++++------ packages/hydrooj/src/service/bus.ts | 2 ++ packages/hydrooj/src/service/server.ts | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 1f5274768..796354c7f 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.15.19", + "version": "2.15.20", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/manage.ts b/packages/hydrooj/src/handler/manage.ts index 69435774d..514527aa1 100644 --- a/packages/hydrooj/src/handler/manage.ts +++ b/packages/hydrooj/src/handler/manage.ts @@ -10,11 +10,12 @@ import * as record from '../model/record'; import { Route, Connection, Handler, ConnectionHandler, param, Types, } from '../service/server'; +import * as bus from '../service/bus'; import { validate, isEmail, isUname, isPassword, } from '../lib/validator'; -function set(key, value) { +function set(key: string, value: any) { if (setting.SYSTEM_SETTINGS_BY_KEY[key]) { const s = setting.SYSTEM_SETTINGS_BY_KEY[key]; if (s.flag & setting.FLAG_DISABLED) return undefined; @@ -24,7 +25,7 @@ function set(key, value) { return false; } if (s.type === 'number') { - if (!Number.isSafeInteger(parseInt(value, 10))) { + if (!Number.isSafeInteger(+value)) { throw new ValidationError(key); } return parseInt(value, 10); @@ -139,8 +140,6 @@ class SystemSettingHandler extends SystemHandler { this.response.body.current = {}; this.response.body.settings = setting.SYSTEM_SETTINGS; for (const s of this.response.body.settings) { - // FIXME no-await-in-loop - // eslint-disable-next-line no-await-in-loop this.response.body.current[s.key] = system.get(s.key); } } @@ -151,15 +150,14 @@ class SystemSettingHandler extends SystemHandler { if (typeof args[key] === 'object') { for (const subkey in args[key]) { if (typeof set(`${key}.${subkey}`, args[key][subkey]) !== 'undefined') { - // @ts-ignore tasks.push(system.set(`${key}.${subkey}`, set(`${key}.${subkey}`, args[key][subkey]))); } } } else if (typeof set(key, args[key]) !== 'undefined') { - // @ts-ignore tasks.push(system.set(key, set(key, args[key]))); } } + tasks.push(bus.parallel('system/setting', args)); await Promise.all(tasks); this.back(); } diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 7e7c0279c..be5ce3494 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -38,6 +38,8 @@ export interface EventMap { 'database/connect': (db: Db) => void 'database/config': () => void + 'system/setting': (args: Record) => VoidReturn + 'monitor/update': (type: 'server' | 'judger', $set: any) => VoidReturn 'user/message': (uid: number, mdoc: Mdoc, udoc: User) => void diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 7b3234a90..570bf3c51 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -254,7 +254,7 @@ export class HandlerCommon { translate(str: string) { if (!str) return ''; - return str.toString().translate(this.user.viewLang, this.session.viewLang); + return str.toString().translate(this.user.viewLang, this.session.viewLang, system.get('server.language')); } renderTitle(str: string) {