2026-01-06 21:31:04 +02:00
|
|
|
import type { SettingsAPI, SettingsLoadResult, SettingsPayload } from '@openchamber/ui/lib/api/types';
|
2026-06-02 00:43:05 +03:00
|
|
|
import { sendBridgeMessage } from './bridge';
|
2025-12-13 16:34:17 +02:00
|
|
|
|
|
|
|
|
const sanitizePayload = (data: unknown): SettingsPayload => {
|
|
|
|
|
if (!data || typeof data !== 'object') {
|
|
|
|
|
return {};
|
|
|
|
|
}
|
|
|
|
|
return data as SettingsPayload;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const createVSCodeSettingsAPI = (): SettingsAPI => ({
|
|
|
|
|
async load(): Promise<SettingsLoadResult> {
|
2026-06-02 00:43:05 +03:00
|
|
|
try {
|
|
|
|
|
const payload = sanitizePayload(await sendBridgeMessage('api:config/settings:get'));
|
|
|
|
|
return {
|
|
|
|
|
settings: {
|
|
|
|
|
...payload,
|
|
|
|
|
// Override with VS Code settings
|
|
|
|
|
lastDirectory: window.__VSCODE_CONFIG__?.workspaceFolder || payload.lastDirectory || '',
|
|
|
|
|
},
|
|
|
|
|
source: 'web',
|
|
|
|
|
};
|
|
|
|
|
} catch {
|
2025-12-13 16:34:17 +02:00
|
|
|
// Fallback to VS Code config
|
|
|
|
|
return {
|
|
|
|
|
settings: {
|
|
|
|
|
themeVariant: window.__VSCODE_CONFIG__?.theme === 'light' ? 'light' : 'dark',
|
|
|
|
|
lastDirectory: window.__VSCODE_CONFIG__?.workspaceFolder || '',
|
|
|
|
|
},
|
|
|
|
|
source: 'web',
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
async save(changes: Partial<SettingsPayload>): Promise<SettingsPayload> {
|
2026-06-02 00:43:05 +03:00
|
|
|
return sanitizePayload(await sendBridgeMessage('api:config/settings:save', changes));
|
2025-12-13 16:34:17 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
async restartOpenCode(): Promise<{ restarted: boolean }> {
|
2026-06-02 00:43:05 +03:00
|
|
|
await sendBridgeMessage('api:config/reload');
|
2025-12-13 16:34:17 +02:00
|
|
|
return { restarted: true };
|
|
|
|
|
},
|
|
|
|
|
});
|