This commit is contained in:
undefined committed 2025-11-07 21:01:30 +08:00
1 parent cc413531f1
commit 643416373f
3 files changed
+4 -38

No files matched your search

-36
View File
@@ -253,42 +253,6 @@ export function findFileSync(pathname: string, doThrow: boolean | Error = true)
return null;
}
export async function retry<Arg extends any[], Ret>(func: (...args: Arg) => Ret, ...args: Arg): Promise<Ret>;
export async function retry<Arg extends any[], Ret>(times: number, func: (...args: Arg) => Ret, ...args: Arg): Promise<Ret>;
// eslint-disable-next-line consistent-return
export async function retry(arg0: number | ((...args: any[]) => any), func: any, ...args: any[]): Promise<any> {
let res;
if (typeof arg0 !== 'number') {
args = [func, ...args];
func = arg0;
arg0 = 3;
}
for (let i = 1; i <= arg0; i++) {
try {
// eslint-disable-next-line no-await-in-loop
res = await func(...args);
} catch (e) {
if (i === arg0) throw e;
continue;
}
return res;
}
}
export function CallableInstance(property = '__call__') {
let func;
if (typeof property === 'function') func = property;
else func = this.constructor.prototype[property];
const apply = function __call__(...args) { return func.apply(apply, ...args); };
Object.setPrototypeOf(apply, this.constructor.prototype);
for (const p of Object.getOwnPropertyNames(func)) {
Object.defineProperty(apply, p, Object.getOwnPropertyDescriptor(func, p));
}
return apply;
}
CallableInstance.prototype = Object.create(Function.prototype);
export const htmlEncode = (str: string) => str.replace(/[&<>'"]/g,
(tag: string) => ({
'&': '&amp;',
+2
View File
@@ -254,6 +254,7 @@ export class ProblemMainHandler extends Handler {
for (const pid of pids) {
// eslint-disable-next-line no-await-in-loop
const pdoc = await problem.get(domainId, pid);
if (!pdoc) throw new ProblemNotFoundError(domainId, pid);
if (!this.user.own(pdoc, PERM.PERM_EDIT_PROBLEM_SELF)) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
// eslint-disable-next-line no-await-in-loop
await problem.edit(domainId, pid, { hidden: true });
@@ -266,6 +267,7 @@ export class ProblemMainHandler extends Handler {
for (const pid of pids) {
// eslint-disable-next-line no-await-in-loop
const pdoc = await problem.get(domainId, pid);
if (!pdoc) throw new ProblemNotFoundError(domainId, pid);
if (!this.user.own(pdoc, PERM.PERM_EDIT_PROBLEM_SELF)) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
// eslint-disable-next-line no-await-in-loop
await problem.edit(domainId, pid, { hidden: false });
+2 -2
View File
@@ -7,7 +7,7 @@ import { Dictionary } from 'lodash';
import moment from 'moment-timezone';
import Schema from 'schemastery';
import { LangConfig, parseLang } from '@hydrooj/common';
import { findFileSync, randomstring, retry } from '@hydrooj/utils';
import { findFileSync, randomstring } from '@hydrooj/utils';
import { Context } from '../context';
import { Setting as _Setting } from '../interface';
import { Logger } from '../logger';
@@ -386,7 +386,7 @@ export async function apply(ctx: Context) {
if (!setting.value) continue;
const current = await ctx.db.collection('system').findOne({ _id: setting.key });
if (!current || current.value == null || current.value === '') {
await retry(system.set, setting.key, setting.value);
await system.set(setting.key, setting.value);
}
}
try {