feat(client): pausar/continuar envio com auto-retomada após 10 min

- Checkbox "Pausar Envio de Imagens" na bandeja (tray)
- Auto-retomada automática após 10 min de pausa (caso usuário esqueça)
- client-monitor: comandos IPC pause/resume; processQueue e executarSincronizacaoLocal
  respeitam a pausa, mantendo imagens na fila sem perdê-las
- Estado de pausa reaplicado se o monitor reiniciar
- "Forçar Sincronização" retoma o envio automaticamente se estiver pausado
- Bump 1.2.7 → 1.2.8

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Builder
2026-05-31 02:57:43 +02:00
parent bfcf84c5ac
commit 3c6b62126e
3 changed files with 83 additions and 8 deletions
+65 -3
View File
@@ -11,6 +11,54 @@ let currentStatus = { connected: false, identified: false };
let downloadProgress = null; // Variável para controlar o progresso de download
const recentLogs = [];
// ================================================================
// CONTROLE DE PAUSA DE ENVIO
// ================================================================
let isSendingPaused = false; // true = envio de imagens pausado
let autoResumeTimer = null; // timer que retoma o envio sozinho
const AUTO_RESUME_MS = 10 * 60 * 1000; // 10 minutos
function pauseSending() {
isSendingPaused = true;
if (monitorProcess) monitorProcess.send({ command: 'pause' });
// Agenda retomada automática após 10 min, caso o usuário esqueça de continuar
if (autoResumeTimer) clearTimeout(autoResumeTimer);
autoResumeTimer = setTimeout(() => {
addLog('▶️ Auto-retomada: 10 minutos se passaram, retomando envio automaticamente.');
resumeSending(true);
}, AUTO_RESUME_MS);
if (tray) {
tray.displayBalloon({
title: 'ScoreOdonto - Envio Pausado',
content: 'O envio de imagens foi pausado. Ele será retomado automaticamente em 10 minutos se você não continuar antes.',
iconType: 'warning'
});
}
updateTrayMenu();
}
function resumeSending(isAuto = false) {
isSendingPaused = false;
if (autoResumeTimer) { clearTimeout(autoResumeTimer); autoResumeTimer = null; }
if (monitorProcess) monitorProcess.send({ command: 'resume' });
if (tray && !isAuto) {
tray.displayBalloon({
title: 'ScoreOdonto - Envio Retomado',
content: 'O envio de imagens foi retomado.',
iconType: 'info'
});
}
updateTrayMenu();
}
function toggleSending() {
if (isSendingPaused) resumeSending(false);
else pauseSending();
}
// ================================================================
// AUTO-UPDATER CONFIG
// ================================================================
@@ -255,15 +303,29 @@ function updateTrayMenu(countdown = null, countdownInterval = null, updateVersio
}
template.push(
{
label: 'Forçar Sincronização 🔄',
{
label: isSendingPaused ? '⏸️ Envio PAUSADO (retoma em ~10 min)' : '▶️ Envio Ativo',
enabled: false
},
{
label: 'Pausar Envio de Imagens',
type: 'checkbox',
checked: isSendingPaused,
click: () => toggleSending()
},
{ type: 'separator' },
{
label: 'Forçar Sincronização 🔄',
click: () => {
if (isSendingPaused) {
resumeSending(false);
}
if (monitorProcess) {
monitorProcess.send({ command: 'sync' });
} else {
startMonitorProcess();
}
}
}
},
{
label: 'Verificar Atualizações 🔄',