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
+22 -12

No files matched your search

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