correção para o sistema de atualização
This commit is contained in:
parent
34a4d5a681
commit
e3c741d7e0
84
main.js
84
main.js
|
|
@ -2,18 +2,23 @@ const { app, BrowserWindow, ipcMain, screen, net } = require('electron');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
const { autoUpdater } = require('electron-updater');
|
const { autoUpdater, AppUpdater } = require('electron-updater');
|
||||||
const pjson = require(path.join(__dirname,'','package.json'));
|
const pjson = require(path.join(__dirname,'','package.json'));
|
||||||
|
|
||||||
let floatingWin;
|
let floatingWin;
|
||||||
let mainWin;
|
let mainWin;
|
||||||
let loginWin;
|
let loginWin;
|
||||||
let operatorWin;
|
let operatorWin;
|
||||||
|
let updateWin;
|
||||||
|
|
||||||
const dataPath = path.join(__dirname, 'data.json'); // Caminho para o JSON (backup local)
|
const dataPath = path.join(__dirname, 'data.json'); // Caminho para o JSON (backup local)
|
||||||
const apiUrl = 'https://autoatend.linco.work/api/v1/';
|
const apiUrl = 'https://autoatend.linco.work/api/v1/';
|
||||||
|
|
||||||
const updUrl = 'https://autoatend.linco.work/public/aa_upd/';
|
|
||||||
autoUpdater.setFeedURL(updUrl);
|
autoUpdater.autoDownload = false;
|
||||||
|
autoUpdater.autoInstallOnAppQuit = true;
|
||||||
|
// autoUpdater.autoDownloadOnStartup = true;
|
||||||
|
|
||||||
|
|
||||||
if(!pjson.isBuildNow){
|
if(!pjson.isBuildNow){
|
||||||
require('electron-reload')(__dirname,{
|
require('electron-reload')(__dirname,{
|
||||||
|
|
@ -127,6 +132,29 @@ function createOperatorWindow() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createUpdateWindow() {
|
||||||
|
updateWin = new BrowserWindow({
|
||||||
|
width: 600,
|
||||||
|
height: 300,
|
||||||
|
show: false, // Inicia oculta
|
||||||
|
frame: true,
|
||||||
|
autoHideMenuBar: true, // Oculta a barra de menus
|
||||||
|
menuBarVisible: false, // Garante que a barra de menus começa
|
||||||
|
webPreferences: {
|
||||||
|
preload: path.join(__dirname, 'preload.js'),
|
||||||
|
contextIsolation: true,
|
||||||
|
nodeIntegration: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
updateWin.loadFile('update.html');
|
||||||
|
|
||||||
|
updateWin.on('closed', () => {
|
||||||
|
updateWin = null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function createFloatingWindow() {
|
function createFloatingWindow() {
|
||||||
const primaryDisplay = screen.getPrimaryDisplay();
|
const primaryDisplay = screen.getPrimaryDisplay();
|
||||||
const { width: screenWidth, height: screenHeight } = primaryDisplay.workAreaSize;
|
const { width: screenWidth, height: screenHeight } = primaryDisplay.workAreaSize;
|
||||||
|
|
@ -207,24 +235,26 @@ function createMainWindow() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function verifyUpdates(){
|
|
||||||
|
if(pjson.isBuildNow){
|
||||||
|
autoUpdater.on('update-available', () => {
|
||||||
|
let pth = autoUpdater.downloadUpdate();
|
||||||
|
updateWin.show(); updateWin.focus();
|
||||||
|
updateWin.webContents.send('update_message',`Uma nova versão está dispinível.`);
|
||||||
|
})
|
||||||
autoUpdater.on('download-progress',(obj) => {
|
autoUpdater.on('download-progress',(obj) => {
|
||||||
mainWin.webContents.send('update_version',`Estamos baixando uma nova atualização: ${obj.percent.toFixed(2)}%`);
|
updateWin.webContents.send('update_message',`Estamos baixando uma nova atualização.`);
|
||||||
});
|
});
|
||||||
autoUpdater.on('update-downloaded',(obj) => {
|
autoUpdater.on('update-downloaded',(obj) => {
|
||||||
mainWin.webContents.send('update_version',`Atualização concluída: ${obj.percent.toFixed(2)}%`);
|
updateWin.webContents.send('update_message',`Atualização concluída. Aguarde!`);
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
autoUpdater.quitAndInstall();
|
autoUpdater.quitAndInstall();
|
||||||
},5000);
|
},5000);
|
||||||
});
|
});
|
||||||
autoUpdater.on('update-available', () => {
|
|
||||||
mainWin.webContents.send('update_version',`Uma nova versão está dispinível.`);
|
|
||||||
})
|
|
||||||
autoUpdater.on('error',err => {
|
autoUpdater.on('error',err => {
|
||||||
mainWin.webContents.send('error',err);
|
updateWin.webContents.send('update_message',err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
verifyUpdates();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -239,7 +269,7 @@ app.whenReady().then(async () => {
|
||||||
createLoginWindow();
|
createLoginWindow();
|
||||||
} else {
|
} else {
|
||||||
// Se já estiver autenticado, verifica se tem operador selecionado
|
// Se já estiver autenticado, verifica se tem operador selecionado
|
||||||
const operator = await getSelectedOperator();
|
// const operator = await getSelectedOperator();
|
||||||
|
|
||||||
if (!operator || operator === 'null' || operator === null || operator === undefined || operator === '') {
|
if (!operator || operator === 'null' || operator === null || operator === undefined || operator === '') {
|
||||||
// Se não tiver operador selecionado, mostra a tela de seleção
|
// Se não tiver operador selecionado, mostra a tela de seleção
|
||||||
|
|
@ -249,8 +279,9 @@ app.whenReady().then(async () => {
|
||||||
createFloatingWindow();
|
createFloatingWindow();
|
||||||
createMainWindow();
|
createMainWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
createUpdateWindow();
|
||||||
|
|
||||||
app.on('activate', () => {
|
app.on('activate', () => {
|
||||||
// No macOS é comum recriar uma janela no aplicativo quando o
|
// No macOS é comum recriar uma janela no aplicativo quando o
|
||||||
|
|
@ -260,8 +291,14 @@ app.whenReady().then(async () => {
|
||||||
// mas como temos a flutuante, talvez não precise.
|
// mas como temos a flutuante, talvez não precise.
|
||||||
if (!floatingWin) createFloatingWindow();
|
if (!floatingWin) createFloatingWindow();
|
||||||
if (!mainWin) createMainWindow();
|
if (!mainWin) createMainWindow();
|
||||||
|
if (!updateWin) createUpdateWindow();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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
|
||||||
|
|
@ -306,6 +343,24 @@ async function getSelectedOperatorId() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ipcMain.on('update_version', async (event, arg) => {
|
||||||
|
if(updateWin){
|
||||||
|
if(!updateWin.isVisible()){
|
||||||
|
updateWin.show();
|
||||||
|
updateWin.focus();
|
||||||
|
}else{
|
||||||
|
updateWin.focus();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
createUpdateWindow();
|
||||||
|
updateWin.webContents.on('did-finish-load', () => {
|
||||||
|
updateWin.show();
|
||||||
|
updateWin.focus();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Ouvir pedido para obter contagem (ex: se o JSON for atualizado)
|
// Ouvir pedido para obter contagem (ex: se o JSON for atualizado)
|
||||||
ipcMain.handle('get-count', async () => {
|
ipcMain.handle('get-count', async () => {
|
||||||
const data = readData();
|
const data = readData();
|
||||||
|
|
@ -566,6 +621,7 @@ ipcMain.on('select-operator', async (event, operator) => {
|
||||||
operatorWin.close();
|
operatorWin.close();
|
||||||
createFloatingWindow();
|
createFloatingWindow();
|
||||||
createMainWindow();
|
createMainWindow();
|
||||||
|
createUpdateWindow();
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
event.reply('operator-response', {
|
event.reply('operator-response', {
|
||||||
|
|
@ -685,6 +741,8 @@ ipcMain.on('token-exists', async () => {
|
||||||
createFloatingWindow();
|
createFloatingWindow();
|
||||||
createMainWindow();
|
createMainWindow();
|
||||||
}
|
}
|
||||||
|
//TODO sempre que já existir um token ele checa por novas atualizações
|
||||||
|
createUpdateWindow();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body class="operator-page">
|
<body class="operator-page">
|
||||||
<div class="operator-container">
|
<div class="operator-container">
|
||||||
|
<h5>App Version: <span id="version"></span></h5>
|
||||||
<h1>Selecione o Operador</h1>
|
<h1>Selecione o Operador</h1>
|
||||||
<div id="error-message" class="error-message"></div>
|
<div id="error-message" class="error-message"></div>
|
||||||
|
|
||||||
|
|
|
||||||
23
preload.js
23
preload.js
|
|
@ -6,15 +6,18 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
||||||
iniciaAtendimento: (itemId) => ipcRenderer.send('iniciar-atendimento', itemId),
|
iniciaAtendimento: (itemId) => ipcRenderer.send('iniciar-atendimento', itemId),
|
||||||
|
|
||||||
logoutApp: () => ipcRenderer.send('logout'),
|
logoutApp: () => ipcRenderer.send('logout'),
|
||||||
saveObservation: (data) => ipcRenderer.send('save-observation', data), // data = { itemId, observation }
|
saveObservation: (data) => ipcRenderer.send('save-observation', data),
|
||||||
|
|
||||||
|
|
||||||
|
updVersion: (callback) => ipcRenderer.on('update_version',(_event,arg) => callback(arg)),
|
||||||
|
updMessage: (callback) => ipcRenderer.on('update_message', (_event,data) => callback(data)),
|
||||||
|
updPercent: (callback) => ipcRenderer.on('update_percent', (_event,data) => callback(data)),
|
||||||
|
atualVersion: (callback) => ipcRenderer.on('atual_version', (_event,data) => callback(data)),
|
||||||
|
updNVersion: (callback) => ipcRenderer.on('update_new_version', (_event,data) => callback(data)),
|
||||||
|
|
||||||
updAvailable: () => ipcRenderer.on('update-available',(event,arg)=>{
|
// updateMessage: (data) => ipcRenderer.send('update_message', data),
|
||||||
console.log(arg);
|
// updPercent: (data) => ipcRenderer.send('update_percent', data),
|
||||||
}),
|
// atualVersion: (data) => ipcRenderer.send('atual_version', data),
|
||||||
currVersion: () => ipcRenderer.on('current_version',(event,arg)=>{
|
// updNVersion: (data) => ipcRenderer.send('update_new_version', data),
|
||||||
console.log('Versão atual = ' + arg);
|
|
||||||
}),
|
|
||||||
updError: () => ipcRenderer.on('error',(event,arg)=>{
|
|
||||||
console.log('error = ' + arg);
|
|
||||||
}),
|
|
||||||
});
|
});
|
||||||
|
|
@ -22,7 +22,7 @@ let selectedItemName = '';
|
||||||
//chama o proximo da fila ao abrir a janela de atendimentos
|
//chama o proximo da fila ao abrir a janela de atendimentos
|
||||||
window.electronAPI.selectAtendID((data)=>{
|
window.electronAPI.selectAtendID((data)=>{
|
||||||
selectedItemId = data.id;
|
selectedItemId = data.id;
|
||||||
queueNumber.innerHTML = data ? 'Chamando: '+data.senhaGen + ' - '+ data.clientName.toUpperCase() + ' - ' + data.descricaoServico.toUpperCase() : 'Ninguem aguardando atendimento';
|
queueNumber.innerHTML = data ? 'Chamando: '+ /*data.senhaGen + ' - '+*/ data.clientName.toUpperCase() + ' - ' + data.descricaoServico.toUpperCase() : 'Ninguem aguardando atendimento';
|
||||||
});
|
});
|
||||||
|
|
||||||
// Função para popular a lista de itens
|
// Função para popular a lista de itens
|
||||||
|
|
@ -46,7 +46,7 @@ function populateList() {
|
||||||
selectedItemId = itemToProcess.id;
|
selectedItemId = itemToProcess.id;
|
||||||
selectedItemName = itemToProcess.clientName;
|
selectedItemName = itemToProcess.clientName;
|
||||||
const li = document.createElement('li');
|
const li = document.createElement('li');
|
||||||
li.textContent = `${itemToProcess.senhaGen}: ${itemToProcess.clientName.toUpperCase()} - ${itemToProcess.attendanceType.toUpperCase()} - ${itemToProcess.descricaoServico.toUpperCase()}`;
|
li.textContent = /*${itemToProcess.senhaGen}: */ `${itemToProcess.clientName.toUpperCase()} - ${itemToProcess.attendanceType.toUpperCase()} - ${itemToProcess.descricaoServico.toUpperCase()}`;
|
||||||
li.dataset.id = itemToProcess.id; // Armazena o ID no elemento
|
li.dataset.id = itemToProcess.id; // Armazena o ID no elemento
|
||||||
li.classList.add('selected'); // Marca como selecionado visualmente (precisa de CSS)
|
li.classList.add('selected'); // Marca como selecionado visualmente (precisa de CSS)
|
||||||
itemList.appendChild(li);
|
itemList.appendChild(li);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'">
|
||||||
|
<title>Update</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
<script src="js/jquery/jquery.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="login-page">
|
||||||
|
<div class="login-container">
|
||||||
|
<h1>Atualização de <span id="version"></span> para <span id="newversion"></span></h1>
|
||||||
|
<div id="message" class="message"></div>
|
||||||
|
<div id="percent">0%</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="update_renderer.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
//janela update
|
||||||
|
const aVersion = document.getElementById('version');
|
||||||
|
const uVersion = document.getElementById('newversion');
|
||||||
|
const updMessage = document.getElementById('message');
|
||||||
|
const updpercent = document.getElementById('percent');
|
||||||
|
|
||||||
|
|
||||||
|
window.electronAPI.updMessage((data)=>{
|
||||||
|
updMessage.innerHTML = data;
|
||||||
|
});
|
||||||
|
|
||||||
|
window.electronAPI.updPercent((data)=>{
|
||||||
|
updpercent.innerHTML = data + '%';
|
||||||
|
});
|
||||||
|
|
||||||
|
window.electronAPI.atualVersion((data)=>{
|
||||||
|
aVersion.innerHTML = data;
|
||||||
|
});
|
||||||
|
|
||||||
|
window.electronAPI.updNVersion((data)=>{
|
||||||
|
uVersion.innerHTML = data;
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue