From 71dc7d99e7e69a8fd806268909a2c65e3d83b43c Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 17 Apr 2026 16:32:55 -0700 Subject: [PATCH] feat: allow kgone-server.json to override the kgone server base url and soundfont base url --- src/App.tsx | 18 +++++++++------ .../settings/sections/GeneralSettings.tsx | 23 +++++++++++++++++-- src/core/config/ConfigManager.ts | 17 +++++++++++++- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 5868f96..ba6fa2a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -60,15 +60,19 @@ function App() { // Initialize ConfigManager first to load config.json and user settings await ConfigManager.instance().initialize(); - // Check for kgone-server.txt (managed deployment override) + // Check for kgone-server.json (managed deployment override) try { - const kgoneServerResponse = await fetch(`${import.meta.env.BASE_URL}kgone-server.txt`); + const kgoneServerResponse = await fetch(`${import.meta.env.BASE_URL}kgone-server.json?ts=${Date.now()}`); const contentType = kgoneServerResponse.headers.get('Content-Type') ?? ''; - if (kgoneServerResponse.ok && contentType.includes('text/plain')) { - const url = (await kgoneServerResponse.text()).trim(); - if (url) { - ConfigManager.instance().setKGOneManagedByServer(url); - console.log('K.G.One: server-managed config loaded from kgone-server.txt, base URL:', url); + if (kgoneServerResponse.ok && contentType.includes('application/json')) { + const data = await kgoneServerResponse.json(); + if (data.base_url) { + ConfigManager.instance().setKGOneManagedByServer(data.base_url); + console.log('K.G.One: server-managed config loaded from kgone-server.json, base URL:', data.base_url); + } + if (data.soundfont) { + ConfigManager.instance().setSoundfontManagedByServer(data.soundfont); + console.log('Soundfont: server-managed config loaded from kgone-server.json, base URL:', data.soundfont); } } } catch { diff --git a/src/components/settings/sections/GeneralSettings.tsx b/src/components/settings/sections/GeneralSettings.tsx index b95e77f..664b9ba 100644 --- a/src/components/settings/sections/GeneralSettings.tsx +++ b/src/components/settings/sections/GeneralSettings.tsx @@ -21,6 +21,7 @@ const GeneralSettings: React.FC = () => { const [kgoneEnabled, setKgoneEnabled] = useState(false); const [kgoneBaseUrl, setKgoneBaseUrl] = useState(''); const [kgoneServerManaged, setKgoneServerManaged] = useState(false); + const [soundfontServerManaged, setSoundfontServerManaged] = useState(false); const configManager = ConfigManager.instance(); @@ -64,6 +65,7 @@ const GeneralSettings: React.FC = () => { setKgoneEnabled((configManager.get('general.kgone.enabled') as boolean) ?? false); setKgoneBaseUrl((configManager.get('general.kgone.base_url') as string) || ''); setKgoneServerManaged(configManager.isKGOneServerManaged()); + setSoundfontServerManaged(configManager.isSoundfontServerManaged()); }; loadConfig(); @@ -472,6 +474,12 @@ const GeneralSettings: React.FC = () => {

Soundfont Settings

+ {soundfontServerManaged && ( +
+ Soundfont configuration is managed by the server (kgone-server.json). Settings are read-only. +
+ )} +
@@ -494,7 +513,7 @@ const GeneralSettings: React.FC = () => { {kgoneServerManaged && (
- K.G.One configuration is managed by the server (kgone-server.txt). Settings are read-only. + K.G.One configuration is managed by the server (kgone-server.json). Settings are read-only.
)} diff --git a/src/core/config/ConfigManager.ts b/src/core/config/ConfigManager.ts index 115ce81..a906b93 100644 --- a/src/core/config/ConfigManager.ts +++ b/src/core/config/ConfigManager.ts @@ -105,6 +105,7 @@ export class ConfigManager { private storage: KGConfigStorage; private isInitialized: boolean = false; private kgoneServerManaged: boolean = false; + private soundfontServerManaged: boolean = false; private defaultConfig: AppConfig | null = null; private changeListeners: Set<(changedKeys: string[]) => void> = new Set(); @@ -558,7 +559,7 @@ export class ConfigManager { } /** - * Called at startup when kgone-server.txt is found. + * Called at startup when kgone-server.json contains a base_url field. * Forces enabled=true and overrides base_url in-memory only (not persisted). */ public setKGOneManagedByServer(url: string): void { @@ -572,6 +573,20 @@ export class ConfigManager { return this.kgoneServerManaged; } + /** + * Called at startup when kgone-server.json contains a soundfont field. + * Overrides general.soundfont.base_url in-memory only (not persisted). + */ + public setSoundfontManagedByServer(url: string): void { + this.soundfontServerManaged = true; + this.setInObject(this.config as Record, 'general.soundfont.base_url', url); + this.notifyChangeListeners(['general.soundfont.base_url']); + } + + public isSoundfontServerManaged(): boolean { + return this.soundfontServerManaged; + } + /** * Get the default configuration */