From 97fa71f23159cd554e30cb96342aa01b3141de82 Mon Sep 17 00:00:00 2001 From: Eder Moraes <54563944+edermcastro@users.noreply.github.com> Date: Fri, 20 Jun 2025 11:08:13 -0300 Subject: [PATCH] evita abertura de multiplas instancias --- main.js | 90 ++++++++++++++++++++++++++++------------------- package-lock.json | 15 +++++--- package.json | 3 +- 3 files changed, 67 insertions(+), 41 deletions(-) diff --git a/main.js b/main.js index 6d98f8d..f5d8fa2 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,5 @@ const { app, BrowserWindow, ipcMain, screen, net, dialog } = require('electron'); +// const { app: singleInstanceLock } = require('electron-single-instance'); const path = require('path'); const fs = require('fs'); @@ -22,6 +23,8 @@ const pusherUrl = 'autoatend.linco.work'; autoUpdater.autoDownload = false; autoUpdater.autoInstallOnAppQuit = true; +//impede que o app seja executado mais de uma vez +const gotTheLock = app.requestSingleInstanceLock(); // Função modificada para buscar dados da API async function readData() { @@ -275,48 +278,63 @@ if(pjson.isBuildNow){ } - -// Inicialização do aplicativo modificada para verificar autenticação -app.whenReady().then(async () => { - - // Verifica se o usuário já está autenticado - const token = await getAuthToken(); - - if (!token) { - // Se não estiver autenticado, mostra a tela de login - createLoginWindow(); - } else { - // Se já estiver autenticado, verifica se tem operador selecionado - // const operator = await getSelectedOperator(); - - if (!operator || operator === 'null' || operator === null || operator === undefined || operator === '') { - // Se não tiver operador selecionado, mostra a tela de seleção - createOperatorWindow(); - } else { - // Se já tiver operador, inicia normalmente - createFloatingWindow(); - createMainWindow(); - } +if (!gotTheLock) { + app.quit(); +} else { + app.on('second-instance', () => { + if (mainWin) { + if (mainWin.isMinimized()) { + mainWin.restore(); + } + mainWin.focus(); } - createUpdateWindow(); + }); - app.on('activate', () => { - // No macOS é comum recriar uma janela no aplicativo quando o - // ícone do dock é clicado e não há outras janelas abertas. - if (BrowserWindow.getAllWindows().length === 0) { - // Poderia recriar a janela principal aqui se necessário, - // mas como temos a flutuante, talvez não precise. - if (!floatingWin) createFloatingWindow(); - if (!mainWin) createMainWindow(); - if (!updateWin) createUpdateWindow(); + // Inicialização do aplicativo modificada para verificar autenticação + app.whenReady().then(async () => { + + // Verifica se o usuário já está autenticado + const token = await getAuthToken(); + + if (!token) { + // Se não estiver autenticado, mostra a tela de login + createLoginWindow(); + } else { + // Se já estiver autenticado, verifica se tem operador selecionado + // const operator = await getSelectedOperator(); + + if (!operator || operator === 'null' || operator === null || operator === undefined || operator === '') { + // Se não tiver operador selecionado, mostra a tela de seleção + createOperatorWindow(); + } else { + // Se já tiver operador, inicia normalmente + createFloatingWindow(); + createMainWindow(); + } } + createUpdateWindow(); + + app.on('activate', () => { + // No macOS é comum recriar uma janela no aplicativo quando o + // ícone do dock é clicado e não há outras janelas abertas. + if (BrowserWindow.getAllWindows().length === 0) { + // Poderia recriar a janela principal aqui se necessário, + // mas como temos a flutuante, talvez não precise. + if (!floatingWin) createFloatingWindow(); + if (!mainWin) createMainWindow(); + if (!updateWin) createUpdateWindow(); + } + }); + + if(pjson.isBuildNow){ + autoUpdater.checkForUpdates(); + } + }); - if(pjson.isBuildNow){ - autoUpdater.checkForUpdates(); - } +} + -}); // Função para verificar se já existe um operador selecionado async function getSelectedOperator() { diff --git a/package-lock.json b/package-lock.json index 057cd30..2df74e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { - "name": "electronjs", - "version": "1.0.0", + "name": "autoatendcolab", + "version": "1.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "electronjs", - "version": "1.0.0", + "name": "autoatendcolab", + "version": "1.0.7", "license": "ISC", "dependencies": { "@electron/remote": "^2.1.2", + "electron-single-instance": "^0.0.2", "electron-updater": "^6.6.2", "jquery": "^3.7.1" }, @@ -2609,6 +2610,12 @@ "chokidar": "^3.5.2" } }, + "node_modules/electron-single-instance": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/electron-single-instance/-/electron-single-instance-0.0.2.tgz", + "integrity": "sha512-HWZ0BsGpFRuUU+8Cpf0ecDHYOqptuUyjup62sYnkl19//DtysiTZzeIWO9YXdbow3JErti/Zyi2yHO2e0yn1ew==", + "license": "MIT" + }, "node_modules/electron-updater": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.6.2.tgz", diff --git a/package.json b/package.json index daeef72..aa398b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "autoatendcolab", - "version": "1.0.7", + "version": "1.0.8", "main": "main.js", "isBuildNow": true, "scripts": { @@ -38,6 +38,7 @@ "description": "Sistema auxiliar para colaboradores de autoatendimento", "dependencies": { "@electron/remote": "^2.1.2", + "electron-single-instance": "^0.0.2", "electron-updater": "^6.6.2", "jquery": "^3.7.1" },