104 lines
3.4 KiB
TypeScript
104 lines
3.4 KiB
TypeScript
import { Process } from '../../types'
|
|
import icon from '../../assets/icons/preferences-system.svg'
|
|
import { stringify } from 'js-ini'
|
|
const Settings: Process = {
|
|
config: {
|
|
name: 'Settings',
|
|
type: 'process',
|
|
icon,
|
|
targetVer: '2.0.0'
|
|
},
|
|
run: async process => {
|
|
const win = await process
|
|
.loadLibrary('lib/WindowManager')
|
|
.then((wm: any) => {
|
|
return wm.createWindow(
|
|
{
|
|
title: 'Settings',
|
|
icon,
|
|
width: 500,
|
|
height: 500
|
|
},
|
|
process
|
|
)
|
|
})
|
|
|
|
const { fs } = process
|
|
const HTML = await process.loadLibrary('lib/HTML')
|
|
|
|
const { Input, Button, Dropdown } = await process.loadLibrary('lib/Components')
|
|
|
|
const render = async (config: any): Promise<void> => {
|
|
win.content.innerHTML = ''
|
|
for (const item in config) {
|
|
let input = Input.new()
|
|
|
|
if (item === 'THEME_PRIMARY') {
|
|
const { extras } = JSON.parse(Buffer.from(await fs.readFile(`/etc/themes/${config.THEME as string}.theme`)).toString())
|
|
input = Dropdown.new(Object.keys(extras))
|
|
} else if (item === 'THEME') {
|
|
input = Dropdown.new((await fs.readdir('/etc/themes')).map((theme: string) => theme.replace('.theme', '')))
|
|
}
|
|
if (item === 'BACKGROUND') {
|
|
const { background } = JSON.parse(Buffer.from(await fs.readFile(`/etc/flow/${config.BACKGROUND as string}.BACKGROUND`)).toString())
|
|
document.cookie = "background=" + background + "; expires=Thu, 18 Dec 9999 12:00:00 UTC; path=/";
|
|
} else if (item === 'THEME') {
|
|
input = Dropdown.new((await fs.readdir('/etc/themes')).map((theme: string) => theme.replace('.theme', '')))
|
|
}
|
|
|
|
if (item === 'THEME_PRIMARY' || item === 'THEME') {
|
|
(input.elm as HTMLSelectElement).value = config[item]
|
|
} else {
|
|
input.attr({
|
|
value: config[item]
|
|
})
|
|
}
|
|
|
|
console.log(input.getValue())
|
|
|
|
new HTML('div')
|
|
.appendMany(
|
|
new HTML('label')
|
|
.style({
|
|
'text-transform': 'capitalize'
|
|
})
|
|
.text(`${item.toLowerCase().replaceAll('_', ' ')}:`),
|
|
new HTML('br'),
|
|
new HTML('div')
|
|
.style({
|
|
display: 'flex',
|
|
gap: '5px'
|
|
})
|
|
.appendMany(
|
|
input,
|
|
Button.new().text('Save').on('click', () => {
|
|
config[item] = input.getValue()
|
|
fs.writeFile('/etc/flow', stringify(config))
|
|
.then(() => {
|
|
document.dispatchEvent(
|
|
new CustomEvent('config_update', {
|
|
detail: {
|
|
config
|
|
}
|
|
})
|
|
)
|
|
if (item === 'THEME' || item === 'THEME_PRIMARY') {
|
|
document.dispatchEvent(new CustomEvent('theme_update', {}))
|
|
}
|
|
})
|
|
.catch(e => console.error(e))
|
|
})
|
|
)
|
|
)
|
|
.appendTo(win.content)
|
|
}
|
|
}
|
|
|
|
await render(process.kernel.config)
|
|
document.addEventListener('config_update', (e: CustomEvent) => {
|
|
render(e.detail.config).catch(e => console.error(e))
|
|
})
|
|
}
|
|
}
|
|
|
|
export default Settings
|