feat(settings): add support for mirroring settings to SD card if mounted
This commit is contained in:
parent
8d5de3f92f
commit
7ca7d478cc
|
|
@ -16,12 +16,14 @@ import {
|
|||
createFolder,
|
||||
getFileContents,
|
||||
putFileContents,
|
||||
stat,
|
||||
} from './webdav';
|
||||
|
||||
/** The canonical paths on the WebDAV server. */
|
||||
export const SETTINGS_PATH = '/.sys/config.json';
|
||||
export const DEVICES_PATH = '/.sys/devices.json';
|
||||
const SETTINGS_DIR = '/.sys';
|
||||
const SD_SYS_DIR = '/sd/.sys';
|
||||
|
||||
/**
|
||||
* How long to wait after the last change before writing to disk.
|
||||
|
|
@ -75,17 +77,29 @@ export async function readSettings(): Promise<SettingsConfig | null> {
|
|||
* indentation so the file is diff-friendly.
|
||||
*/
|
||||
export async function writeSettings(config: SettingsConfig): Promise<void> {
|
||||
try {
|
||||
await createFolder(SETTINGS_DIR, true);
|
||||
} catch {
|
||||
/* directory may already exist; ignore */
|
||||
}
|
||||
try { await createFolder(SETTINGS_DIR, true); } catch { /* exists */ }
|
||||
|
||||
const { iec, ...mainConfig } = config;
|
||||
const { devices: iecDevices, ...iecBusConfig } = (iec ?? {}) as any;
|
||||
const configJson = JSON.stringify({ ...mainConfig, iec: iecBusConfig }, null, 2) + '\n';
|
||||
const devicesJson = JSON.stringify({ iec: { devices: iecDevices } }, null, 2) + '\n';
|
||||
|
||||
await Promise.all([
|
||||
putFileContents(SETTINGS_PATH, JSON.stringify({ ...mainConfig, iec: iecBusConfig }, null, 2) + '\n'),
|
||||
putFileContents(DEVICES_PATH, JSON.stringify({ iec: { devices: iecDevices } }, null, 2) + '\n'),
|
||||
putFileContents(SETTINGS_PATH, configJson),
|
||||
putFileContents(DEVICES_PATH, devicesJson),
|
||||
]);
|
||||
|
||||
// Mirror to /sd/.sys/ if the SD card is mounted.
|
||||
try {
|
||||
const sdStat = await stat('/sd');
|
||||
if (sdStat) {
|
||||
try { await createFolder(SD_SYS_DIR, true); } catch { /* exists */ }
|
||||
await Promise.all([
|
||||
putFileContents(SD_SYS_DIR + '/config.json', configJson),
|
||||
putFileContents(SD_SYS_DIR + '/devices.json', devicesJson),
|
||||
]);
|
||||
}
|
||||
} catch { /* /sd unreachable — skip mirror */ }
|
||||
}
|
||||
|
||||
export type SaveStatus =
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user