From 347b96b1b0499e200584c4bd12d6c2edef127471 Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Thu, 28 May 2026 03:31:10 +0200 Subject: [PATCH] feat: adiciona acompanhamento de % de download na bandeja --- index.js | 49 +++++++++++++++++++++++++++++++++++++++---------- package.json | 2 +- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/index.js b/index.js index 839a0e4..cd69f84 100644 --- a/index.js +++ b/index.js @@ -4,6 +4,12 @@ const fs = require('fs'); const { fork } = require('child_process'); const { autoUpdater } = require('electron-updater'); +let tray = null; +let configWindow = null; +let monitorProcess = null; +let currentStatus = { connected: false, identified: false }; +let downloadProgress = null; // Variável para controlar o progresso de download + // ================================================================ // AUTO-UPDATER CONFIG // ================================================================ @@ -17,10 +23,12 @@ autoUpdater.on('checking-for-update', () => { autoUpdater.on('update-available', (info) => { console.log('🔄 Nova versão disponível:', info.version); + downloadProgress = 0; // Inicializa o progresso + updateTrayMenu(); // Atualiza o menu para mostrar a aba "Baixando..." if (tray) { tray.displayBalloon({ title: 'Nova Atualização Encontrada', - content: `A versão ${info.version} está sendo baixada silenciosamente em segundo plano...`, + content: `A versão ${info.version} está sendo baixada. Clique com botão direito no ícone para acompanhar o progresso!`, iconType: 'info' }); } @@ -31,11 +39,21 @@ autoUpdater.on('update-not-available', () => { }); autoUpdater.on('download-progress', (progress) => { - console.log(`⬇️ Baixando atualização: ${Math.round(progress.percent)}%`); + const p = Math.round(progress.percent); + console.log(`⬇️ Baixando atualização: ${p}%`); + if (downloadProgress !== p) { + downloadProgress = p; + // Atualiza a bandeja com throttling para não piscar demais + if (p % 5 === 0 || p === 100) { + updateTrayMenu(); + } + } }); autoUpdater.on('update-downloaded', (info) => { console.log('✅ Atualização baixada:', info.version, '— será instalada ao fechar o app.'); + downloadProgress = "Pronto"; + updateTrayMenu(); // Notificar o usuário na tray if (tray) { tray.displayBalloon({ @@ -48,13 +66,10 @@ autoUpdater.on('update-downloaded', (info) => { autoUpdater.on('error', (err) => { console.error('❌ Erro no auto-updater:', err.message); + downloadProgress = null; + updateTrayMenu(); }); -let tray = null; -let configWindow = null; -let monitorProcess = null; -let currentStatus = { connected: false, identified: false }; - const appDataFolder = app.getPath('userData'); const configPath = path.join(appDataFolder, 'config.json'); @@ -183,9 +198,22 @@ function updateTrayMenu() { : "ScoreOdonto: Conectado... 🟡"; } - const contextMenu = Menu.buildFromTemplate([ + const template = [ { label: statusText, enabled: false }, - { type: 'separator' }, + { type: 'separator' } + ]; + + // Se houver um download em andamento, mostra a barra no menu + if (downloadProgress !== null) { + if (downloadProgress === "Pronto") { + template.push({ label: '📦 Atualização pronta para instalar (reinicie o app)', enabled: false }); + } else { + template.push({ label: `⬇️ Baixando atualização: ${downloadProgress}%`, enabled: false }); + } + template.push({ type: 'separator' }); + } + + template.push( { label: 'Forçar Sincronização 🔄', click: () => { @@ -227,8 +255,9 @@ function updateTrayMenu() { app.quit(); } } - ]); + ); + const contextMenu = Menu.buildFromTemplate(template); tray.setContextMenu(contextMenu); tray.setToolTip(`ScoreOdonto Dental Client\n${statusText}`); } diff --git a/package.json b/package.json index 25f7d1b..f41a910 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rx.scoreodonto.com-client", - "version": "1.2.2", + "version": "1.2.3", "author": "ScoreOdonto", "description": "Cliente Windows para envio de imagens dentais da ScoreOdonto", "main": "index.js",