import { useCallback, useEffect, useState } from 'react' type NvidiaDriver = { exist: boolean version: string } export type AppSettings = { run_mode: 'cpu' | 'gpu' | undefined notify: boolean gpus_in_use: string[] vulkan: boolean gpus: string[] nvidia_driver: NvidiaDriver cuda: NvidiaDriver } export const useSettings = () => { const [settings, setSettings] = useState() useEffect(() => { readSettings().then((settings) => setSettings(settings as AppSettings)) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const readSettings = useCallback(async () => { // if (!window?.core?.api) { // return // } // const settingsFile = await joinPath(['file://settings', 'settings.json']) // if (await fs.existsSync(settingsFile)) { // const settings = await fs.readFileSync(settingsFile, 'utf-8') // return typeof settings === 'object' ? settings : JSON.parse(settings) // } return {} }, []) const saveSettings = async ({ runMode, notify, gpusInUse, vulkan, }: { runMode?: string | undefined notify?: boolean | undefined gpusInUse?: string[] | undefined vulkan?: boolean | undefined }) => { console.log('saveSettings', runMode, notify, gpusInUse, vulkan) // const settingsFile = await joinPath(['file://settings', 'settings.json']) // const settings = await readSettings() // if (runMode != null) settings.run_mode = runMode // if (notify != null) settings.notify = notify // if (gpusInUse != null) settings.gpus_in_use = gpusInUse // if (vulkan != null) { // settings.vulkan = vulkan // // GPU enabled, set run_mode to 'gpu' // if (settings.vulkan === true) { // settings.run_mode = 'gpu' // } else { // settings.run_mode = 'cpu' // } // } // await fs.writeFileSync(settingsFile, JSON.stringify(settings)) } return { readSettings, saveSettings, settings, } }