diff --git a/main.js b/main.js index 7dfc278..cfc708f 100644 --- a/main.js +++ b/main.js @@ -50,10 +50,10 @@ async function readData() { async function fetchDataFromAPI() { //executa uma vez e a cada 30 segundos - //TODO propicio para fazer um websockt nessas funções que repetem a chamada de requisições em busca de alterações - - getDataAndUpdateFloatingBtn(); + //!primeira requisição é feita para API + getFirstData(); + //! as outras é o websockt que solicita a chamada de requisições em busca de alterações const updData = setInterval(()=>{ getDataAndUpdateFloatingBtn(); },3000); @@ -65,6 +65,57 @@ async function fetchDataFromAPI() { },300000); } +async function getFirstData(){ + + const token = await getAuthToken(); + const colabId = await floatingWin.webContents.executeJavaScript("localStorage.getItem('idOperator')") + const url = apiUrl + 'get-proximos/' + colabId; + + //! checa se o token e o colabId existem + if (!token && !colabId) { console.warn("Token or colabId not found in localStorage. API requests will not be made."); return; } + + //! faz o request + const request = net.request({ + method: 'GET', + url: url, + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + token + } + }); + + //! busca pela resposta + request.on('response', (response) => { + let rawData = ''; + response.on('data', (chunk) => { rawData += chunk; }); + response.on('end', () => { + try { + const parsedData = JSON.parse(rawData); + let proximos = parsedData; + if (response.statusCode === 200) { + floatingWin.webContents.executeJavaScript("localStorage.setItem('proximos','" + JSON.stringify(proximos) + "')"); + let count = proximos.length; + floatingWin.webContents.send('update-count', count); + } else { + console.error(`Erro na requisição: Status code ${response.statusCode}`, parsedData); + } + } catch (error) { + console.error("Erro ao analisar a resposta JSON:", error); + mainWin.webContents.send('api-error', { + message: `Erro ao processar resposta do servidor.` + }); + } + }); + }); + request.on('error', (error) => { + console.error("Erro na requisição:", error); + }); + + request.end(); + + return JSON.parse(await floatingWin.webContents.executeJavaScript("localStorage.getItem('proximos')")); +} + // Função para coletar a lista de atendimentos do servidor, vai ser chamada uma vez e a cada 30s async function getDataAndUpdateFloatingBtn (){ diff --git a/package.json b/package.json index dd6c48a..cf29b27 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "autoatendcolab", - "version": "1.1.1", + "version": "1.1.2", "main": "main.js", "isBuildNow": true, "scripts": { diff --git a/renderer.js b/renderer.js index 1d38ab2..cd36859 100644 --- a/renderer.js +++ b/renderer.js @@ -38,7 +38,8 @@ async function initializePusher() { const channelLocal = localStorage.getItem('channel'); const colabId = localStorage.getItem('idOperator'); - if (channelLocal && PUSHER_APP_KEY) { + //! checa se ja tem o colabId + if (channelLocal && colabId && PUSHER_APP_KEY) { Pusher.logToConsole = true; var pusher = new Pusher(PUSHER_APP_KEY, { @@ -51,21 +52,28 @@ async function initializePusher() { cluster: 'mt1' }); - var channel = pusher.subscribe('chat.' + channelLocal + '_' + colabId); + let channel; + if (pusher.connection.state === 'connected') { + pusher.unsubscribe('chat.' + channelLocal + '_' + colabId); + } + + channel = pusher.subscribe('chat.' + channelLocal + '_' + colabId); + channel.bind('message-sent', function(r) { - let count = r.data.fila.original.length; - console.log(r.data.fila.original); - localStorage.setItem('proximos',JSON.stringify(r.data.fila.original)); + let data = r.data.fila.original; + let count = data.length; + console.log(data); + localStorage.setItem('proximos',JSON.stringify(data)); populateList(r.data.currentData.original); }); pusher.connection.bind('error', function(err) { - console.error('Pusher connection error:', err); + console.error('Pusher connection error: ', err); }); - console.log('Host de conexão:', host); + console.log('Host de conexão: ', host); } else { console.warn('User not authenticated or Pusher APP_KEY not available. Private channel not subscribed.'); } @@ -73,16 +81,11 @@ async function initializePusher() { initializePusher(); - //chama o proximo da fila ao abrir a janela de atendimentos window.electronAPI.selectAtendID((data)=>{ nextButton.disabled = true; if(!data){ queueNumber.innerHTML = 'Ninguem aguardando atendimento, fechando a janela em alguns segundos...'; - // setTimeout(() => { - // localStorage.removeItem('proximos'); - // window.close(); - // },5000); return; } // Reseta a view para a lista sempre que os dados são carregados ao clicar no botão para abrir a janela