core: small enhancements

This commit is contained in:
undefined committed 2022-11-08 00:25:04 +08:00
1 parent 50b838d21d
commit d7908aaff6
5 files changed
+24 -8

No files matched your search

+2 -1
View File
@@ -2,7 +2,7 @@
import decodeHTML from 'decode-html';
import xml2js from 'xml2js';
import {
_, AdmZip, buildContent, ContentNode, Context, FileTooLargeError, fs,
_, AdmZip, BadRequestError, buildContent, ContentNode, Context, FileTooLargeError, fs,
Handler, PERM, ProblemConfigFile, ProblemModel, SolutionModel, ValidationError,
} from 'hydrooj';
@@ -12,6 +12,7 @@ class FpsProblemImportHandler extends Handler {
}
async run(domainId: string, result: any) {
if (!result?.fps) throw new BadRequestError('Selected file is not a valid FPS problemset.');
for (const p of result.fps.item) {
const content: ContentNode[] = [];
if (p.description?.[0]) {
+1 -1
View File
@@ -44,7 +44,7 @@ langs:
c:
compile: /usr/bin/gcc -Wall --std=c99 -o foo foo.c -lm
highlight: c
monaco: cpp
monaco: c
display: C
cc:
compile: /usr/bin/g++ -Wall -std=c++14 -o foo foo.cc -lm
+2 -3
View File
@@ -648,10 +648,9 @@ export class ProblemEditHandler extends ProblemManageHandler {
) {
if (newPid !== this.pdoc.pid && await problem.get(domainId, newPid)) throw new BadRequestError('new pid exists');
const $update: Partial<ProblemDoc> = {
title, content, pid: newPid, hidden, assign, tag: tag ?? [], difficulty,
title, content, pid: newPid, hidden, assign, tag: tag ?? [], difficulty, html: false,
};
let pdoc = await problem.get(domainId, pid);
pdoc = await problem.edit(domainId, pdoc.docId, $update);
const pdoc = await problem.edit(domainId, this.pdoc.docId, $update);
this.response.redirect = this.url('problem_detail', { pid: newPid || pdoc.docId });
}
}
+9 -3
View File
@@ -58,15 +58,21 @@ function load(data: Record<string, Record<string, string>>) {
export = load;
function collect(lang: string) {
const s = translations[lang];
if (!(s instanceof Array)) return {};
const result = {};
for (let i = s.length - 1; i >= 0; i--) Object.assign(result, s[i]);
return result;
}
global.Hydro.locales = new Proxy(translations, {
get(self, lang: string) {
if (!self[lang]) return {};
return new Proxy(self[lang], {
get(s, key) {
if (typeof key === 'string') return app.i18n.get(key, lang);
const result = {};
for (let i = s.length - 1; i >= 0; i--) Object.assign(result, s[i]);
return result;
return Object.assign(collect(lang.split('_')[0]), collect(lang));
},
has(s, key: string) {
return !!s.find((i) => !!i[key]);
+10
View File
@@ -3,6 +3,14 @@ import {
} from 'prom-client';
import { Context, db } from 'hydrooj';
declare module 'hydrooj' {
interface Context {
metrics: Registry;
}
}
Context.service('metrics');
export function createRegistry(ctx: Context) {
const registry = new Registry();
@@ -61,5 +69,7 @@ export function createRegistry(ctx: Context) {
});
collectDefaultMetrics({ register: registry });
ctx.metrics = registry;
return registry;
}