From df37ed8583a2565f2752c4314ff9e35b6a34fb72 Mon Sep 17 00:00:00 2001 From: Murilo Polese Date: Wed, 17 Apr 2024 12:25:58 +0200 Subject: [PATCH 1/2] Initializing variables --- backend/helpers.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/helpers.js b/backend/helpers.js index 427d360..0976293 100644 --- a/backend/helpers.js +++ b/backend/helpers.js @@ -4,12 +4,12 @@ const path = require('path') async function openFolderDialog(win) { // https://stackoverflow.com/questions/46027287/electron-open-folder-dialog - let dir = await dialog.showOpenDialog(win, { properties: [ 'openDirectory' ] }) + const dir = await dialog.showOpenDialog(win, { properties: [ 'openDirectory' ] }) return dir.filePaths[0] || null } function listFolder(folder) { - files = fs.readdirSync(path.resolve(folder)) + let files = fs.readdirSync(path.resolve(folder)) // Filter out directories files = files.filter(f => { let filePath = path.resolve(folder, f) @@ -38,7 +38,7 @@ function ilistFolder(folder) { function getAllFiles(dirPath, arrayOfFiles) { // https://coderrocketfuel.com/article/recursively-list-all-the-files-in-a-directory-using-node-js - files = ilistFolder(dirPath) + let files = ilistFolder(dirPath) arrayOfFiles = arrayOfFiles || [] files.forEach(function(file) { const p = path.join(dirPath, file.path) From ba3241d3ca0c86f34758985ee629307c0c6663d1 Mon Sep 17 00:00:00 2001 From: Murilo Polese Date: Wed, 17 Apr 2024 12:26:37 +0200 Subject: [PATCH 2/2] Electron will wait for UI to confirm close --- backend/ipc.js | 13 ++++++++++++- index.js | 10 ++++++++-- preload.js | 5 ++++- ui/arduino/store.js | 9 +++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/backend/ipc.js b/backend/ipc.js index c97daba..b1133b4 100644 --- a/backend/ipc.js +++ b/backend/ipc.js @@ -6,7 +6,7 @@ const { getAllFiles } = require('./helpers.js') -module.exports = function registerIPCHandlers(win, ipcMain) { +module.exports = function registerIPCHandlers(win, ipcMain, app) { ipcMain.handle('open-folder', async (event) => { console.log('ipcMain', 'open-folder') const folder = await openFolderDialog(win) @@ -107,4 +107,15 @@ module.exports = function registerIPCHandlers(win, ipcMain) { win.setMinimumSize(minWidth, minHeight) }) + + ipcMain.handle('confirm-close', () => { + console.log('ipcMain', 'confirm-close') + app.exit() + }) + + win.on('close', (event) => { + console.log('BrowserWindow', 'close') + event.preventDefault() + win.webContents.send('check-before-close') + }) } diff --git a/index.js b/index.js index 2992967..3f01633 100644 --- a/index.js +++ b/index.js @@ -23,11 +23,17 @@ function createWindow () { // and load the index.html of the app. win.loadFile('ui/arduino/index.html') - registerIPCHandlers(win, ipcMain) + registerIPCHandlers(win, ipcMain, app) registerMenu(win) + + app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) createWindow() + }) + // app.on('window-all-closed', () => { + // if (process.platform !== 'darwin') app.quit() + // }) } // TODO: Loading splash screen - app.whenReady().then(createWindow) diff --git a/preload.js b/preload.js index d7b24e8..cce145f 100644 --- a/preload.js +++ b/preload.js @@ -151,9 +151,12 @@ const Disk = { const Window = { setWindowSize: (minWidth, minHeight) => { ipcRenderer.invoke('set-window-size', minWidth, minHeight) - } + }, + beforeClose: (callback) => ipcRenderer.on('check-before-close', callback), + confirmClose: () => ipcRenderer.invoke('confirm-close') } + contextBridge.exposeInMainWorld('BridgeSerial', Serial) contextBridge.exposeInMainWorld('BridgeDisk', Disk) contextBridge.exposeInMainWorld('BridgeWindow', Window) diff --git a/ui/arduino/store.js b/ui/arduino/store.js index 80656a5..6d965e7 100644 --- a/ui/arduino/store.js +++ b/ui/arduino/store.js @@ -1303,6 +1303,15 @@ async function store(state, emitter) { emitter.emit('render') }) + win.beforeClose(async () => { + const hasChanges = !!state.openFiles.find(f => f.parentFolder && f.hasChanges) + if (hasChanges) { + const response = await confirm('You may have unsaved changes. Are you sure you want to proceed?', 'Yes', 'Cancel') + if (!response) return false + } + await win.confirmClose() + }) + function createFile(args) { const { source, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy