evita abertura de multiplas instancias

This commit is contained in:
Eder Moraes 2025-06-20 11:08:13 -03:00
parent 8eed72c15b
commit 97fa71f231
3 changed files with 67 additions and 41 deletions

90
main.js
View File

@ -1,4 +1,5 @@
const { app, BrowserWindow, ipcMain, screen, net, dialog } = require('electron'); const { app, BrowserWindow, ipcMain, screen, net, dialog } = require('electron');
// const { app: singleInstanceLock } = require('electron-single-instance');
const path = require('path'); const path = require('path');
const fs = require('fs'); const fs = require('fs');
@ -22,6 +23,8 @@ const pusherUrl = 'autoatend.linco.work';
autoUpdater.autoDownload = false; autoUpdater.autoDownload = false;
autoUpdater.autoInstallOnAppQuit = true; 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 // Função modificada para buscar dados da API
async function readData() { async function readData() {
@ -275,48 +278,63 @@ if(pjson.isBuildNow){
} }
if (!gotTheLock) {
// Inicialização do aplicativo modificada para verificar autenticação app.quit();
app.whenReady().then(async () => { } else {
app.on('second-instance', () => {
// Verifica se o usuário já está autenticado if (mainWin) {
const token = await getAuthToken(); if (mainWin.isMinimized()) {
mainWin.restore();
if (!token) { }
// Se não estiver autenticado, mostra a tela de login mainWin.focus();
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', () => { // Inicialização do aplicativo modificada para verificar autenticação
// No macOS é comum recriar uma janela no aplicativo quando o app.whenReady().then(async () => {
// ícone do dock é clicado e não há outras janelas abertas.
if (BrowserWindow.getAllWindows().length === 0) { // Verifica se o usuário já está autenticado
// Poderia recriar a janela principal aqui se necessário, const token = await getAuthToken();
// mas como temos a flutuante, talvez não precise.
if (!floatingWin) createFloatingWindow(); if (!token) {
if (!mainWin) createMainWindow(); // Se não estiver autenticado, mostra a tela de login
if (!updateWin) createUpdateWindow(); 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 // Função para verificar se já existe um operador selecionado
async function getSelectedOperator() { async function getSelectedOperator() {

15
package-lock.json generated
View File

@ -1,15 +1,16 @@
{ {
"name": "electronjs", "name": "autoatendcolab",
"version": "1.0.0", "version": "1.0.7",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "electronjs", "name": "autoatendcolab",
"version": "1.0.0", "version": "1.0.7",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@electron/remote": "^2.1.2", "@electron/remote": "^2.1.2",
"electron-single-instance": "^0.0.2",
"electron-updater": "^6.6.2", "electron-updater": "^6.6.2",
"jquery": "^3.7.1" "jquery": "^3.7.1"
}, },
@ -2609,6 +2610,12 @@
"chokidar": "^3.5.2" "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": { "node_modules/electron-updater": {
"version": "6.6.2", "version": "6.6.2",
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.6.2.tgz", "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.6.2.tgz",

View File

@ -1,6 +1,6 @@
{ {
"name": "autoatendcolab", "name": "autoatendcolab",
"version": "1.0.7", "version": "1.0.8",
"main": "main.js", "main": "main.js",
"isBuildNow": true, "isBuildNow": true,
"scripts": { "scripts": {
@ -38,6 +38,7 @@
"description": "Sistema auxiliar para colaboradores de autoatendimento", "description": "Sistema auxiliar para colaboradores de autoatendimento",
"dependencies": { "dependencies": {
"@electron/remote": "^2.1.2", "@electron/remote": "^2.1.2",
"electron-single-instance": "^0.0.2",
"electron-updater": "^6.6.2", "electron-updater": "^6.6.2",
"jquery": "^3.7.1" "jquery": "^3.7.1"
}, },