84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
import path from 'node:path'
|
|
import fs from 'fs'
|
|
import {app, BrowserWindow, ipcMain, nativeTheme, shell} from 'electron'
|
|
import {fileURLToPath} from "node:url";
|
|
|
|
const __dirname = fileURLToPath(new URL("../", import.meta.url))
|
|
const createWindow = () => {
|
|
const win = new BrowserWindow({
|
|
width: 1550,
|
|
height: 900,
|
|
webPreferences: {
|
|
nodeIntegration: true,
|
|
preload: path.join(__dirname, '/electron/preload.mjs'),
|
|
spellcheck: false
|
|
},
|
|
icon: path.join(__dirname, 'dist/logo.ico'),
|
|
});
|
|
// win.webContents.openDevTools()
|
|
win.setMenu(null);
|
|
win.loadFile('dist/index.html');
|
|
|
|
// 使用默认浏览器打开链接
|
|
win.webContents.setWindowOpenHandler((details) => {
|
|
shell.openExternal(details.url)
|
|
return {action: "deny"}
|
|
})
|
|
}
|
|
|
|
app.whenReady().then(() => {
|
|
createWindow()
|
|
app.on('activate', () => {
|
|
if (BrowserWindow.getAllWindows().length === 0) createWindow()
|
|
})
|
|
})
|
|
|
|
app.on('window-all-closed', () => {
|
|
if (process.platform !== 'darwin') app.quit()
|
|
})
|
|
|
|
ipcMain.handle('get-file', (_event, fileName) => {
|
|
return new Promise((resolve, reject) => {
|
|
const filePath = path.join(app.getPath('userData'), fileName);
|
|
fs.readFile(filePath, {flag: 'r', encoding: 'utf-8'}, (err, data) => {
|
|
if (err) {
|
|
if (err.code === 'ENOENT') {
|
|
resolve('');
|
|
return;
|
|
}
|
|
reject()
|
|
return
|
|
}
|
|
resolve(data);
|
|
});
|
|
})
|
|
})
|
|
|
|
ipcMain.handle('upload-file', (_event, fileName, content) => {
|
|
return new Promise((resolve, reject) => {
|
|
const filePath = path.join(app.getPath('userData'), fileName);
|
|
try {
|
|
fs.writeFileSync(filePath, content);
|
|
resolve({status: true})
|
|
} catch (err) {
|
|
reject({status: 'error', message: err})
|
|
}
|
|
})
|
|
})
|
|
|
|
ipcMain.handle('delete-file', (_event, fileName) => {
|
|
return new Promise((resolve, reject) => {
|
|
const filePath = path.join(app.getPath('userData'), fileName);
|
|
fs.unlink(filePath, (err) => {
|
|
if (err) {
|
|
reject({status: 'error', message: err})
|
|
} else {
|
|
resolve({status: true})
|
|
}
|
|
});
|
|
})
|
|
})
|
|
|
|
ipcMain.handle('set-topic', (_event, topic) => {
|
|
nativeTheme.themeSource = topic
|
|
}) |