From 1b66d3aa6daabe74015e95c49e51fcb72d3b287a Mon Sep 17 00:00:00 2001 From: shixiaohua Date: Fri, 5 Jan 2024 18:01:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=89=93=E5=BC=80=E7=9B=AE=E5=BD=95,?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=96=87=E4=BB=B6=E5=8F=8A=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 17 +-- src/comment/TopMenu.js | 252 ++++++++++++++++++++++------------------- 2 files changed, 137 insertions(+), 132 deletions(-) diff --git a/main.js b/main.js index 194d689..c079524 100644 --- a/main.js +++ b/main.js @@ -3,7 +3,7 @@ const { app,Menu, BrowserWindow , ipcMain } = require('electron') const path = require('path') const fs = require('fs') const https = require('https') -const template = require('./src/comment/TopMenu.js') +const {menuRebuild} = require('./src/comment/TopMenu.js') // electorn const createWindow = () => { // Create the browser window. @@ -17,24 +17,13 @@ const createWindow = () => { // 加载 index.html win.loadFile('index.html') // win.loadURL('http://localhost/show/sync?current=1&pageSize=5') - // 打开开发工具 win.webContents.openDevTools() - Menu.setApplicationMenu(Menu.buildFromTemplate(template.template)) + Menu.setApplicationMenu(Menu.buildFromTemplate(menuRebuild(win))) } const iconName = path.join(__dirname, 'iconForDragAndDrop.png') -// const icon = fs.createWriteStream(iconName) -// Create a new file to copy - you can also copy existing files. -// fs.writeFileSync(path.join(__dirname, 'drag-and-drop-1.md'), '# First file to test drag and drop') -// fs.writeFileSync(path.join(__dirname, 'drag-and-drop-2.md'), '# Second file to test drag and drop') - -// https.get('https://img.icons8.com/ios/452/drag-and-drop.png', (response) => { -// response.pipe(icon) -// }) - -// 这段程序将会在 Electron 结束初始化 -// 和创建浏览器窗口的时候调用 +// 这段程序将会在 Electron 结束初始化和创建浏览器窗口的时候调用 // 部分 API 在 ready 事件触发后才能使用。 app.whenReady().then(() => { // ipcMain.handle('ping', () => 'pong') diff --git a/src/comment/TopMenu.js b/src/comment/TopMenu.js index f26c1c4..d00ba1b 100644 --- a/src/comment/TopMenu.js +++ b/src/comment/TopMenu.js @@ -1,122 +1,138 @@ -const { app, Menu, shell} = require('electron') - +const { app, Menu, shell, dialog} = require('electron') +const {readdir} = require("node:fs/promises"); +const {stat} = require("fs/promises"); const isMac = process.platform === 'darwin' - -exports.template = [ - // { role: 'appMenu' } - ...(isMac - ? [{ - label: app.name, +exports.menuRebuild=(mainWindow)=> { + return template = [ + // { role: 'appMenu' } + ...(isMac + ? [{ + label: app.name, + submenu: [ + { role: 'about' }, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideOthers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' } + ] + }] + : []), + // { role: 'fileMenu' } + { + label: 'File', submenu: [ - { role: 'about' }, - { type: 'separator' }, - { role: 'services' }, - { type: 'separator' }, - { role: 'hide' }, - { role: 'hideOthers' }, - { role: 'unhide' }, - { type: 'separator' }, - { role: 'quit' } - ] - }] - : []), - // { role: 'fileMenu' } - { - label: 'File', - submenu: [ - {label:'打开目录', - click: async () => { - const { dialog } = require('electron') - dialog.showOpenDialog({ - properties: ['openDirectory'] - }).then(result => { - console.log(result.canceled) - // 不取消就发送目录 - if (!result.canceled) - console.log(result.filePaths) - }).catch(err => { - console.log(err) - }) - } - }, - isMac ? { role: 'close' } : { role: 'quit' }, - isMac ? { role: 'open' } : { role: 'open' } - ] - }, - // { role: 'editMenu' } - { - label: 'Edit', - submenu: [ - { role: 'undo' }, - { role: 'redo' }, - { type: 'separator' },// 分割线 - { role: 'cut' }, - { role: 'copy' }, - { role: 'paste' }, - ...(isMac - ? [ - { role: 'pasteAndMatchStyle' }, - { role: 'delete' }, - { role: 'selectAll' }, - { type: 'separator' }, - { - label: 'Speech', - submenu: [ - { role: 'startSpeaking' }, - { role: 'stopSpeaking' } - ] + {label:'打开目录', + click: async () => { + const { dialog } = require('electron') + dialog.showOpenDialog({ + properties: ['openDirectory'] + }).then(async result => { + console.log(result.canceled) + // 不取消就发送目录 + if (!result.canceled) { + console.log(result.filePaths) + const {readdir,stat} = require('fs/promises') + try { + const files = await readdir(result.filePaths[0]); + const fileStats = [] + for (let i = 0; i < files.length; i++) { + const state = await stat(result.filePaths+'/'+files[i]); + fileStats.push({'fileName': files[i], 'dir':state.isDirectory()}) + } + mainWindow.webContents.send('openDirectory', + {'fileDir':result.filePaths,'fileList':fileStats} + ) + } catch (err) { + console.error(err); + } + } + }).catch(err => { + console.log(err) + }) + } + }, + isMac ? { role: 'close' } : { role: 'quit' }, + ] + }, + // { role: 'editMenu' } + { + label: 'Edit', + submenu: [ + { role: 'undo' }, + { role: 'redo' }, + { type: 'separator' },// 分割线 + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + ...(isMac + ? [ + { role: 'pasteAndMatchStyle' }, + { role: 'delete' }, + { role: 'selectAll' }, + { type: 'separator' }, + { + label: 'Speech', + submenu: [ + { role: 'startSpeaking' }, + { role: 'stopSpeaking' } + ] + } + ] + : [ + { role: 'delete' }, + { type: 'separator' }, + { role: 'selectAll' } + ]) + ] + }, + // { role: 'viewMenu' } + { + label: 'View', + submenu: [ + { role: 'reload' }, + { role: 'forceReload' }, + { role: 'toggleDevTools' }, + { type: 'separator' }, + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'togglefullscreen' } + ] + }, + // { role: 'windowMenu' } + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + ...(isMac + ? [ + { type: 'separator' }, + { role: 'front' }, + { type: 'separator' }, + { role: 'window' } + ] + : [ + { role: 'close' } + ]) + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Learn More', + click: async () => { + const { shell } = require('electron') + await shell.openExternal('http://www.huaruyu.com') } - ] - : [ - { role: 'delete' }, - { type: 'separator' }, - { role: 'selectAll' } - ]) - ] - }, - // { role: 'viewMenu' } - { - label: 'View', - submenu: [ - { role: 'reload' }, - { role: 'forceReload' }, - { role: 'toggleDevTools' }, - { type: 'separator' }, - { role: 'resetZoom' }, - { role: 'zoomIn' }, - { role: 'zoomOut' }, - { type: 'separator' }, - { role: 'togglefullscreen' } - ] - }, - // { role: 'windowMenu' } - { - label: 'Window', - submenu: [ - { role: 'minimize' }, - { role: 'zoom' }, - ...(isMac - ? [ - { type: 'separator' }, - { role: 'front' }, - { type: 'separator' }, - { role: 'window' } - ] - : [ - { role: 'close' } - ]) - ] - }, - { - role: 'help', - submenu: [ - { - label: 'Learn More', - click: async () => { - const { shell } = require('electron') - await shell.openExternal('http://www.huaruyu.com') } - } - ] - } -] + ] + } + ]; +}