From 76de9f2b9da4cc5243cb6bc3a59b10e22011a229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E9=9E=8B=E6=B2=A1=E5=8F=B7?= <308487730@qq.com> Date: Mon, 15 Nov 2021 20:00:13 +0800 Subject: [PATCH] chore: Use --- src/main/index.ts | 19 +++++++++++++++++-- src/renderer/src/main.tsx | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/main/index.ts b/src/main/index.ts index 9ee4228..adb6b95 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,5 +1,6 @@ import { join } from 'path' -import { app, BrowserWindow } from 'electron' +import { app, BrowserWindow, ipcMain } from 'electron' +import Store from 'electron-store' app.disableHardwareAcceleration() @@ -26,6 +27,7 @@ async function mainWin() { win.loadURL(url) win.maximize() + win.webContents.openDevTools() } } @@ -40,8 +42,21 @@ app.on('window-all-closed', () => { app.on('second-instance', () => { if (win) { - // someone tried to run a second instance, we should focus our window. + // Someone tried to run a second instance, we should focus our window. if (win.isMinimized()) win.restore() win.focus() } }) + +// ------------------------------------- + +/** + * Expose 'electron-store' to renderer through 'ipcMain.handle' + */ +const store = new Store +ipcMain.handle('electron-store', async (_evnet, methodSign: string, ...args: any[]) => { + if (typeof (store as any)[methodSign] === 'function') { + return (store as any)[methodSign](...args) + } + return (store as any)[methodSign] +}) diff --git a/src/renderer/src/main.tsx b/src/renderer/src/main.tsx index 6411087..c0aed70 100644 --- a/src/renderer/src/main.tsx +++ b/src/renderer/src/main.tsx @@ -3,8 +3,6 @@ import ReactDOM from 'react-dom' import './index.css' import App from './App' -console.log('contextBridge ->', window.bridge) - ReactDOM.render( @@ -14,3 +12,35 @@ ReactDOM.render( window.bridge.removeLoading() }, ) + +// ----------------------------------------------------------- + +console.log('contextBridge ->', window.bridge) + +// Use 'electron-store' +const store = { + async get(key: string) { + const { invoke } = window.bridge.ipcRenderer + let value = await invoke('electron-store', 'get', key) + try { + value = JSON.parse(value) + } finally { + return value + } + }, + async set(key: string, value: any) { + const { invoke } = window.bridge.ipcRenderer + let val = value + try { + if (value && typeof value === 'object') { + val = JSON.stringify(value) + } + } finally { + await invoke('electron-store', 'set', key, val) + } + }, +} + +await store.set('Date.now', Date.now()) +console.log('electron-store ->', 'Date.now:', await store.get('Date.now')) +console.log('electron-store ->', 'path:', await window.bridge.ipcRenderer.invoke('electron-store', 'path'))