feat(client): plan-b — handler reupload-files para imagens ausentes no Wasabi
continuous-integration/webhook Falha no build do client (VPS4)

Quando o servidor não encontra nem thumb nem original no Wasabi, emite
'reupload-files' com a lista de original_filenames para o cliente.

O cliente (client-monitor.js):
- Ouve 'reupload-files' e para cada filename busca localmente em monitorPath
- Remove do uploadedCache (força reenvio mesmo que já conste como enviado)
- Chama sendImageToServer com bypassCache=true
- Respeita isSendingPaused
- Loga resultado (reenviados / não encontrados localmente)

O processo Electron (index.js) exibe balão informativo quando o reenvio
é solicitado, para o usuário saber que algo está acontecendo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Builder
2026-05-31 06:52:49 +02:00
parent ff3b4e5934
commit 0063b23c45
2 changed files with 51 additions and 0 deletions
+43
View File
@@ -1098,6 +1098,49 @@ function connectToServer() {
}
});
// Plan B: servidor solicita reenvio de arquivos ausentes no Wasabi
socket.on('reupload-files', async (data) => {
const files = Array.isArray(data.files) ? data.files : [];
if (files.length === 0) return;
addLog(`📥 [Plan B] Servidor solicitou reenvio de ${files.length} arquivo(s) ausente(s) no Wasabi.`);
// Notifica o processo Electron para exibir balão informativo
if (process.send) {
process.send({ event: 'reupload-requested', count: files.length });
}
let reuploadado = 0;
let naoEncontrado = 0;
for (const filename of files) {
if (isSendingPaused) {
addLog(`⏸️ [Plan B] Envio pausado — interrompendo reenvio. ${reuploadado} já reenviados.`);
break;
}
const filePath = path.join(config.monitorPath, filename);
if (!fs.existsSync(filePath)) {
addLog(`⚠️ [Plan B] Arquivo não encontrado localmente: ${filename}`);
naoEncontrado++;
continue;
}
try {
addLog(`♻️ [Plan B] Reenviando: ${filename}`);
// Remove do cache para forçar reenvio mesmo que já conste como enviado
uploadedCache.delete(filename);
await sendImageToServer(filePath, false, true); // bypassCache = true
reuploadado++;
} catch (e) {
addLog(`❌ [Plan B] Falha ao reenviar ${filename}: ${e.message}`);
}
}
addLog(`✅ [Plan B] Reenvio concluído: ${reuploadado} reenviado(s), ${naoEncontrado} não encontrado(s) localmente.`);
});
socket.on('test-connection', (data) => {
addLog(`🧪 Recebido teste de conexão do servidor. Test ID: ${data?.testId}`);
const startTime = data?.timestamp || Date.now();