import { ipcMain, nativeTheme, safeStorage } from 'electron'; import Store from 'electron-store'; import type { TitleTheme } from '/@/renderer/types'; export const store = new Store(); ipcMain.handle('settings-get', (_event, data: { property: string }) => { return store.get(`${data.property}`); }); ipcMain.on('settings-set', (__event, data: { property: string; value: any }) => { store.set(`${data.property}`, data.value); }); ipcMain.handle('password-get', (_event, server: string): string | null => { if (safeStorage.isEncryptionAvailable()) { const servers = store.get('server') as Record | undefined; if (!servers) { return null; } const encrypted = servers[server]; if (!encrypted) return null; const decrypted = safeStorage.decryptString(Buffer.from(encrypted, 'hex')); return decrypted; } return null; }); ipcMain.on('password-remove', (_event, server: string) => { const passwords = store.get('server', {}) as Record; if (server in passwords) { delete passwords[server]; } store.set({ server: passwords }); }); ipcMain.handle('password-set', (_event, password: string, server: string) => { if (safeStorage.isEncryptionAvailable()) { const encrypted = safeStorage.encryptString(password); const passwords = store.get('server', {}) as Record; passwords[server] = encrypted.toString('hex'); store.set({ server: passwords }); return true; } return false; }); ipcMain.on('theme-set', (_event, theme: TitleTheme) => { store.set('theme', theme); nativeTheme.themeSource = theme; });