core: drop system/setting-loaded event

This commit is contained in:
undefined committed 2026-10-13 11:03:31 +00:00
1 parent 48c358c29c
commit 54ae550586
5 files changed
+44 -34

No files matched your search

+41 -29
View File
@@ -8,7 +8,7 @@ import moment from 'moment-timezone';
import Schema from 'schemastery';
import { LangConfig, parseLang } from '@hydrooj/common';
import { findFileSync, randomstring } from '@hydrooj/utils';
import { Context } from '../context';
import { Context, Service } from '../context';
import { Setting as _Setting } from '../interface';
import { Logger } from '../logger';
import * as builtin from './builtin';
@@ -378,42 +378,54 @@ SystemSetting(
export const langs: Record<string, LangConfig> = {};
export const inject = ['db'];
export async function apply(ctx: Context) {
logger.info('Ensuring settings');
for (const lang in global.Hydro.locales) {
if (!global.Hydro.locales[lang].__interface) continue;
langRange[lang] = global.Hydro.locales[lang].__langname;
export class SettingModelService extends Service {
static inject = ['db', 'model:system'];
constructor(ctx: Context) {
super(ctx, 'model:setting');
}
const system = global.Hydro.model.system;
for (const setting of SYSTEM_SETTINGS) {
if (!setting.value) continue;
const current = await ctx.db.collection('system').findOne({ _id: setting.key });
if (!current || current.value == null || current.value === '') {
await system.set(setting.key, setting.value);
async [Service.init]() {
logger.info('Ensuring settings');
for (const lang in global.Hydro.locales) {
if (!global.Hydro.locales[lang].__interface) continue;
langRange[lang] = global.Hydro.locales[lang].__langname;
}
const system = this.ctx['model:system'];
for (const setting of SYSTEM_SETTINGS) {
if (!setting.value) continue;
const current = await this.ctx.db.collection('system').findOne({ _id: setting.key });
if (!current || current.value == null || current.value === '') {
await system.set(setting.key, setting.value);
}
}
try {
Object.assign(langs, parseLang(system.get('hydrooj.langs')));
const range = {};
for (const key in langs) range[key] = langs[key].display;
LangSettingNode.range = range;
ServerLangSettingNode.range = range;
} catch (e) { /* Ignore */ }
return this.ctx.on('system/setting', (args) => {
if (!args.hydrooj?.langs) return;
Object.assign(langs, parseLang(args.hydrooj.langs));
const range = {};
for (const key in langs) range[key] = langs[key].display;
LangSettingNode.range = range;
ServerLangSettingNode.range = range;
});
}
try {
Object.assign(langs, parseLang(system.get('hydrooj.langs')));
const range = {};
for (const key in langs) range[key] = langs[key].display;
LangSettingNode.range = range;
ServerLangSettingNode.range = range;
} catch (e) { /* Ignore */ }
ctx.on('system/setting', (args) => {
if (!args.hydrooj?.langs) return;
Object.assign(langs, parseLang(args.hydrooj.langs));
const range = {};
for (const key in langs) range[key] = langs[key].display;
LangSettingNode.range = range;
ServerLangSettingNode.range = range;
});
ctx.emit('system/setting-loaded');
}
export const inject = ['db'];
export function apply(ctx: Context) {
ctx.plugin(SettingModelService);
}
global.Hydro.model.setting = {
apply,
inject,
SettingModelService,
Setting,
PreferenceSetting,
-1
View File
@@ -35,7 +35,6 @@ export interface EventMap {
'database/config': () => VoidReturn;
'system/setting': (args: Record<string, any>) => VoidReturn;
'system/setting-loaded': () => VoidReturn;
'bus/broadcast': (event: keyof EventMap, payload: any, trace?: string) => VoidReturn;
'monitor/update': (type: 'server' | 'judge', $set: any) => VoidReturn;
'monitor/collect': (info: any) => VoidReturn;
+1 -1
View File
@@ -174,7 +174,7 @@ export async function apply(ctx: Context) {
debouncedBuildUI();
};
ctx.on('system/setting', () => triggerHotUpdate());
ctx.on('system/setting-loaded', () => triggerHotUpdate());
ctx.inject(['model:setting'], () => triggerHotUpdate());
ctx.on('app/watch/change', triggerHotUpdate);
ctx.on('app/watch/unlink', triggerHotUpdate);
ctx.on('app/i18n/update', debouncedBuildUI);
+1 -2
View File
@@ -286,7 +286,6 @@ export async function apply(ctx: Context) {
await buildVersions();
});
ctx.on('app/i18n/update', buildI18n);
ctx.on('system/setting-loaded', buildCodeLangs);
ctx.on('system/setting', buildCodeLangs);
const vite = await createServer({
@@ -394,8 +393,8 @@ export async function apply(ctx: Context) {
};
ctx.on('app/watch/change', triggerHotUpdate);
ctx.on('app/watch/unlink', triggerHotUpdate);
ctx.on('system/setting-loaded', buildCodeLangs);
ctx.on('system/setting', debouncedBuild);
ctx.on('app/i18n/update', debouncedBuild);
}
ctx.inject(['model:setting'], buildCodeLangs);
}
+1 -1
View File
@@ -297,7 +297,7 @@ export async function apply(ctx: Context) {
},
]);
});
ctx.inject(['vjudge'], async (c) => {
ctx.inject(['vjudge', 'model:setting'], async (c) => {
for (const [k, v] of Object.entries(providers)) {
if (!SystemModel.get(`vjudge.builtin-${k}-disable`)) c.vjudge.addProvider(k, v);
}